From 55c0a0f5a7da1dce4b6405cb579c05ca294f0daf Mon Sep 17 00:00:00 2001 From: Jose Arriaga Maldonado Date: Tue, 11 Mar 2025 17:49:05 -0700 Subject: [PATCH 1/2] Prepare 2.2.0-beta.3 release (Part 1) --- CHANGELOG.md | 10 + api/OpenAI.net8.0.cs | 682 +++++++++++++++- api/OpenAI.netstandard2.0.cs | 676 +++++++++++++++- examples/Responses/Example01_CuaFlow.cs | 45 ++ .../Administration/Internal/GeneratorStubs.cs | 68 +- src/Custom/Assistants/Assistant.cs | 2 +- src/Custom/Assistants/AssistantClient.cs | 53 +- .../Assistants/AssistantCollectionOrder.cs | 43 +- .../Assistants/AssistantCreationOptions.cs | 11 +- .../Assistants/AssistantDeletionResult.cs | 2 +- .../AssistantModificationOptions.cs | 7 +- .../Assistants/AssistantResponseFormat.cs | 2 +- src/Custom/Assistants/AssistantThread.cs | 2 +- .../CodeInterpreterToolResources.cs | 2 +- .../Assistants/FileSearchRankingOptions.cs | 2 +- .../Assistants/FileSearchToolDefinition.cs | 2 +- .../Assistants/FileSearchToolResources.cs | 2 +- .../Assistants/FunctionToolDefinition.cs | 2 +- src/Custom/Assistants/GeneratorStubs.cs | 22 +- .../Internal/GeneratorStubs.Internal.cs | 237 +++--- .../InternalAssistantMessageClient.cs | 6 +- .../InternalAssistantRunClient.Protocol.cs | 43 +- .../Internal/InternalAssistantRunClient.cs | 22 +- .../Internal/InternalAssistantThreadClient.cs | 2 +- ...ernalAssistantToolsFileSearchFileSearch.cs | 2 +- .../InternalMessageImageFileContent.cs | 2 +- .../InternalMessageImageUrlContent.cs | 2 +- .../Internal/InternalMessageRefusalContent.cs | 2 +- .../InternalRequestMessageTextContent.cs | 2 +- .../InternalRequiredFunctionToolCall.cs | 2 +- .../InternalResponseMessageTextContent.cs | 2 +- ...InternalRunStepCodeInterpreterLogOutput.cs | 2 +- ...ailsToolCallsFileSearchObjectFileSearch.cs | 2 +- ...rnalRunStepDetailsMessageCreationObject.cs | 2 +- ...epDetailsToolCallsCodeOutputImageObject.cs | 2 +- ...ailsToolCallsFileSearchObjectFileSearch.cs | 2 +- ...nternalRunStepToolCallDetailsCollection.cs | 2 +- .../UnknownAssistantToolDefinition.cs | 2 +- ...knownMessageContentTextObjectAnnotation.cs | 2 +- .../Internal/UnknownMessageDeltaContent.cs | 2 +- ...nknownMessageDeltaTextContentAnnotation.cs | 2 +- .../UnknownRunStepDeltaStepDetails.cs | 2 +- ...sCodeObjectCodeInterpreterOutputsObject.cs | 2 +- ...epDetailsToolCallsObjectToolCallsObject.cs | 2 +- .../Internal/UnknownRunStepDetails.cs | 2 +- ...sCodeObjectCodeInterpreterOutputsObject.cs | 2 +- ...epDetailsToolCallsObjectToolCallsObject.cs | 2 +- .../UnknownRunStepObjectStepDetails.cs | 2 +- .../Assistants/MessageCollectionOrder.cs | 43 +- src/Custom/Assistants/MessageContent.cs | 2 +- .../Assistants/MessageCreationAttachment.cs | 2 +- .../Assistants/MessageCreationOptions.cs | 2 +- .../Assistants/MessageDeletionResult.cs | 2 +- .../Assistants/MessageModificationOptions.cs | 2 +- src/Custom/Assistants/MessageRole.cs | 2 +- src/Custom/Assistants/RunCollectionOrder.cs | 44 +- src/Custom/Assistants/RunCreationOptions.cs | 7 +- src/Custom/Assistants/RunIncompleteReason.cs | 2 +- .../Assistants/RunModificationOptions.cs | 2 +- src/Custom/Assistants/RunStatus.cs | 2 +- src/Custom/Assistants/RunStep.cs | 2 +- .../Assistants/RunStepCollectionOrder.cs | 43 +- src/Custom/Assistants/RunStepDetails.cs | 2 +- .../Assistants/RunStepFileSearchResult.cs | 2 +- .../RunStepFileSearchResultContent.cs | 2 +- .../RunStepFileSearchResultContentKind.cs | 2 +- src/Custom/Assistants/RunStepKind.cs | 2 +- src/Custom/Assistants/RunStepTokenUsage.cs | 2 +- src/Custom/Assistants/RunStepToolCall.cs | 2 +- src/Custom/Assistants/RunStepToolCallKind.cs | 2 +- src/Custom/Assistants/RunTokenUsage.cs | 2 +- .../Assistants/RunTruncationStrategy.cs | 2 +- .../AsyncStreamingUpdateCollection.cs | 151 ---- ...nStepDetailsUpdateCodeInterpreterOutput.cs | 2 +- .../Assistants/Streaming/StreamingUpdate.cs | 16 +- .../Streaming/StreamingUpdateCollection.cs | 157 ---- .../Assistants/ThreadCreationOptions.cs | 2 +- src/Custom/Assistants/ThreadDeletionResult.cs | 2 +- src/Custom/Assistants/ThreadMessage.cs | 2 +- .../Assistants/ThreadModificationOptions.cs | 2 +- src/Custom/Assistants/ThreadRun.cs | 2 +- src/Custom/Assistants/ToolConstraint.cs | 2 +- src/Custom/Assistants/ToolDefinition.cs | 2 +- src/Custom/Assistants/ToolOutput.cs | 2 +- src/Custom/Assistants/ToolResources.cs | 2 +- .../Assistants/VectorStoreCreationHelper.cs | 2 +- src/Custom/Audio/AudioClient.cs | 12 +- src/Custom/Audio/AudioTranscription.cs | 2 +- src/Custom/Audio/AudioTranscriptionFormat.cs | 2 +- src/Custom/Audio/AudioTranscriptionOptions.cs | 6 +- src/Custom/Audio/AudioTranslation.cs | 2 +- src/Custom/Audio/AudioTranslationFormat.cs | 2 +- src/Custom/Audio/AudioTranslationOptions.cs | 6 +- src/Custom/Audio/GeneratedSpeechFormat.cs | 2 +- src/Custom/Audio/GeneratedSpeechVoice.cs | 2 +- src/Custom/Audio/Internal/GeneratorStubs.cs | 18 +- src/Custom/Audio/SpeechGenerationOptions.cs | 2 +- src/Custom/Audio/TranscribedSegment.cs | 2 +- src/Custom/Audio/TranscribedWord.cs | 2 +- src/Custom/Batch/BatchClient.cs | 6 +- .../Batch/CreateBatchOperation.Protocol.cs | 61 +- src/Custom/Batch/Internal/GeneratorStubs.cs | 34 +- src/Custom/Chat/ChatAudioOptions.cs | 2 +- src/Custom/Chat/ChatClient.cs | 18 +- src/Custom/Chat/ChatCompletion.cs | 6 +- src/Custom/Chat/ChatCompletionOptions.cs | 4 +- src/Custom/Chat/ChatFinishReason.cs | 2 +- src/Custom/Chat/ChatFunction.cs | 2 +- src/Custom/Chat/ChatFunctionCall.cs | 4 +- src/Custom/Chat/ChatFunctionChoice.cs | 2 +- src/Custom/Chat/ChatImageDetailLevel.cs | 2 +- src/Custom/Chat/ChatInputAudioFormat.cs | 2 +- src/Custom/Chat/ChatInputTokenUsageDetails.cs | 2 +- src/Custom/Chat/ChatMessageAnnotation.cs | 24 + src/Custom/Chat/ChatMessageContent.cs | 6 +- src/Custom/Chat/ChatMessageContentPart.cs | 2 +- src/Custom/Chat/ChatMessageRole.cs | 2 +- src/Custom/Chat/ChatOutputAudio.cs | 2 +- src/Custom/Chat/ChatOutputAudioFormat.cs | 2 +- src/Custom/Chat/ChatOutputAudioReference.cs | 2 +- src/Custom/Chat/ChatOutputAudioVoice.cs | 2 +- src/Custom/Chat/ChatOutputPrediction.cs | 2 +- .../Chat/ChatOutputTokenUsageDetails.cs | 4 +- src/Custom/Chat/ChatReasoningEffortLevel.cs | 2 +- src/Custom/Chat/ChatResponseFormat.cs | 4 +- .../Chat/ChatTokenLogProbabilityDetails.cs | 2 +- .../Chat/ChatTokenTopLogProbabilityDetails.cs | 2 +- src/Custom/Chat/ChatTokenUsage.cs | 2 +- src/Custom/Chat/ChatTool.cs | 4 +- src/Custom/Chat/ChatToolCall.cs | 4 +- src/Custom/Chat/ChatToolCallKind.cs | 2 +- src/Custom/Chat/ChatToolChoice.cs | 2 +- src/Custom/Chat/ChatToolKind.cs | 2 +- src/Custom/Chat/ChatWebSearchOptions.cs | 14 + src/Custom/Chat/Internal/GeneratorStubs.cs | 100 ++- ...alChatCompletionMessageToolCallFunction.cs | 2 +- ...nRequestMessageContentPartImageImageUrl.cs | 2 +- .../InternalChatCompletionResponseMessage.cs | 2 +- ...ternalChatCompletionStreamResponseDelta.cs | 2 +- .../InternalChatOutputPredictionContent.cs | 2 +- .../InternalChatOutputPredictionKind.cs | 2 +- .../InternalChatResponseFormatJsonObject.cs | 2 +- .../InternalChatResponseFormatJsonSchema.cs | 2 +- .../InternalChatResponseFormatText.cs | 2 +- .../Internal/InternalUnknownChatMessage.cs | 2 +- .../InternalUnknownChatResponseFormat.cs | 2 +- .../Chat/Messages/AssistantChatMessage.cs | 6 +- src/Custom/Chat/Messages/ChatMessage.cs | 2 +- .../Chat/Messages/DeveloperChatMessage.cs | 2 +- .../Chat/Messages/FunctionChatMessage.cs | 2 +- src/Custom/Chat/Messages/SystemChatMessage.cs | 2 +- src/Custom/Chat/Messages/ToolChatMessage.cs | 2 +- src/Custom/Chat/Messages/UserChatMessage.cs | 2 +- src/Custom/Chat/OpenAIChatModelFactory.cs | 28 +- ...tCompletionMessageToolCallChunkFunction.cs | 2 +- ...reateChatCompletionStreamResponseChoice.cs | 2 +- .../StreamingChatCompletionUpdate.cs | 2 +- .../StreamingChatFunctionCallUpdate.cs | 2 +- .../StreamingChatOutputAudioUpdate.cs | 2 +- .../Streaming/StreamingChatToolCallUpdate.cs | 4 +- .../FileSearchRanker.cs | 2 +- src/Custom/Common/Internal/GeneratorStubs.cs | 19 +- ...ernalResponseFormatJsonSchemaJsonSchema.cs | 2 +- src/Custom/Embeddings/EmbeddingClient.cs | 4 +- .../Embeddings/EmbeddingGenerationOptions.cs | 2 +- src/Custom/Embeddings/EmbeddingTokenUsage.cs | 2 +- .../Embeddings/Internal/GeneratorStubs.cs | 8 +- src/Custom/Embeddings/OpenAIEmbedding.cs | 2 +- ...OpenAIEmbeddingCollection.Serialization.cs | 2 +- .../Embeddings/OpenAIEmbeddingCollection.cs | 4 +- src/Custom/Files/FileDeletionResult.cs | 2 +- src/Custom/Files/FilePurpose.Serialization.cs | 24 + src/Custom/Files/FilePurpose.cs | 4 +- src/Custom/Files/FileStatus.cs | 2 +- .../Files/FileUploadPurpose.Serialization.cs | 48 ++ src/Custom/Files/FileUploadPurpose.cs | 5 +- src/Custom/Files/Internal/GeneratorStubs.cs | 24 +- .../Internal/InternalFileUploadOptions.cs | 6 +- .../Files/Internal/InternalUploadsClient.cs | 2 +- src/Custom/Files/OpenAIFile.cs | 2 +- src/Custom/Files/OpenAIFileClient.cs | 8 +- src/Custom/Files/OpenAIFileCollection.cs | 6 +- src/Custom/Files/OpenAIFilesModelFactory.cs | 32 +- src/Custom/FineTuning/FineTuningClient.cs | 4 +- .../FineTuning/Internal/GeneratorStubs.cs | 110 +-- src/Custom/Images/GeneratedImage.cs | 2 +- src/Custom/Images/GeneratedImageCollection.cs | 2 +- src/Custom/Images/GeneratedImageFormat.cs | 2 +- src/Custom/Images/GeneratedImageQuality.cs | 4 +- src/Custom/Images/GeneratedImageSize.cs | 2 +- src/Custom/Images/GeneratedImageStyle.cs | 2 +- src/Custom/Images/ImageClient.cs | 28 +- src/Custom/Images/ImageEditOptions.cs | 6 +- src/Custom/Images/ImageGenerationOptions.cs | 2 +- src/Custom/Images/ImageVariationOptions.cs | 6 +- src/Custom/Images/Internal/GeneratorStubs.cs | 14 +- src/Custom/Internal/AcceptHeaderValue.cs | 4 + .../Internal/InternalFunctionDefinition.cs | 2 +- .../Internal/GeneratorStubs.cs | 14 +- .../Internal/LegacyCompletionClient.cs | 4 +- src/Custom/Models/Internal/GeneratorStubs.cs | 6 +- src/Custom/Models/ModelDeletionResult.cs | 2 +- src/Custom/Models/OpenAIModel.cs | 2 +- src/Custom/Models/OpenAIModelClient.cs | 4 +- src/Custom/Models/OpenAIModelCollection.cs | 2 +- .../Moderations/Internal/GeneratorStubs.cs | 16 +- ...ResponseResultCategoryAppliedInputTypes.cs | 2 +- .../ModerationApplicableInputKinds.cs | 2 +- src/Custom/Moderations/ModerationClient.cs | 4 +- src/Custom/Moderations/ModerationOptions.cs | 2 +- src/Custom/Moderations/ModerationResult.cs | 2 +- .../Moderations/ModerationResultCollection.cs | 2 +- src/Custom/OpenAIClient.cs | 30 +- src/Custom/OpenAIClientOptions.cs | 2 +- src/Custom/OpenAIError.cs | 4 +- src/Custom/OpenAIModelFactory.cs | 2 +- .../ConversationContentPart.cs | 2 +- .../ConversationContentPartKind.cs | 2 +- .../ConversationFunctionTool.cs | 2 +- .../ConversationIncompleteReason.cs | 2 +- .../ConversationInputTokenUsageDetails.cs | 2 +- .../RealtimeConversation/ConversationItem.cs | 2 +- .../ConversationOutputTokenUsageDetails.cs | 2 +- .../ConversationRateLimitDetailsItem.cs | 2 +- .../ConversationResponseOptions.cs | 2 +- .../ConversationSessionOptions.cs | 2 +- .../ConversationStatusDetails.cs | 2 +- .../RealtimeConversation/ConversationTool.cs | 2 +- .../ConversationToolChoiceKind.cs | 2 +- .../ConversationTurnDetectionKind.cs | 2 +- .../ConversationTurnDetectionOptions.cs | 2 +- .../RealtimeConversation/GeneratorStubs.cs | 18 +- .../Internal/GeneratorStubs.cs | 92 +-- ...ternalRealtimeClientEventResponseCreate.cs | 2 +- ...rnalRealtimeRequestAssistantMessageItem.cs | 2 +- ...nternalRealtimeRequestSystemMessageItem.cs | 2 +- .../InternalRealtimeRequestUserMessageItem.cs | 2 +- .../Internal/InternalRealtimeResponse.cs | 2 +- .../Internal/InternalRealtimeResponseItem.cs | 2 +- .../InternalRealtimeResponseMessageItem.cs | 2 +- .../InternalRealtimeResponseSession.cs | 2 +- ...alRealtimeServerEventResponseAudioDelta.cs | 2 +- ...ServerEventResponseAudioTranscriptDelta.cs | 2 +- ...timeServerEventResponseContentPartAdded.cs | 2 +- ...ltimeServerEventResponseContentPartDone.cs | 2 +- ...EventResponseFunctionCallArgumentsDelta.cs | 2 +- ...rEventResponseFunctionCallArgumentsDone.cs | 2 +- ...nalRealtimeServerEventResponseTextDelta.cs | 2 +- ...imeServerVadTurnDetection.Serialization.cs | 2 +- .../RealtimeConversationClient.cs | 2 +- .../ResponseConversationSelection.cs | 2 +- .../ConversationErrorUpdate.cs | 2 +- .../ConversationInputAudioClearedUpdate.cs | 2 +- .../ConversationInputAudioCommittedUpdate.cs | 2 +- .../ConversationInputSpeechFinishedUpdate.cs | 2 +- .../ConversationInputSpeechStartedUpdate.cs | 2 +- ...versationInputTranscriptionFailedUpdate.cs | 2 +- ...rsationInputTranscriptionFinishedUpdate.cs | 2 +- .../ConversationItemCreatedUpdate.cs | 2 +- .../ConversationItemDeletedUpdate.cs | 2 +- ...rsationItemStreamingAudioFinishedUpdate.cs | 2 +- ...reamingAudioTranscriptionFinishedUpdate.cs | 2 +- ...ConversationItemStreamingFinishedUpdate.cs | 2 +- .../ConversationItemStreamingStartedUpdate.cs | 2 +- ...ersationItemStreamingTextFinishedUpdate.cs | 2 +- .../ConversationItemTruncatedUpdate.cs | 2 +- .../ConversationRateLimitsUpdate.cs | 2 +- .../ConversationResponseFinishedUpdate.cs | 2 +- .../ConversationResponseStartedUpdate.cs | 2 +- .../ConversationSessionConfiguredUpdate.cs | 2 +- .../ConversationSessionStartedUpdate.cs | 2 +- .../ResponseUpdates/ConversationUpdate.cs | 2 +- .../ResponseUpdates/ConversationUpdateKind.cs | 2 +- .../Responses/Internal/GeneratorStubs.cs | 45 ++ ...nternalCreateResponsesRequestIncludable.cs | 14 + ...InternalResponsesComputerCallOutputItem.cs | 26 + .../InternalResponsesInputFileContentPart.cs | 13 + .../InternalResponsesInputImageContentPart.cs | 6 + .../InternalResponsesInputTextContentPart.cs | 9 + ...lResponsesMessageAnnotationFileCitation.cs | 6 + ...ernalResponsesMessageAnnotationFilePath.cs | 6 + ...alResponsesMessageAnnotationUrlCitation.cs | 6 + ...ternalResponsesOutputRefusalContentPart.cs | 8 + .../InternalResponsesOutputTextContentPart.cs | 9 + .../InternalUnknownResponseTextFormat.cs | 6 + .../Responses/Items/ComputerCallAction.cs | 134 ++++ .../Responses/Items/ComputerCallActionKind.cs | 24 + .../Items/ComputerCallActionMouseButton.cs | 11 + .../Items/ComputerCallOutputResponseItem.cs | 6 + .../Items/ComputerCallOutputStatus.cs | 10 + .../Items/ComputerCallResponseItem.cs | 24 + .../Items/ComputerCallSafetyCheck.cs | 6 + .../Responses/Items/ComputerCallStatus.cs | 10 + src/Custom/Responses/Items/ComputerOutput.cs | 41 + .../Items/FileSearchCallResponseItem.cs | 21 + .../Responses/Items/FileSearchCallResult.cs | 6 + .../Responses/Items/FileSearchCallStatus.cs | 12 + .../Items/FunctionCallOutputResponseItem.cs | 9 + .../Items/FunctionCallOutputStatus.cs | 10 + .../Items/FunctionCallResponseItem.cs | 33 + .../Responses/Items/FunctionCallStatus.cs | 10 + .../InternalResponsesAssistantMessage.cs | 19 + .../InternalResponsesDeveloperMessage.cs | 19 + .../InternalResponsesSystemMessage.cs | 19 + .../Internal/InternalResponsesUserMessage.cs | 20 + .../Responses/Items/MessageResponseItem.cs | 18 + src/Custom/Responses/Items/MessageRole.cs | 6 + src/Custom/Responses/Items/MessageStatus.cs | 10 + .../Responses/Items/ReasoningResponseItem.cs | 35 + src/Custom/Responses/Items/ReasoningStatus.cs | 10 + .../Responses/Items/ReferenceResponseItem.cs | 13 + src/Custom/Responses/Items/ResponseItem.cs | 144 ++++ .../Items/WebSearchCallResponseItem.cs | 14 + .../Responses/Items/WebSearchCallStatus.cs | 11 + src/Custom/Responses/OpenAIResponse.cs | 44 ++ .../OpenAIResponseClient.Protocol.cs | 110 +++ src/Custom/Responses/OpenAIResponseClient.cs | 251 ++++++ .../AsyncResponseItemCollectionResult.cs | 89 +++ .../ResponseItemCollectionOptions.cs | 34 + .../Pagination/ResponseItemCollectionOrder.cs | 37 + .../ResponseItemCollectionPageToken.cs | 148 ++++ .../ResponseItemCollectionResult.cs | 97 +++ src/Custom/Responses/ResponseContentPart.cs | 86 ++ .../Responses/ResponseContentPartKind.cs | 11 + .../Responses/ResponseCreationOptions.cs | 84 ++ .../Responses/ResponseDeletionResult.cs | 10 + src/Custom/Responses/ResponseError.cs | 7 + .../Responses/ResponseImageDetailLevel.cs | 6 + .../ResponseIncompleteStatusDetails.cs | 7 + .../ResponseIncompleteStatusReason.cs | 6 + .../Responses/ResponseMessageAnnotation.cs | 26 + .../ResponseMessageAnnotationKind.cs | 12 + .../ResponseOutputTokenUsageDetails.cs | 10 + .../Responses/ResponseReasoningEffortLevel.cs | 6 + .../Responses/ResponseReasoningOptions.cs | 18 + .../ResponseReasoningSummaryVerbosity.cs | 6 + src/Custom/Responses/ResponseStatus.cs | 10 + src/Custom/Responses/ResponseTextFormat.cs | 25 + src/Custom/Responses/ResponseTextOptions.cs | 9 + src/Custom/Responses/ResponseTokenUsage.cs | 21 + .../Responses/ResponseTruncationMode.cs | 6 + .../Streaming/Internal/GeneratorStubs.cs | 22 + ...onseStreamEventResponseContentPartAdded.cs | 9 + ...ponseStreamEventResponseContentPartDone.cs | 9 + ...nseContentPartDeltaUpdate.Serialization.cs | 36 + ...StreamingResponseContentPartDeltaUpdate.cs | 62 ++ .../Streaming/StreamingResponseErrorUpdate.cs | 6 + ...ponseFileSearchCallUpdate.Serialization.cs | 35 + .../StreamingResponseFileSearchCallUpdate.cs | 30 + ...reamingResponseItemUpdate.Serialization.cs | 36 + .../Streaming/StreamingResponseItemUpdate.cs | 29 + ...amingResponseStatusUpdate.Serialization.cs | 39 + .../StreamingResponseStatusUpdate.cs | 30 + .../StreamingResponseTextAnnotationUpdate.cs | 5 + .../StreamingResponseUpdate.Serialization.cs | 39 + .../Streaming/StreamingResponseUpdate.cs | 9 + .../Streaming/StreamingResponseUpdateKind.cs | 5 + ...sponseWebSearchCallUpdate.Serialization.cs | 35 + .../StreamingResponseWebSearchCallUpdate.cs | 30 + .../Tools/ComputerToolEnvironment.cs | 6 + .../Responses/Tools/FileSearchToolRanker.cs | 6 + .../Tools/FileSearchToolRankingOptions.cs | 6 + .../Internal/InternalUnknownResponsesTool.cs | 6 + src/Custom/Responses/Tools/ResponseTool.cs | 78 ++ .../Responses/Tools/ResponseToolChoice.cs | 27 + .../Tools/WebSearchToolContextSize.cs | 6 + .../Responses/Tools/WebSearchToolLocation.cs | 16 + .../AddFileToVectorStoreOperation.Protocol.cs | 28 +- .../AddFileToVectorStoreOperation.cs | 4 +- .../CreateBatchFileJobOperation.Protocol.cs | 55 +- .../CreateBatchFileJobOperation.cs | 4 +- .../CreateVectorStoreOperation.Protocol.cs | 26 +- .../CreateVectorStoreOperation.cs | 4 +- .../VectorStores/FileChunkingStrategy.cs | 2 +- .../FileFromStoreRemovalResult.cs | 2 +- .../VectorStores/Internal/GeneratorStubs.cs | 44 +- .../AsyncVectorStoreCollectionResult.cs | 2 +- ...yncVectorStoreFileBatchCollectionResult.cs | 2 +- .../AsyncVectorStoreFileCollectionResult.cs | 2 +- .../Pagination/VectorStoreCollectionResult.cs | 2 +- .../VectorStoreFileBatchCollectionResult.cs | 2 +- .../VectorStoreFileCollectionResult.cs | 2 +- .../StaticFileChunkingStrategy.cs | 2 +- src/Custom/VectorStores/VectorStore.cs | 2 +- .../VectorStores/VectorStoreBatchFileJob.cs | 2 +- .../VectorStoreBatchFileJobStatus.cs | 2 +- .../VectorStoreClient.Protocol.cs | 285 ------- src/Custom/VectorStores/VectorStoreClient.cs | 18 +- .../VectorStoreCollectionOrder.cs | 2 +- .../VectorStoreCreationOptions.cs | 2 +- .../VectorStores/VectorStoreDeletionResult.cs | 2 +- .../VectorStoreExpirationAnchor.cs | 2 +- .../VectorStoreExpirationPolicy.cs | 8 +- .../VectorStoreFileAssociation.cs | 9 +- ...ctorStoreFileAssociationCollectionOrder.cs | 43 +- .../VectorStoreFileAssociationError.cs | 2 +- .../VectorStoreFileAssociationErrorCode.cs | 2 +- .../VectorStoreFileAssociationStatus.cs | 2 +- .../VectorStores/VectorStoreFileCounts.cs | 2 +- .../VectorStoreFileStatusFilter.cs | 2 +- .../VectorStoreModificationOptions.cs | 2 +- src/Custom/VectorStores/VectorStoreStatus.cs | 2 +- src/Generated/AssistantClient.RestClient.cs | 15 +- src/Generated/AssistantClient.cs | 4 - src/Generated/AudioClient.RestClient.cs | 6 +- src/Generated/AudioClient.cs | 4 - src/Generated/BatchClient.RestClient.cs | 2 +- src/Generated/BatchClient.cs | 4 - src/Generated/ChatClient.RestClient.cs | 2 +- src/Generated/ChatClient.cs | 4 - src/Generated/EmbeddingClient.RestClient.cs | 2 +- src/Generated/EmbeddingClient.cs | 4 - src/Generated/FineTuningClient.RestClient.cs | 8 +- src/Generated/FineTuningClient.cs | 4 - src/Generated/ImageClient.RestClient.cs | 6 +- src/Generated/ImageClient.cs | 4 - .../Internal/CodeGenMemberAttribute.cs | 16 + .../Internal/CodeGenSerializationAttribute.cs | 31 + .../Internal/CodeGenSuppressAttribute.cs | 22 + .../Internal/CodeGenTypeAttribute.cs | 19 + .../MultiPartFormDataBinaryContent.cs | 195 +++++ ...ternalAssistantMessageClient.RestClient.cs | 15 +- .../InternalAssistantMessageClient.cs | 9 +- .../InternalAssistantRunClient.RestClient.cs | 33 +- src/Generated/InternalAssistantRunClient.cs | 9 +- ...nternalAssistantThreadClient.RestClient.cs | 12 +- .../InternalAssistantThreadClient.cs | 10 +- .../InternalUploadsClient.RestClient.cs | 8 +- src/Generated/InternalUploadsClient.cs | 9 +- .../LegacyCompletionClient.RestClient.cs | 2 +- src/Generated/LegacyCompletionClient.cs | 3 - src/Generated/Models/AcceptHeaderValue.cs | 43 + .../Models/Assistant.Serialization.cs | 65 +- src/Generated/Models/Assistant.cs | 2 +- .../AssistantChatMessage.Serialization.cs | 43 +- src/Generated/Models/AssistantChatMessage.cs | 2 +- .../Models/AssistantCollectionOrder.cs | 40 - .../AssistantCreationOptions.Serialization.cs | 98 +-- .../Models/AssistantCreationOptions.cs | 4 +- .../AssistantDeletionResult.Serialization.cs | 9 +- .../Models/AssistantDeletionResult.cs | 2 +- ...istantModificationOptions.Serialization.cs | 98 +-- .../Models/AssistantModificationOptions.cs | 4 +- .../AssistantResponseFormat.Serialization.cs | 11 +- .../Models/AssistantResponseFormat.cs | 2 +- .../Models/AssistantThread.Serialization.cs | 17 +- src/Generated/Models/AssistantThread.cs | 2 +- .../AudioTranscription.Serialization.cs | 11 +- ...AudioTranscriptionOptions.Serialization.cs | 7 +- .../Models/AudioTranslation.Serialization.cs | 9 +- .../AudioTranslationOptions.Serialization.cs | 7 +- .../Models/ChatAudioOptions.Serialization.cs | 7 +- .../Models/ChatCompletion.Serialization.cs | 20 +- src/Generated/Models/ChatCompletion.cs | 2 +- .../ChatCompletionOptions.Serialization.cs | 298 +++---- src/Generated/Models/ChatCompletionOptions.cs | 21 +- .../Models/ChatFinishReason.Serialization.cs | 24 +- .../Models/ChatFunction.Serialization.cs | 7 +- .../Models/ChatFunctionCall.Serialization.cs | 9 +- .../ChatFunctionChoice.Serialization.cs | 8 +- ...hatInputTokenUsageDetails.Serialization.cs | 7 +- .../Models/ChatMessage.Serialization.cs | 8 +- src/Generated/Models/ChatMessage.cs | 5 +- .../ChatMessageAnnotation.Serialization.cs | 153 ++++ src/Generated/Models/ChatMessageAnnotation.cs | 32 + .../ChatMessageContentPart.Serialization.cs | 8 +- .../Models/ChatMessageRole.Serialization.cs | 28 +- .../Models/ChatOutputAudio.Serialization.cs | 7 +- .../ChatOutputAudioReference.Serialization.cs | 7 +- .../ChatOutputPrediction.Serialization.cs | 3 +- ...atOutputTokenUsageDetails.Serialization.cs | 7 +- .../ChatResponseFormat.Serialization.cs | 3 +- ...okenLogProbabilityDetails.Serialization.cs | 9 +- ...nTopLogProbabilityDetails.Serialization.cs | 9 +- .../Models/ChatTokenUsage.Serialization.cs | 11 +- .../Models/ChatTool.Serialization.cs | 11 +- src/Generated/Models/ChatTool.cs | 2 +- .../Models/ChatToolCall.Serialization.cs | 11 +- src/Generated/Models/ChatToolCall.cs | 2 +- .../Models/ChatToolCallKind.Serialization.cs | 8 +- .../Models/ChatToolChoice.Serialization.cs | 8 +- .../Models/ChatToolKind.Serialization.cs | 8 +- .../ChatWebSearchOptions.Serialization.cs | 159 ++++ src/Generated/Models/ChatWebSearchOptions.cs | 32 + ...InterpreterToolDefinition.Serialization.cs | 5 +- ...eInterpreterToolResources.Serialization.cs | 7 +- .../ComputerCallAction.Serialization.cs | 154 ++++ src/Generated/Models/ComputerCallAction.cs | 31 + .../ComputerCallActionKind.Serialization.cs | 66 ++ ...uterCallActionMouseButton.Serialization.cs | 46 ++ ...terCallOutputResponseItem.Serialization.cs | 190 +++++ .../Models/ComputerCallOutputResponseItem.cs | 41 + .../ComputerCallOutputStatus.Serialization.cs | 36 + .../ComputerCallResponseItem.Serialization.cs | 186 +++++ .../Models/ComputerCallResponseItem.cs | 28 + .../ComputerCallSafetyCheck.Serialization.cs | 164 ++++ .../Models/ComputerCallSafetyCheck.cs | 46 ++ .../ComputerCallStatus.Serialization.cs | 36 + .../Models/ComputerOutput.Serialization.cs | 138 ++++ src/Generated/Models/ComputerOutput.cs | 33 + .../Models/ComputerToolEnvironment.cs | 50 ++ .../ConversationContentPart.Serialization.cs | 5 +- .../Models/ConversationContentPart.cs | 2 +- .../ConversationErrorUpdate.Serialization.cs | 9 +- .../Models/ConversationErrorUpdate.cs | 4 +- .../ConversationFunctionTool.Serialization.cs | 5 +- ...onInputAudioClearedUpdate.Serialization.cs | 7 +- .../ConversationInputAudioClearedUpdate.cs | 4 +- ...InputAudioCommittedUpdate.Serialization.cs | 7 +- .../ConversationInputAudioCommittedUpdate.cs | 4 +- ...InputSpeechFinishedUpdate.Serialization.cs | 7 +- .../ConversationInputSpeechFinishedUpdate.cs | 4 +- ...nInputSpeechStartedUpdate.Serialization.cs | 7 +- .../ConversationInputSpeechStartedUpdate.cs | 4 +- ...ionInputTokenUsageDetails.Serialization.cs | 7 +- ...TranscriptionFailedUpdate.Serialization.cs | 9 +- ...versationInputTranscriptionFailedUpdate.cs | 4 +- ...anscriptionFinishedUpdate.Serialization.cs | 7 +- ...rsationInputTranscriptionFinishedUpdate.cs | 4 +- ...InputTranscriptionOptions.Serialization.cs | 7 +- .../Models/ConversationItem.Serialization.cs | 5 +- src/Generated/Models/ConversationItem.cs | 2 +- ...ersationItemCreatedUpdate.Serialization.cs | 9 +- .../Models/ConversationItemCreatedUpdate.cs | 4 +- ...ersationItemDeletedUpdate.Serialization.cs | 7 +- .../Models/ConversationItemDeletedUpdate.cs | 4 +- ...eamingAudioFinishedUpdate.Serialization.cs | 7 +- ...rsationItemStreamingAudioFinishedUpdate.cs | 4 +- ...anscriptionFinishedUpdate.Serialization.cs | 7 +- ...reamingAudioTranscriptionFinishedUpdate.cs | 4 +- ...emStreamingFinishedUpdate.Serialization.cs | 9 +- ...ConversationItemStreamingFinishedUpdate.cs | 4 +- ...temStreamingStartedUpdate.Serialization.cs | 9 +- .../ConversationItemStreamingStartedUpdate.cs | 4 +- ...reamingTextFinishedUpdate.Serialization.cs | 7 +- ...ersationItemStreamingTextFinishedUpdate.cs | 4 +- ...sationItemTruncatedUpdate.Serialization.cs | 7 +- .../Models/ConversationItemTruncatedUpdate.cs | 4 +- ...onOutputTokenUsageDetails.Serialization.cs | 7 +- ...ationRateLimitDetailsItem.Serialization.cs | 7 +- ...versationRateLimitsUpdate.Serialization.cs | 7 +- .../Models/ConversationRateLimitsUpdate.cs | 4 +- ...ionResponseFinishedUpdate.Serialization.cs | 9 +- .../ConversationResponseFinishedUpdate.cs | 4 +- ...nversationResponseOptions.Serialization.cs | 13 +- .../Models/ConversationResponseOptions.cs | 2 +- ...tionResponseStartedUpdate.Serialization.cs | 9 +- .../ConversationResponseStartedUpdate.cs | 4 +- ...onSessionConfiguredUpdate.Serialization.cs | 9 +- .../ConversationSessionConfiguredUpdate.cs | 4 +- ...onversationSessionOptions.Serialization.cs | 29 +- ...ationSessionStartedUpdate.Serialization.cs | 9 +- .../ConversationSessionStartedUpdate.cs | 4 +- ...ConversationStatusDetails.Serialization.cs | 9 +- .../ConversationTokenUsage.Serialization.cs | 7 +- .../Models/ConversationTool.Serialization.cs | 2 +- ...onversationToolChoiceKind.Serialization.cs | 16 +- ...ersationTurnDetectionKind.Serialization.cs | 8 +- ...ationTurnDetectionOptions.Serialization.cs | 11 +- .../ConversationTurnDetectionOptions.cs | 6 +- .../ConversationUpdate.Serialization.cs | 11 +- src/Generated/Models/ConversationUpdate.cs | 6 +- .../DeveloperChatMessage.Serialization.cs | 7 +- src/Generated/Models/DeveloperChatMessage.cs | 2 +- ...mbeddingGenerationOptions.Serialization.cs | 7 +- .../EmbeddingTokenUsage.Serialization.cs | 7 +- .../FileChunkingStrategy.Serialization.cs | 2 +- .../FileDeletionResult.Serialization.cs | 9 +- src/Generated/Models/FileDeletionResult.cs | 2 +- ...ileFromStoreRemovalResult.Serialization.cs | 9 +- .../Models/FileFromStoreRemovalResult.cs | 2 +- .../Models/FilePurpose.Serialization.cs | 46 -- ...ileSearchCallResponseItem.Serialization.cs | 208 +++++ .../Models/FileSearchCallResponseItem.cs | 25 + .../FileSearchCallResult.Serialization.cs | 226 ++++++ src/Generated/Models/FileSearchCallResult.cs | 46 ++ .../FileSearchCallStatus.Serialization.cs | 46 ++ .../FileSearchRankingOptions.Serialization.cs | 7 +- .../FileSearchToolDefinition.Serialization.cs | 7 +- src/Generated/Models/FileSearchToolRanker.cs | 44 ++ ...eSearchToolRankingOptions.Serialization.cs | 157 ++++ .../Models/FileSearchToolRankingOptions.cs | 35 + .../FileSearchToolResources.Serialization.cs | 9 +- .../Models/FileStatus.Serialization.cs | 16 +- src/Generated/Models/FileUploadPurpose.cs | 4 + .../FineTuningIntegration.Serialization.cs | 2 +- ...ningIntegrationWandbWandb.Serialization.cs | 29 +- .../Models/FineTuningJob.Serialization.cs | 107 ++- src/Generated/Models/FineTuningJob.cs | 8 +- .../FineTuningJobError.Serialization.cs | 9 +- .../FineTuningJobEvent.Serialization.cs | 9 +- src/Generated/Models/FineTuningJobEvent.cs | 6 +- .../FineTuningJobEventLevel.Serialization.cs | 16 +- ...eTuningJobHyperparameters.Serialization.cs | 7 +- .../Models/FineTuningOptions.Serialization.cs | 92 ++- src/Generated/Models/FineTuningOptions.cs | 6 +- ...ionCallOutputResponseItem.Serialization.cs | 168 ++++ .../Models/FunctionCallOutputResponseItem.cs | 33 + .../FunctionCallOutputStatus.Serialization.cs | 36 + .../FunctionCallResponseItem.Serialization.cs | 187 +++++ .../Models/FunctionCallResponseItem.cs | 24 + .../FunctionCallStatus.Serialization.cs | 36 + .../FunctionChatMessage.Serialization.cs | 10 +- src/Generated/Models/FunctionChatMessage.cs | 2 +- .../FunctionToolDefinition.Serialization.cs | 7 +- .../Models/GeneratedImage.Serialization.cs | 7 +- .../GeneratedImageCollection.Serialization.cs | 8 +- .../HyperparameterOptions.Serialization.cs | 7 +- .../Models/ImageEditOptions.Serialization.cs | 51 +- .../ImageGenerationOptions.Serialization.cs | 62 +- .../ImageVariationOptions.Serialization.cs | 51 +- ...ernalAddUploadPartRequest.Serialization.cs | 7 +- ...tResponseFormatJsonObject.Serialization.cs | 5 +- ...tResponseFormatJsonSchema.Serialization.cs | 5 +- ...sistantResponseFormatText.Serialization.cs | 5 +- .../InternalAssistantSupportedModels.cs | 128 +++ ...ToolsFileSearchFileSearch.Serialization.cs | 7 +- ...ntToolsFileSearchTypeOnly.Serialization.cs | 7 +- ...tsNamedToolChoiceFunction.Serialization.cs | 7 +- ...ernalAutoChunkingStrategy.Serialization.cs | 5 +- ...nkingStrategyRequestParam.Serialization.cs | 5 +- .../InternalBatchError.Serialization.cs | 29 +- .../InternalBatchErrors.Serialization.cs | 7 +- .../Models/InternalBatchJob.Serialization.cs | 9 +- ...nternalBatchRequestCounts.Serialization.cs | 7 +- ...InternalBatchRequestInput.Serialization.cs | 7 +- ...nternalBatchRequestOutput.Serialization.cs | 29 +- ...alBatchRequestOutputError.Serialization.cs | 7 +- ...atchRequestOutputResponse.Serialization.cs | 7 +- ...pletionFunctionCallOption.Serialization.cs | 7 +- ...sageToolCallChunkFunction.Serialization.cs | 9 +- ...onMessageToolCallFunction.Serialization.cs | 9 +- ...CompletionNamedToolChoice.Serialization.cs | 7 +- ...onNamedToolChoiceFunction.Serialization.cs | 7 +- ...stMessageContentPartAudio.Serialization.cs | 7 +- ...ontentPartAudioInputAudio.Serialization.cs | 7 +- ...estMessageContentPartFile.Serialization.cs | 153 ++++ ...CompletionRequestMessageContentPartFile.cs | 39 + ...essageContentPartFileFile.Serialization.cs | 160 ++++ ...letionRequestMessageContentPartFileFile.cs | 38 + ...letionRequestMessageContentPartFileType.cs | 41 + ...stMessageContentPartImage.Serialization.cs | 7 +- ...eContentPartImageImageUrl.Serialization.cs | 7 +- ...MessageContentPartRefusal.Serialization.cs | 7 +- ...estMessageContentPartText.Serialization.cs | 7 +- ...CompletionResponseMessage.Serialization.cs | 57 +- .../InternalChatCompletionResponseMessage.cs | 12 +- ...CompletionResponseMessageAnnotationType.cs | 41 + ...sageAnnotationUrlCitation.Serialization.cs | 175 +++++ ...ionResponseMessageAnnotationUrlCitation.cs | 45 ++ ...sponseMessageFunctionCall.Serialization.cs | 7 +- ...atCompletionStreamOptions.Serialization.cs | 7 +- ...letionStreamResponseDelta.Serialization.cs | 39 +- ...ternalChatCompletionStreamResponseDelta.cs | 5 +- ...alChatCompletionStreamResponseDeltaRole.cs | 3 + ...atOutputPredictionContent.Serialization.cs | 10 +- .../InternalChatOutputPredictionContent.cs | 6 +- ...tResponseFormatJsonObject.Serialization.cs | 5 +- ...tResponseFormatJsonSchema.Serialization.cs | 5 +- ...nalChatResponseFormatText.Serialization.cs | 5 +- ...rnalCompleteUploadRequest.Serialization.cs | 7 +- .../InternalCreateAssistantRequestModel.cs | 110 --- ...stantRequestToolResources.Serialization.cs | 7 +- ...lResourcesCodeInterpreter.Serialization.cs | 7 +- ...nternalCreateBatchRequest.Serialization.cs | 7 +- ...ompletionFunctionResponse.Serialization.cs | 7 +- ...ionFunctionResponseChoice.Serialization.cs | 7 +- ...nternalCreateChatCompletionRequestModel.cs | 15 + ...earchOptionsUserLocation1.Serialization.cs | 154 ++++ ...ionRequestWebSearchOptionsUserLocation1.cs | 40 + ...equestWebSearchOptionsUserLocation1Type.cs | 41 + ...tCompletionResponseChoice.Serialization.cs | 11 +- ...ernalCreateChatCompletionResponseChoice.cs | 6 +- ...ionResponseChoiceLogprobs.Serialization.cs | 15 +- ...etionStreamResponseChoice.Serialization.cs | 23 +- ...reateChatCompletionStreamResponseChoice.cs | 4 +- ...eamResponseChoiceLogprobs.Serialization.cs | 15 +- ...letionStreamResponseUsage.Serialization.cs | 7 +- ...alCreateCompletionRequest.Serialization.cs | 188 +---- ...lCreateCompletionResponse.Serialization.cs | 7 +- ...eCompletionResponseChoice.Serialization.cs | 9 +- ...ionResponseChoiceLogprobs.Serialization.cs | 7 +- ...uestWandbIntegrationWandb.Serialization.cs | 29 +- ...teModerationRequestInput2.Serialization.cs | 7 +- ...teModerationRequestInput3.Serialization.cs | 7 +- ...ationRequestInputImageUrl.Serialization.cs | 7 +- ...CategoryAppliedInputTypes.Serialization.cs | 7 +- ...nternalCreateResponsesRequestIncludable.cs | 47 ++ .../InternalCreateResponsesRequestModel.cs | 170 ++++ .../InternalCreateResponsesResponseObject.cs | 41 + .../Models/InternalCreateRunRequestModel.cs | 110 --- ...CreateThreadAndRunRequest.Serialization.cs | 145 +--- .../InternalCreateThreadAndRunRequestModel.cs | 6 + ...ndRunRequestToolResources.Serialization.cs | 7 +- ...lResourcesCodeInterpreter.Serialization.cs | 7 +- ...hreadRequestToolResources.Serialization.cs | 7 +- ...lResourcesCodeInterpreter.Serialization.cs | 7 +- ...olResourcesFileSearchBase.Serialization.cs | 7 +- ...TranscriptionResponseJson.Serialization.cs | 7 +- ...teTranslationResponseJson.Serialization.cs | 7 +- ...ternalCreateUploadRequest.Serialization.cs | 7 +- ...ctorStoreFileBatchRequest.Serialization.cs | 21 +- ...ternalCreateVectorStoreFileBatchRequest.cs | 5 +- ...ateVectorStoreFileRequest.Serialization.cs | 27 +- .../InternalCreateVectorStoreFileRequest.cs | 5 +- .../InternalDeleteResponseResponseObject.cs | 41 + ...nkingStrategyRequestParam.Serialization.cs | 2 +- ...InternalFileUploadOptions.Serialization.cs | 7 +- ...onRequestAssistantMessage.Serialization.cs | 141 +++- ...neChatCompletionRequestAssistantMessage.cs | 38 +- ...atCompletionRequestAssistantMessageRole.cs | 41 + ...CompletionRequestAssistantMessageWeight.cs | 44 ++ ...isedMethodHyperparameters.Serialization.cs | 7 +- ...rnalFineTuningIntegration.Serialization.cs | 2 +- ...ineTuningIntegrationWandb.Serialization.cs | 5 +- ...alFineTuningJobCheckpoint.Serialization.cs | 7 +- ...uningJobCheckpointMetrics.Serialization.cs | 7 +- ...nternalFunctionDefinition.Serialization.cs | 18 +- ...nalListAssistantsResponse.Serialization.cs | 9 +- ...ternalListBatchesResponse.Serialization.cs | 7 +- ...ListFilesInVectorStoreBatchRequestOrder.cs | 44 -- ...ingJobCheckpointsResponse.Serialization.cs | 29 +- ...neTuningJobEventsResponse.Serialization.cs | 27 +- ...InternalListFineTuningJobEventsResponse.cs | 12 +- ...ernalListMessagesResponse.Serialization.cs | 9 +- ...tedFineTuningJobsResponse.Serialization.cs | 7 +- ...ernalListRunStepsResponse.Serialization.cs | 9 +- .../InternalListRunsResponse.Serialization.cs | 9 +- ...ternalListThreadsResponse.Serialization.cs | 9 +- ...tVectorStoreFilesResponse.Serialization.cs | 9 +- ...lListVectorStoresResponse.Serialization.cs | 9 +- ...entImageUrlObjectImageUrl.Serialization.cs | 7 +- ...ntItemFileObjectImageFile.Serialization.cs | 7 +- ...tationsFileCitationObject.Serialization.cs | 5 +- ...itationObjectFileCitation.Serialization.cs | 7 +- ...AnnotationsFilePathObject.Serialization.cs | 5 +- ...onsFilePathObjectFilePath.Serialization.cs | 7 +- ...ntentTextObjectAnnotation.Serialization.cs | 2 +- ...sageContentTextObjectText.Serialization.cs | 7 +- ...ternalMessageDeltaContent.Serialization.cs | 2 +- ...ltaContentImageFileObject.Serialization.cs | 5 +- ...tImageFileObjectImageFile.Serialization.cs | 7 +- ...eltaContentImageUrlObject.Serialization.cs | 5 +- ...entImageUrlObjectImageUrl.Serialization.cs | 7 +- ...DeltaContentRefusalObject.Serialization.cs | 5 +- ...tationsFileCitationObject.Serialization.cs | 5 +- ...itationObjectFileCitation.Serialization.cs | 7 +- ...AnnotationsFilePathObject.Serialization.cs | 5 +- ...onsFilePathObjectFilePath.Serialization.cs | 7 +- ...ageDeltaContentTextObject.Serialization.cs | 5 +- ...eltaContentTextObjectText.Serialization.cs | 7 +- ...nternalMessageDeltaObject.Serialization.cs | 7 +- ...alMessageDeltaObjectDelta.Serialization.cs | 9 +- .../Models/InternalMessageDeltaObjectDelta.cs | 2 +- ...eltaTextContentAnnotation.Serialization.cs | 2 +- ...alMessageImageFileContent.Serialization.cs | 7 +- ...nalMessageImageUrlContent.Serialization.cs | 7 +- ...alMessageObjectAttachment.Serialization.cs | 7 +- ...rnalMessageRefusalContent.Serialization.cs | 5 +- ...ernalModerationCategories.Serialization.cs | 7 +- ...lModerationCategoryScores.Serialization.cs | 7 +- ...stantRequestToolResources.Serialization.cs | 7 +- ...lResourcesCodeInterpreter.Serialization.cs | 7 +- ...hreadRequestToolResources.Serialization.cs | 7 +- ...lResourcesCodeInterpreter.Serialization.cs | 7 +- ...alOmniTypedResponseFormat.Serialization.cs | 2 +- ...ternalRealtimeClientEvent.Serialization.cs | 2 +- ...entConversationItemCreate.Serialization.cs | 5 +- ...entConversationItemDelete.Serialization.cs | 5 +- ...tConversationItemTruncate.Serialization.cs | 5 +- ...entInputAudioBufferAppend.Serialization.cs | 5 +- ...ventInputAudioBufferClear.Serialization.cs | 5 +- ...entInputAudioBufferCommit.Serialization.cs | 5 +- ...ClientEventResponseCancel.Serialization.cs | 5 +- ...ClientEventResponseCreate.Serialization.cs | 5 +- ...eClientEventSessionUpdate.Serialization.cs | 5 +- ...eConversationResponseItem.Serialization.cs | 4 +- ...questAssistantMessageItem.Serialization.cs | 5 +- ...meRequestAudioContentPart.Serialization.cs | 5 +- ...meRequestFunctionCallItem.Serialization.cs | 5 +- ...estFunctionCallOutputItem.Serialization.cs | 5 +- ...eRequestSystemMessageItem.Serialization.cs | 5 +- ...imeRequestTextContentPart.Serialization.cs | 5 +- ...imeRequestUserMessageItem.Serialization.cs | 5 +- .../InternalRealtimeResponse.Serialization.cs | 9 +- ...eResponseAudioContentPart.Serialization.cs | 7 +- ...eResponseFunctionCallItem.Serialization.cs | 5 +- ...nseFunctionCallOutputItem.Serialization.cs | 5 +- ...altimeResponseMessageItem.Serialization.cs | 7 +- ...alRealtimeResponseSession.Serialization.cs | 17 +- ...esponseStatusDetailsError.Serialization.cs | 7 +- ...meResponseTextContentPart.Serialization.cs | 5 +- ...rEventConversationCreated.Serialization.cs | 7 +- ...lRealtimeServerEventConversationCreated.cs | 4 +- ...sationCreatedConversation.Serialization.cs | 7 +- ...oTranscriptionFailedError.Serialization.cs | 7 +- ...timeServerEventErrorError.Serialization.cs | 40 +- ...erEventResponseAudioDelta.Serialization.cs | 7 +- ...alRealtimeServerEventResponseAudioDelta.cs | 4 +- ...ponseAudioTranscriptDelta.Serialization.cs | 7 +- ...ServerEventResponseAudioTranscriptDelta.cs | 4 +- ...tResponseContentPartAdded.Serialization.cs | 9 +- ...timeServerEventResponseContentPartAdded.cs | 4 +- ...ntResponseContentPartDone.Serialization.cs | 9 +- ...ltimeServerEventResponseContentPartDone.cs | 4 +- ...unctionCallArgumentsDelta.Serialization.cs | 7 +- ...EventResponseFunctionCallArgumentsDelta.cs | 4 +- ...FunctionCallArgumentsDone.Serialization.cs | 7 +- ...rEventResponseFunctionCallArgumentsDone.cs | 4 +- ...verEventResponseTextDelta.Serialization.cs | 7 +- ...nalRealtimeServerEventResponseTextDelta.cs | 4 +- ...imeServerVadTurnDetection.Serialization.cs | 11 +- .../InternalRealtimeServerVadTurnDetection.cs | 4 +- ...eToolChoiceFunctionObject.Serialization.cs | 5 +- ...iceFunctionObjectFunction.Serialization.cs | 7 +- ...lRealtimeToolChoiceObject.Serialization.cs | 2 +- ...RequestMessageTextContent.Serialization.cs | 5 +- ...lRequiredFunctionToolCall.Serialization.cs | 9 +- ...lResponseFormatJsonObject.Serialization.cs | 5 +- ...lResponseFormatJsonSchema.Serialization.cs | 5 +- ...ormatJsonSchemaJsonSchema.Serialization.cs | 18 +- ...nternalResponseFormatText.Serialization.cs | 5 +- ...esponseMessageTextContent.Serialization.cs | 7 +- ...ResponsesAssistantMessage.Serialization.cs | 168 ++++ .../InternalResponsesAssistantMessage.cs | 19 + ...esComputerCallClickAction.Serialization.cs | 152 ++++ ...nternalResponsesComputerCallClickAction.cs | 32 + ...uterCallDoubleClickAction.Serialization.cs | 141 ++++ ...lResponsesComputerCallDoubleClickAction.cs | 28 + ...sesComputerCallDragAction.Serialization.cs | 140 ++++ ...InternalResponsesComputerCallDragAction.cs | 28 + ...omputerCallDragActionPath.Serialization.cs | 153 ++++ ...rnalResponsesComputerCallDragActionPath.cs | 37 + ...omputerCallKeyPressAction.Serialization.cs | 152 ++++ ...rnalResponsesComputerCallKeyPressAction.cs | 28 + ...sesComputerCallMoveAction.Serialization.cs | 141 ++++ ...InternalResponsesComputerCallMoveAction.cs | 28 + ...sponsesComputerCallOutputItemOutputType.cs | 41 + ...rCallOutputItemScreenshot.Serialization.cs | 137 ++++ ...sponsesComputerCallOutputItemScreenshot.cs | 26 + ...puterCallScreenshotAction.Serialization.cs | 115 +++ ...alResponsesComputerCallScreenshotAction.cs | 20 + ...sComputerCallScrollAction.Serialization.cs | 169 ++++ ...ternalResponsesComputerCallScrollAction.cs | 36 + ...sesComputerCallTypeAction.Serialization.cs | 130 ++++ ...InternalResponsesComputerCallTypeAction.cs | 27 + ...sesComputerCallWaitAction.Serialization.cs | 115 +++ ...InternalResponsesComputerCallWaitAction.cs | 20 + ...rnalResponsesComputerTool.Serialization.cs | 152 ++++ .../Models/InternalResponsesComputerTool.cs | 32 + ...ResponsesDeveloperMessage.Serialization.cs | 168 ++++ .../InternalResponsesDeveloperMessage.cs | 19 + ...nalResponsesErrorResponse.Serialization.cs | 142 ++++ .../Models/InternalResponsesErrorResponse.cs | 33 + ...alResponsesFileSearchTool.Serialization.cs | 210 +++++ .../Models/InternalResponsesFileSearchTool.cs | 37 + ...rnalResponsesFunctionTool.Serialization.cs | 176 +++++ .../Models/InternalResponsesFunctionTool.cs | 41 + ...onsesInputFileContentPart.Serialization.cs | 159 ++++ .../InternalResponsesInputFileContentPart.cs | 27 + ...nsesInputImageContentPart.Serialization.cs | 152 ++++ .../InternalResponsesInputImageContentPart.cs | 29 + ...nalResponsesInputItemList.Serialization.cs | 202 +++++ .../Models/InternalResponsesInputItemList.cs | 49 ++ .../InternalResponsesInputItemListObject.cs | 41 + ...onsesInputTextContentPart.Serialization.cs | 130 ++++ .../InternalResponsesInputTextContentPart.cs | 25 + .../Models/InternalResponsesItemType.cs | 65 ++ ...ageAnnotationFileCitation.Serialization.cs | 141 ++++ ...lResponsesMessageAnnotationFileCitation.cs | 31 + ...MessageAnnotationFilePath.Serialization.cs | 141 ++++ ...ernalResponsesMessageAnnotationFilePath.cs | 31 + ...sageAnnotationUrlCitation.Serialization.cs | 169 ++++ ...alResponsesMessageAnnotationUrlCitation.cs | 40 + ...sOutputRefusalContentPart.Serialization.cs | 130 ++++ ...ternalResponsesOutputRefusalContentPart.cs | 25 + ...nsesOutputTextContentPart.Serialization.cs | 151 ++++ .../InternalResponsesOutputTextContentPart.cs | 31 + ...asoningItemSummaryElement.Serialization.cs | 139 ++++ ...nalResponsesReasoningItemSummaryElement.cs | 33 + ...SummaryElementSummaryText.Serialization.cs | 130 ++++ ...sReasoningItemSummaryElementSummaryText.cs | 27 + ...ternalResponsesReasoningItemSummaryType.cs | 41 + ...eamEventResponseCompleted.Serialization.cs | 130 ++++ ...sesResponseStreamEventResponseCompleted.cs | 24 + ...tResponseContentPartAdded.Serialization.cs | 169 ++++ ...onseStreamEventResponseContentPartAdded.cs | 34 + ...ntResponseContentPartDone.Serialization.cs | 169 ++++ ...ponseStreamEventResponseContentPartDone.cs | 34 + ...treamEventResponseCreated.Serialization.cs | 130 ++++ ...onsesResponseStreamEventResponseCreated.cs | 24 + ...StreamEventResponseFailed.Serialization.cs | 130 ++++ ...ponsesResponseStreamEventResponseFailed.cs | 24 + ...seFileSearchCallCompleted.Serialization.cs | 141 ++++ ...eamEventResponseFileSearchCallCompleted.cs | 28 + ...eFileSearchCallInProgress.Serialization.cs | 141 ++++ ...amEventResponseFileSearchCallInProgress.cs | 28 + ...seFileSearchCallSearching.Serialization.cs | 141 ++++ ...eamEventResponseFileSearchCallSearching.cs | 28 + ...unctionCallArgumentsDelta.Serialization.cs | 152 ++++ ...EventResponseFunctionCallArgumentsDelta.cs | 32 + ...FunctionCallArgumentsDone.Serialization.cs | 152 ++++ ...mEventResponseFunctionCallArgumentsDone.cs | 32 + ...amEventResponseInProgress.Serialization.cs | 130 ++++ ...esResponseStreamEventResponseInProgress.cs | 24 + ...amEventResponseIncomplete.Serialization.cs | 130 ++++ ...esResponseStreamEventResponseIncomplete.cs | 24 + ...ntResponseOutputItemAdded.Serialization.cs | 141 ++++ ...ponseStreamEventResponseOutputItemAdded.cs | 28 + ...entResponseOutputItemDone.Serialization.cs | 141 ++++ ...sponseStreamEventResponseOutputItemDone.cs | 28 + ...ntResponseOutputTextDelta.Serialization.cs | 169 ++++ ...ponseStreamEventResponseOutputTextDelta.cs | 36 + ...entResponseOutputTextDone.Serialization.cs | 169 ++++ ...sponseStreamEventResponseOutputTextDone.cs | 36 + ...EventResponseRefusalDelta.Serialization.cs | 169 ++++ ...ResponseStreamEventResponseRefusalDelta.cs | 36 + ...mEventResponseRefusalDone.Serialization.cs | 169 ++++ ...sResponseStreamEventResponseRefusalDone.cs | 36 + ...nseWebSearchCallCompleted.Serialization.cs | 141 ++++ ...reamEventResponseWebSearchCallCompleted.cs | 28 + ...seWebSearchCallInProgress.Serialization.cs | 141 ++++ ...eamEventResponseWebSearchCallInProgress.cs | 28 + ...nseWebSearchCallSearching.Serialization.cs | 141 ++++ ...reamEventResponseWebSearchCallSearching.cs | 28 + ...nalResponsesSystemMessage.Serialization.cs | 168 ++++ .../Models/InternalResponsesSystemMessage.cs | 19 + ...onsesTextFormatJsonObject.Serialization.cs | 115 +++ .../InternalResponsesTextFormatJsonObject.cs | 20 + ...onsesTextFormatJsonSchema.Serialization.cs | 181 +++++ .../InternalResponsesTextFormatJsonSchema.cs | 38 + ...alResponsesTextFormatText.Serialization.cs | 115 +++ .../Models/InternalResponsesTextFormatText.cs | 20 + .../Models/InternalResponsesTextFormatType.cs | 47 ++ ...ResponsesToolChoiceObject.Serialization.cs | 145 ++++ .../InternalResponsesToolChoiceObject.cs | 33 + ...sToolChoiceObjectComputer.Serialization.cs | 115 +++ ...ternalResponsesToolChoiceObjectComputer.cs | 20 + ...oolChoiceObjectFileSearch.Serialization.cs | 115 +++ ...rnalResponsesToolChoiceObjectFileSearch.cs | 20 + ...sToolChoiceObjectFunction.Serialization.cs | 130 ++++ ...ternalResponsesToolChoiceObjectFunction.cs | 27 + .../InternalResponsesToolChoiceObjectType.cs | 50 ++ ...ToolChoiceObjectWebSearch.Serialization.cs | 115 +++ ...ernalResponsesToolChoiceObjectWebSearch.cs | 20 + .../InternalResponsesToolChoiceOption.cs | 47 ++ .../Models/InternalResponsesToolType.cs | 50 ++ ...ernalResponsesUserMessage.Serialization.cs | 168 ++++ .../Models/InternalResponsesUserMessage.cs | 19 + ...SearchApproximateLocation.Serialization.cs | 165 ++++ ...alResponsesWebSearchApproximateLocation.cs | 32 + ...nalResponsesWebSearchTool.Serialization.cs | 145 ++++ .../Models/InternalResponsesWebSearchTool.cs | 26 + ...edActionSubmitToolOutputs.Serialization.cs | 9 +- ...InternalRunRequiredAction.Serialization.cs | 7 +- ...pCodeInterpreterLogOutput.Serialization.cs | 5 +- .../InternalRunStepDelta.Serialization.cs | 9 +- src/Generated/Models/InternalRunStepDelta.cs | 2 +- ...alRunStepDeltaObjectDelta.Serialization.cs | 7 +- ...alRunStepDeltaStepDetails.Serialization.cs | 2 +- ...ailsMessageCreationObject.Serialization.cs | 5 +- ...tionObjectMessageCreation.Serialization.cs | 7 +- ...etailsToolCallsCodeObject.Serialization.cs | 5 +- ...CodeObjectCodeInterpreter.Serialization.cs | 9 +- ...allsCodeOutputImageObject.Serialization.cs | 5 +- ...odeOutputImageObjectImage.Serialization.cs | 7 +- ...CallsCodeOutputLogsObject.Serialization.cs | 5 +- ...ToolCallsFileSearchObject.Serialization.cs | 7 +- ...ileSearchObjectFileSearch.Serialization.cs | 11 +- ...lsToolCallsFunctionObject.Serialization.cs | 5 +- ...llsFunctionObjectFunction.Serialization.cs | 18 +- ...tepDetailsToolCallsObject.Serialization.cs | 5 +- ...allsObjectToolCallsObject.Serialization.cs | 2 +- ...ailsMessageCreationObject.Serialization.cs | 7 +- ...tionObjectMessageCreation.Serialization.cs | 7 +- ...etailsToolCallsCodeObject.Serialization.cs | 7 +- ...ternalRunStepDetailsToolCallsCodeObject.cs | 4 +- ...CodeObjectCodeInterpreter.Serialization.cs | 9 +- ...allsCodeOutputImageObject.Serialization.cs | 7 +- ...odeOutputImageObjectImage.Serialization.cs | 7 +- ...ToolCallsFileSearchObject.Serialization.cs | 7 +- ...RunStepDetailsToolCallsFileSearchObject.cs | 4 +- ...ileSearchObjectFileSearch.Serialization.cs | 11 +- ...earchRankingOptionsObject.Serialization.cs | 11 +- ...ToolCallsFileSearchRankingOptionsObject.cs | 7 +- ...llsFileSearchRankingOptionsObjectRanker.cs | 41 - ...lsToolCallsFunctionObject.Serialization.cs | 7 +- ...alRunStepDetailsToolCallsFunctionObject.cs | 4 +- ...llsFunctionObjectFunction.Serialization.cs | 9 +- ...tepDetailsToolCallsObject.Serialization.cs | 5 +- ...RunToolCallObjectFunction.Serialization.cs | 7 +- ...icChunkingStrategyDetails.Serialization.cs | 7 +- ...nkingStrategyRequestParam.Serialization.cs | 5 +- ...bmitToolOutputsRunRequest.Serialization.cs | 18 +- ...ThreadObjectToolResources.Serialization.cs | 7 +- ...lResourcesCodeInterpreter.Serialization.cs | 7 +- ...ctToolResourcesFileSearch.Serialization.cs | 7 +- ...oFineTuneChatRequestInput.Serialization.cs | 7 +- ...uneCompletionRequestInput.Serialization.cs | 7 +- ...rnalTodoFineTuneDPOMethod.Serialization.cs | 7 +- ...eDPOMethodHyperparameters.Serialization.cs | 7 +- ...nternalTodoFineTuneMethod.Serialization.cs | 7 +- ...oFineTuneSupervisedMethod.Serialization.cs | 7 +- ...esourcesFileSearchIdsOnly.Serialization.cs | 7 +- ...wnAssistantResponseFormat.Serialization.cs | 9 +- ...nternalUnknownChatMessage.Serialization.cs | 10 +- .../Models/InternalUnknownChatMessage.cs | 2 +- ...knownChatOutputPrediction.Serialization.cs | 5 +- ...UnknownChatResponseFormat.Serialization.cs | 5 +- ...alUnknownChunkingStrategy.Serialization.cs | 5 +- ...StrategyRequestParamProxy.Serialization.cs | 5 +- ...trategyResponseParamProxy.Serialization.cs | 5 +- ...wnOmniTypedResponseFormat.Serialization.cs | 5 +- ...ernalUnknownResponsesItem.Serialization.cs | 108 +++ .../Models/InternalUnknownResponsesItem.cs | 16 + ...alUnknownResponsesMessage.Serialization.cs | 124 +++ .../Models/InternalUnknownResponsesMessage.cs | 16 + ...nknownResponsesTextFormat.Serialization.cs | 102 +++ .../InternalUnknownResponsesTextFormat.cs | 16 + ...ernalUnknownResponsesTool.Serialization.cs | 102 +++ .../Models/InternalUnknownResponsesTool.cs | 16 + .../Models/InternalUpload.Serialization.cs | 18 +- .../InternalUploadPart.Serialization.cs | 7 +- ...VectorStoreFileAttributes.Serialization.cs | 120 +++ .../InternalVectorStoreFileAttributes.cs | 33 + ...FileBatchObjectFileCounts.Serialization.cs | 7 +- .../Models/InternalWebSearchContextSize.cs | 47 ++ ...InternalWebSearchLocation.Serialization.cs | 171 ++++ .../Models/InternalWebSearchLocation.cs | 41 + .../Models/MessageCollectionOrder.cs | 40 - .../Models/MessageContent.Serialization.cs | 8 +- ...MessageCreationAttachment.Serialization.cs | 9 +- .../MessageCreationOptions.Serialization.cs | 28 +- .../Models/MessageCreationOptions.cs | 2 +- .../MessageDeletionResult.Serialization.cs | 9 +- src/Generated/Models/MessageDeletionResult.cs | 2 +- .../MessageFailureDetails.Serialization.cs | 7 +- ...essageModificationOptions.Serialization.cs | 7 +- .../MessageResponseItem.Serialization.cs | 131 ++++ src/Generated/Models/MessageResponseItem.cs | 25 + .../Models/MessageRole.Serialization.cs | 12 +- src/Generated/Models/MessageRole.cs | 50 ++ .../Models/MessageStatus.Serialization.cs | 36 + .../ModelDeletionResult.Serialization.cs | 9 +- src/Generated/Models/ModelDeletionResult.cs | 2 +- .../Models/ModerationOptions.Serialization.cs | 7 +- .../Models/ModerationResult.Serialization.cs | 8 +- ...oderationResultCollection.Serialization.cs | 8 +- .../Models/OpenAIEmbedding.Serialization.cs | 9 +- ...OpenAIEmbeddingCollection.Serialization.cs | 10 +- .../Models/OpenAIError.Serialization.cs | 11 +- .../OpenAIErrorResponse.Serialization.cs | 7 +- .../Models/OpenAIFile.Serialization.cs | 31 +- src/Generated/Models/OpenAIFile.cs | 11 +- .../OpenAIFileCollection.Serialization.cs | 10 +- .../Models/OpenAIModel.Serialization.cs | 9 +- src/Generated/Models/OpenAIModel.cs | 2 +- .../OpenAIModelCollection.Serialization.cs | 10 +- .../Models/OpenAIResponse.Serialization.cs | 533 +++++++++++++ src/Generated/Models/OpenAIResponse.cs | 92 +++ .../ReasoningResponseItem.Serialization.cs | 161 ++++ src/Generated/Models/ReasoningResponseItem.cs | 20 + .../Models/ReasoningStatus.Serialization.cs | 36 + .../ReferenceResponseItem.Serialization.cs | 121 +++ src/Generated/Models/ReferenceResponseItem.cs | 16 + .../ResponseContentPart.Serialization.cs | 146 ++++ src/Generated/Models/ResponseContentPart.cs | 31 + .../ResponseContentPartKind.Serialization.cs | 46 ++ .../ResponseCreationOptions.Serialization.cs | 473 +++++++++++ .../Models/ResponseCreationOptions.cs | 57 ++ .../ResponseDeletionResult.Serialization.cs | 164 ++++ .../Models/ResponseDeletionResult.cs | 37 + .../Models/ResponseError.Serialization.cs | 153 ++++ src/Generated/Models/ResponseError.cs | 37 + .../Models/ResponseImageDetailLevel.cs | 47 ++ ...seIncompleteStatusDetails.Serialization.cs | 142 ++++ .../Models/ResponseIncompleteStatusDetails.cs | 32 + .../Models/ResponseIncompleteStatusReason.cs | 44 ++ .../Models/ResponseItem.Serialization.cs | 159 ++++ src/Generated/Models/ResponseItem.cs | 36 + ...ResponseMessageAnnotation.Serialization.cs | 142 ++++ .../Models/ResponseMessageAnnotation.cs | 31 + ...onseMessageAnnotationKind.Serialization.cs | 36 + ...seOutputTokenUsageDetails.Serialization.cs | 142 ++++ .../Models/ResponseOutputTokenUsageDetails.cs | 31 + .../Models/ResponseReasoningEffortLevel.cs | 47 ++ .../ResponseReasoningOptions.Serialization.cs | 166 ++++ .../Models/ResponseReasoningOptions.cs | 32 + .../ResponseReasoningSummaryVerbosity.cs | 44 ++ .../Models/ResponseStatus.Serialization.cs | 41 + .../ResponseTextFormat.Serialization.cs | 142 ++++ src/Generated/Models/ResponseTextFormat.cs | 33 + .../ResponseTextOptions.Serialization.cs | 142 ++++ ...ssageContent.cs => ResponseTextOptions.cs} | 11 +- .../ResponseTokenUsage.Serialization.cs | 175 +++++ src/Generated/Models/ResponseTokenUsage.cs | 37 + .../Models/ResponseTool.Serialization.cs | 144 ++++ src/Generated/Models/ResponseTool.cs | 31 + .../Models/ResponseTruncationMode.cs | 44 ++ src/Generated/Models/RunCollectionOrder.cs | 40 - .../RunCreationOptions.Serialization.cs | 176 ++--- src/Generated/Models/RunCreationOptions.cs | 4 +- .../Models/RunError.Serialization.cs | 7 +- .../RunIncompleteDetails.Serialization.cs | 7 +- .../RunModificationOptions.Serialization.cs | 7 +- src/Generated/Models/RunStep.Serialization.cs | 39 +- src/Generated/Models/RunStep.cs | 6 +- ...StepCodeInterpreterOutput.Serialization.cs | 2 +- .../Models/RunStepCollectionOrder.cs | 40 - .../Models/RunStepDetails.Serialization.cs | 2 +- .../Models/RunStepError.Serialization.cs | 7 +- .../RunStepFileSearchResult.Serialization.cs | 9 +- ...epFileSearchResultContent.Serialization.cs | 9 +- .../Models/RunStepFileSearchResultContent.cs | 2 +- ...leSearchResultContentKind.Serialization.cs | 8 +- .../Models/RunStepKind.Serialization.cs | 12 +- .../Models/RunStepTokenUsage.Serialization.cs | 7 +- .../Models/RunStepToolCall.Serialization.cs | 5 +- src/Generated/Models/RunStepToolCall.cs | 6 +- .../RunStepToolCallKind.Serialization.cs | 16 +- ...dateCodeInterpreterOutput.Serialization.cs | 5 +- .../RunStepUpdateCodeInterpreterOutput.cs | 2 +- .../Models/RunTokenUsage.Serialization.cs | 7 +- .../RunTruncationStrategy.Serialization.cs | 18 +- .../SpeechGenerationOptions.Serialization.cs | 7 +- ...taticFileChunkingStrategy.Serialization.cs | 7 +- ...amingChatCompletionUpdate.Serialization.cs | 31 +- .../Models/StreamingChatCompletionUpdate.cs | 2 +- ...ingChatFunctionCallUpdate.Serialization.cs | 9 +- ...mingChatOutputAudioUpdate.Serialization.cs | 7 +- ...reamingChatToolCallUpdate.Serialization.cs | 11 +- .../Models/StreamingChatToolCallUpdate.cs | 2 +- ...eamingResponseErrorUpdate.Serialization.cs | 176 +++++ .../Models/StreamingResponseErrorUpdate.cs | 32 + ...ponseTextAnnotationUpdate.Serialization.cs | 169 ++++ .../StreamingResponseTextAnnotationUpdate.cs | 36 + .../StreamingResponseUpdate.Serialization.cs | 182 +++++ .../Models/StreamingResponseUpdate.cs | 31 + .../Models/StreamingResponseUpdateKind.cs | 107 +++ .../Models/SystemChatMessage.Serialization.cs | 10 +- src/Generated/Models/SystemChatMessage.cs | 2 +- .../ThreadCreationOptions.Serialization.cs | 18 +- .../ThreadDeletionResult.Serialization.cs | 9 +- src/Generated/Models/ThreadDeletionResult.cs | 2 +- .../Models/ThreadMessage.Serialization.cs | 39 +- src/Generated/Models/ThreadMessage.cs | 6 +- ...ThreadModificationOptions.Serialization.cs | 18 +- .../Models/ThreadRun.Serialization.cs | 95 +-- src/Generated/Models/ThreadRun.cs | 2 +- .../Models/ToolChatMessage.Serialization.cs | 10 +- src/Generated/Models/ToolChatMessage.cs | 2 +- .../Models/ToolConstraint.Serialization.cs | 10 +- .../Models/ToolDefinition.Serialization.cs | 2 +- .../Models/ToolOutput.Serialization.cs | 7 +- .../Models/ToolResources.Serialization.cs | 11 +- .../TranscribedSegment.Serialization.cs | 7 +- .../Models/TranscribedWord.Serialization.cs | 7 +- ...wnAssistantToolDefinition.Serialization.cs | 5 +- ...ningJobRequestIntegration.Serialization.cs | 5 +- ...nownFineTuningIntegration.Serialization.cs | 5 +- ...ntentTextObjectAnnotation.Serialization.cs | 5 +- ...nknownMessageDeltaContent.Serialization.cs | 5 +- ...eltaTextContentAnnotation.Serialization.cs | 5 +- ...nknownRealtimeClientEvent.Serialization.cs | 5 +- ...nknownRealtimeContentPart.Serialization.cs | 5 +- ...nknownRealtimeRequestItem.Serialization.cs | 5 +- ...ealtimeRequestMessageItem.Serialization.cs | 5 +- ...knownRealtimeResponseItem.Serialization.cs | 5 +- ...nknownRealtimeServerEvent.Serialization.cs | 11 +- .../Models/UnknownRealtimeServerEvent.cs | 2 +- .../UnknownRealtimeTool.Serialization.cs | 5 +- ...nRealtimeToolChoiceObject.Serialization.cs | 5 +- ...nownRealtimeTurnDetection.Serialization.cs | 11 +- .../Models/UnknownRealtimeTurnDetection.cs | 2 +- ...sesComputerCallItemAction.Serialization.cs | 102 +++ .../UnknownResponsesComputerCallItemAction.cs | 16 + ...puterCallOutputItemOutput.Serialization.cs | 102 +++ ...wnResponsesComputerCallOutputItemOutput.cs | 16 + .../UnknownResponsesContent.Serialization.cs | 102 +++ .../Models/UnknownResponsesContent.cs | 17 + ...onsesOutputTextAnnotation.Serialization.cs | 102 +++ .../UnknownResponsesOutputTextAnnotation.cs | 17 + ...asoningItemSummaryElement.Serialization.cs | 102 +++ ...ownResponsesReasoningItemSummaryElement.cs | 17 + ...ponsesResponseStreamEvent.Serialization.cs | 102 +++ .../UnknownResponsesResponseStreamEvent.cs | 16 + ...ResponsesToolChoiceObject.Serialization.cs | 102 +++ .../UnknownResponsesToolChoiceObject.cs | 17 + ...esponsesWebSearchLocation.Serialization.cs | 102 +++ .../UnknownResponsesWebSearchLocation.cs | 17 + ...wnRunStepDeltaStepDetails.Serialization.cs | 5 +- ...eInterpreterOutputsObject.Serialization.cs | 5 +- ...allsObjectToolCallsObject.Serialization.cs | 5 +- ...eInterpreterOutputsObject.Serialization.cs | 5 +- ...allsObjectToolCallsObject.Serialization.cs | 7 +- ...epDetailsToolCallsObjectToolCallsObject.cs | 2 +- ...nRunStepObjectStepDetails.Serialization.cs | 5 +- .../Models/UserChatMessage.Serialization.cs | 10 +- src/Generated/Models/UserChatMessage.cs | 2 +- .../Models/VectorStore.Serialization.cs | 32 +- src/Generated/Models/VectorStore.cs | 8 +- .../VectorStoreBatchFileJob.Serialization.cs | 11 +- .../Models/VectorStoreBatchFileJob.cs | 2 +- ...VectorStoreCreationHelper.Serialization.cs | 9 +- ...ectorStoreCreationOptions.Serialization.cs | 11 +- ...VectorStoreDeletionResult.Serialization.cs | 9 +- .../Models/VectorStoreDeletionResult.cs | 2 +- ...ctorStoreExpirationAnchor.Serialization.cs | 8 +- ...ctorStoreExpirationPolicy.Serialization.cs | 9 +- ...ectorStoreFileAssociation.Serialization.cs | 63 +- .../Models/VectorStoreFileAssociation.cs | 11 +- ...ctorStoreFileAssociationCollectionOrder.cs | 40 - ...StoreFileAssociationError.Serialization.cs | 7 +- ...toreFileAssociationStatus.Serialization.cs | 20 +- .../VectorStoreFileCounts.Serialization.cs | 7 +- ...rStoreModificationOptions.Serialization.cs | 29 +- .../Models/VectorStoreStatus.Serialization.cs | 16 +- ...WebSearchCallResponseItem.Serialization.cs | 132 ++++ .../Models/WebSearchCallResponseItem.cs | 19 + .../WebSearchCallStatus.Serialization.cs | 41 + .../Models/WebSearchToolContextSize.cs | 47 ++ .../WebSearchToolLocation.Serialization.cs | 134 ++++ src/Generated/Models/WebSearchToolLocation.cs | 32 + ...ightsAndBiasesIntegration.Serialization.cs | 5 +- src/Generated/ModerationClient.RestClient.cs | 2 +- src/Generated/ModerationClient.cs | 4 - src/Generated/OpenAIClient.cs | 10 +- src/Generated/OpenAIFileClient.RestClient.cs | 10 +- src/Generated/OpenAIFileClient.cs | 4 - src/Generated/OpenAIModelClient.RestClient.cs | 6 +- src/Generated/OpenAIModelClient.cs | 4 - src/Generated/OpenAIModelFactory.cs | 734 ++++-------------- .../OpenAIResponseClient.RestClient.cs | 107 +++ src/Generated/OpenAIResponseClient.cs | 26 + src/Generated/RealtimeConversationClient.cs | 7 +- src/Generated/VectorStoreClient.RestClient.cs | 198 ++++- src/Generated/VectorStoreClient.cs | 7 +- src/OpenAI.csproj | 2 +- .../AsyncSseUpdateCollection.cs} | 82 +- src/Utility/CustomSerializationHelpers.cs | 14 + .../Generator/CodeGenClientAttribute.cs | 15 - .../Generator/CodeGenMemberAttribute.cs | 17 - .../Generator/CodeGenModelAttribute.cs | 27 - .../CodeGenSerializationAttribute.cs | 53 -- .../Generator/CodeGenSuppressAttribute.cs | 16 - src/Utility/Generator/CodeGenTypeAttribute.cs | 16 - src/Utility/MultipartFormDataBinaryContent.cs | 170 ---- .../SseUpdateCollection.cs} | 74 +- .../images_screenshot_with_save_1024_768.png | Bin 0 -> 908471 bytes tests/Chat/ChatSmokeTests.cs | 7 - tests/Chat/ChatTests.cs | 17 + tests/Files/Files.UploadsTests.cs | 8 +- tests/Files/FilesTests.cs | 52 ++ tests/Responses/ResponsesSmokeTests.cs | 36 + tests/Responses/ResponsesTests.cs | 670 ++++++++++++++++ .../Utility/MultipartFormDataBinaryContent.cs | 227 ++++-- tests/Utility/TestHelpers.cs | 5 + 1257 files changed, 32090 insertions(+), 7012 deletions(-) create mode 100644 examples/Responses/Example01_CuaFlow.cs delete mode 100644 src/Custom/Assistants/Streaming/AsyncStreamingUpdateCollection.cs delete mode 100644 src/Custom/Assistants/Streaming/StreamingUpdateCollection.cs create mode 100644 src/Custom/Chat/ChatMessageAnnotation.cs create mode 100644 src/Custom/Chat/ChatWebSearchOptions.cs rename src/Custom/{Assistants => Common}/FileSearchRanker.cs (75%) create mode 100644 src/Custom/Files/FilePurpose.Serialization.cs create mode 100644 src/Custom/Files/FileUploadPurpose.Serialization.cs create mode 100644 src/Custom/Internal/AcceptHeaderValue.cs create mode 100644 src/Custom/Responses/Internal/GeneratorStubs.cs create mode 100644 src/Custom/Responses/Internal/InternalCreateResponsesRequestIncludable.cs create mode 100644 src/Custom/Responses/Internal/InternalResponsesComputerCallOutputItem.cs create mode 100644 src/Custom/Responses/Internal/InternalResponsesInputFileContentPart.cs create mode 100644 src/Custom/Responses/Internal/InternalResponsesInputImageContentPart.cs create mode 100644 src/Custom/Responses/Internal/InternalResponsesInputTextContentPart.cs create mode 100644 src/Custom/Responses/Internal/InternalResponsesMessageAnnotationFileCitation.cs create mode 100644 src/Custom/Responses/Internal/InternalResponsesMessageAnnotationFilePath.cs create mode 100644 src/Custom/Responses/Internal/InternalResponsesMessageAnnotationUrlCitation.cs create mode 100644 src/Custom/Responses/Internal/InternalResponsesOutputRefusalContentPart.cs create mode 100644 src/Custom/Responses/Internal/InternalResponsesOutputTextContentPart.cs create mode 100644 src/Custom/Responses/Internal/InternalUnknownResponseTextFormat.cs create mode 100644 src/Custom/Responses/Items/ComputerCallAction.cs create mode 100644 src/Custom/Responses/Items/ComputerCallActionKind.cs create mode 100644 src/Custom/Responses/Items/ComputerCallActionMouseButton.cs create mode 100644 src/Custom/Responses/Items/ComputerCallOutputResponseItem.cs create mode 100644 src/Custom/Responses/Items/ComputerCallOutputStatus.cs create mode 100644 src/Custom/Responses/Items/ComputerCallResponseItem.cs create mode 100644 src/Custom/Responses/Items/ComputerCallSafetyCheck.cs create mode 100644 src/Custom/Responses/Items/ComputerCallStatus.cs create mode 100644 src/Custom/Responses/Items/ComputerOutput.cs create mode 100644 src/Custom/Responses/Items/FileSearchCallResponseItem.cs create mode 100644 src/Custom/Responses/Items/FileSearchCallResult.cs create mode 100644 src/Custom/Responses/Items/FileSearchCallStatus.cs create mode 100644 src/Custom/Responses/Items/FunctionCallOutputResponseItem.cs create mode 100644 src/Custom/Responses/Items/FunctionCallOutputStatus.cs create mode 100644 src/Custom/Responses/Items/FunctionCallResponseItem.cs create mode 100644 src/Custom/Responses/Items/FunctionCallStatus.cs create mode 100644 src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs create mode 100644 src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs create mode 100644 src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs create mode 100644 src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs create mode 100644 src/Custom/Responses/Items/MessageResponseItem.cs create mode 100644 src/Custom/Responses/Items/MessageRole.cs create mode 100644 src/Custom/Responses/Items/MessageStatus.cs create mode 100644 src/Custom/Responses/Items/ReasoningResponseItem.cs create mode 100644 src/Custom/Responses/Items/ReasoningStatus.cs create mode 100644 src/Custom/Responses/Items/ReferenceResponseItem.cs create mode 100644 src/Custom/Responses/Items/ResponseItem.cs create mode 100644 src/Custom/Responses/Items/WebSearchCallResponseItem.cs create mode 100644 src/Custom/Responses/Items/WebSearchCallStatus.cs create mode 100644 src/Custom/Responses/OpenAIResponse.cs create mode 100644 src/Custom/Responses/OpenAIResponseClient.Protocol.cs create mode 100644 src/Custom/Responses/OpenAIResponseClient.cs create mode 100644 src/Custom/Responses/Pagination/AsyncResponseItemCollectionResult.cs create mode 100644 src/Custom/Responses/Pagination/ResponseItemCollectionOptions.cs create mode 100644 src/Custom/Responses/Pagination/ResponseItemCollectionOrder.cs create mode 100644 src/Custom/Responses/Pagination/ResponseItemCollectionPageToken.cs create mode 100644 src/Custom/Responses/Pagination/ResponseItemCollectionResult.cs create mode 100644 src/Custom/Responses/ResponseContentPart.cs create mode 100644 src/Custom/Responses/ResponseContentPartKind.cs create mode 100644 src/Custom/Responses/ResponseCreationOptions.cs create mode 100644 src/Custom/Responses/ResponseDeletionResult.cs create mode 100644 src/Custom/Responses/ResponseError.cs create mode 100644 src/Custom/Responses/ResponseImageDetailLevel.cs create mode 100644 src/Custom/Responses/ResponseIncompleteStatusDetails.cs create mode 100644 src/Custom/Responses/ResponseIncompleteStatusReason.cs create mode 100644 src/Custom/Responses/ResponseMessageAnnotation.cs create mode 100644 src/Custom/Responses/ResponseMessageAnnotationKind.cs create mode 100644 src/Custom/Responses/ResponseOutputTokenUsageDetails.cs create mode 100644 src/Custom/Responses/ResponseReasoningEffortLevel.cs create mode 100644 src/Custom/Responses/ResponseReasoningOptions.cs create mode 100644 src/Custom/Responses/ResponseReasoningSummaryVerbosity.cs create mode 100644 src/Custom/Responses/ResponseStatus.cs create mode 100644 src/Custom/Responses/ResponseTextFormat.cs create mode 100644 src/Custom/Responses/ResponseTextOptions.cs create mode 100644 src/Custom/Responses/ResponseTokenUsage.cs create mode 100644 src/Custom/Responses/ResponseTruncationMode.cs create mode 100644 src/Custom/Responses/Streaming/Internal/GeneratorStubs.cs create mode 100644 src/Custom/Responses/Streaming/Internal/InternalResponsesResponseStreamEventResponseContentPartAdded.cs create mode 100644 src/Custom/Responses/Streaming/Internal/InternalResponsesResponseStreamEventResponseContentPartDone.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseContentPartDeltaUpdate.Serialization.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseContentPartDeltaUpdate.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseErrorUpdate.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseFileSearchCallUpdate.Serialization.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseFileSearchCallUpdate.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseItemUpdate.Serialization.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseItemUpdate.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseStatusUpdate.Serialization.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseStatusUpdate.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseTextAnnotationUpdate.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseUpdate.Serialization.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseUpdate.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseUpdateKind.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseWebSearchCallUpdate.Serialization.cs create mode 100644 src/Custom/Responses/Streaming/StreamingResponseWebSearchCallUpdate.cs create mode 100644 src/Custom/Responses/Tools/ComputerToolEnvironment.cs create mode 100644 src/Custom/Responses/Tools/FileSearchToolRanker.cs create mode 100644 src/Custom/Responses/Tools/FileSearchToolRankingOptions.cs create mode 100644 src/Custom/Responses/Tools/Internal/InternalUnknownResponsesTool.cs create mode 100644 src/Custom/Responses/Tools/ResponseTool.cs create mode 100644 src/Custom/Responses/Tools/ResponseToolChoice.cs create mode 100644 src/Custom/Responses/Tools/WebSearchToolContextSize.cs create mode 100644 src/Custom/Responses/Tools/WebSearchToolLocation.cs create mode 100644 src/Generated/Internal/CodeGenMemberAttribute.cs create mode 100644 src/Generated/Internal/CodeGenSerializationAttribute.cs create mode 100644 src/Generated/Internal/CodeGenSuppressAttribute.cs create mode 100644 src/Generated/Internal/CodeGenTypeAttribute.cs create mode 100644 src/Generated/Internal/MultiPartFormDataBinaryContent.cs create mode 100644 src/Generated/Models/AcceptHeaderValue.cs delete mode 100644 src/Generated/Models/AssistantCollectionOrder.cs create mode 100644 src/Generated/Models/ChatMessageAnnotation.Serialization.cs create mode 100644 src/Generated/Models/ChatMessageAnnotation.cs create mode 100644 src/Generated/Models/ChatWebSearchOptions.Serialization.cs create mode 100644 src/Generated/Models/ChatWebSearchOptions.cs create mode 100644 src/Generated/Models/ComputerCallAction.Serialization.cs create mode 100644 src/Generated/Models/ComputerCallAction.cs create mode 100644 src/Generated/Models/ComputerCallActionKind.Serialization.cs create mode 100644 src/Generated/Models/ComputerCallActionMouseButton.Serialization.cs create mode 100644 src/Generated/Models/ComputerCallOutputResponseItem.Serialization.cs create mode 100644 src/Generated/Models/ComputerCallOutputResponseItem.cs create mode 100644 src/Generated/Models/ComputerCallOutputStatus.Serialization.cs create mode 100644 src/Generated/Models/ComputerCallResponseItem.Serialization.cs create mode 100644 src/Generated/Models/ComputerCallResponseItem.cs create mode 100644 src/Generated/Models/ComputerCallSafetyCheck.Serialization.cs create mode 100644 src/Generated/Models/ComputerCallSafetyCheck.cs create mode 100644 src/Generated/Models/ComputerCallStatus.Serialization.cs create mode 100644 src/Generated/Models/ComputerOutput.Serialization.cs create mode 100644 src/Generated/Models/ComputerOutput.cs create mode 100644 src/Generated/Models/ComputerToolEnvironment.cs create mode 100644 src/Generated/Models/FileSearchCallResponseItem.Serialization.cs create mode 100644 src/Generated/Models/FileSearchCallResponseItem.cs create mode 100644 src/Generated/Models/FileSearchCallResult.Serialization.cs create mode 100644 src/Generated/Models/FileSearchCallResult.cs create mode 100644 src/Generated/Models/FileSearchCallStatus.Serialization.cs create mode 100644 src/Generated/Models/FileSearchToolRanker.cs create mode 100644 src/Generated/Models/FileSearchToolRankingOptions.Serialization.cs create mode 100644 src/Generated/Models/FileSearchToolRankingOptions.cs create mode 100644 src/Generated/Models/FunctionCallOutputResponseItem.Serialization.cs create mode 100644 src/Generated/Models/FunctionCallOutputResponseItem.cs create mode 100644 src/Generated/Models/FunctionCallOutputStatus.Serialization.cs create mode 100644 src/Generated/Models/FunctionCallResponseItem.Serialization.cs create mode 100644 src/Generated/Models/FunctionCallResponseItem.cs create mode 100644 src/Generated/Models/FunctionCallStatus.Serialization.cs create mode 100644 src/Generated/Models/InternalAssistantSupportedModels.cs create mode 100644 src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.Serialization.cs create mode 100644 src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.cs create mode 100644 src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.Serialization.cs create mode 100644 src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.cs create mode 100644 src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileType.cs create mode 100644 src/Generated/Models/InternalChatCompletionResponseMessageAnnotationType.cs create mode 100644 src/Generated/Models/InternalChatCompletionResponseMessageAnnotationUrlCitation.Serialization.cs create mode 100644 src/Generated/Models/InternalChatCompletionResponseMessageAnnotationUrlCitation.cs delete mode 100644 src/Generated/Models/InternalCreateAssistantRequestModel.cs create mode 100644 src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.Serialization.cs create mode 100644 src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.cs create mode 100644 src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type.cs create mode 100644 src/Generated/Models/InternalCreateResponsesRequestIncludable.cs create mode 100644 src/Generated/Models/InternalCreateResponsesRequestModel.cs create mode 100644 src/Generated/Models/InternalCreateResponsesResponseObject.cs delete mode 100644 src/Generated/Models/InternalCreateRunRequestModel.cs create mode 100644 src/Generated/Models/InternalDeleteResponseResponseObject.cs create mode 100644 src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessageRole.cs create mode 100644 src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessageWeight.cs delete mode 100644 src/Generated/Models/InternalListFilesInVectorStoreBatchRequestOrder.cs create mode 100644 src/Generated/Models/InternalResponsesAssistantMessage.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesAssistantMessage.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallClickAction.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallClickAction.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallDoubleClickAction.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallDoubleClickAction.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallDragAction.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallDragAction.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallDragActionPath.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallDragActionPath.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallKeyPressAction.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallKeyPressAction.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallMoveAction.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallMoveAction.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallOutputItemOutputType.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallOutputItemScreenshot.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallOutputItemScreenshot.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallScreenshotAction.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallScreenshotAction.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallScrollAction.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallScrollAction.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallTypeAction.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallTypeAction.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallWaitAction.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerCallWaitAction.cs create mode 100644 src/Generated/Models/InternalResponsesComputerTool.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesComputerTool.cs create mode 100644 src/Generated/Models/InternalResponsesDeveloperMessage.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesDeveloperMessage.cs create mode 100644 src/Generated/Models/InternalResponsesErrorResponse.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesErrorResponse.cs create mode 100644 src/Generated/Models/InternalResponsesFileSearchTool.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesFileSearchTool.cs create mode 100644 src/Generated/Models/InternalResponsesFunctionTool.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesFunctionTool.cs create mode 100644 src/Generated/Models/InternalResponsesInputFileContentPart.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesInputFileContentPart.cs create mode 100644 src/Generated/Models/InternalResponsesInputImageContentPart.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesInputImageContentPart.cs create mode 100644 src/Generated/Models/InternalResponsesInputItemList.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesInputItemList.cs create mode 100644 src/Generated/Models/InternalResponsesInputItemListObject.cs create mode 100644 src/Generated/Models/InternalResponsesInputTextContentPart.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesInputTextContentPart.cs create mode 100644 src/Generated/Models/InternalResponsesItemType.cs create mode 100644 src/Generated/Models/InternalResponsesMessageAnnotationFileCitation.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesMessageAnnotationFileCitation.cs create mode 100644 src/Generated/Models/InternalResponsesMessageAnnotationFilePath.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesMessageAnnotationFilePath.cs create mode 100644 src/Generated/Models/InternalResponsesMessageAnnotationUrlCitation.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesMessageAnnotationUrlCitation.cs create mode 100644 src/Generated/Models/InternalResponsesOutputRefusalContentPart.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesOutputRefusalContentPart.cs create mode 100644 src/Generated/Models/InternalResponsesOutputTextContentPart.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesOutputTextContentPart.cs create mode 100644 src/Generated/Models/InternalResponsesReasoningItemSummaryElement.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesReasoningItemSummaryElement.cs create mode 100644 src/Generated/Models/InternalResponsesReasoningItemSummaryElementSummaryText.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesReasoningItemSummaryElementSummaryText.cs create mode 100644 src/Generated/Models/InternalResponsesReasoningItemSummaryType.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseCompleted.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseCompleted.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartAdded.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartAdded.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartDone.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartDone.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseCreated.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseCreated.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFailed.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFailed.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallCompleted.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallCompleted.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallInProgress.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallInProgress.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallSearching.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallSearching.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseInProgress.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseInProgress.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseIncomplete.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseIncomplete.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemAdded.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemAdded.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemDone.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemDone.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDelta.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDelta.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDone.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDone.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDelta.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDelta.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDone.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDone.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallCompleted.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallCompleted.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallInProgress.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallInProgress.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallSearching.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallSearching.cs create mode 100644 src/Generated/Models/InternalResponsesSystemMessage.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesSystemMessage.cs create mode 100644 src/Generated/Models/InternalResponsesTextFormatJsonObject.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesTextFormatJsonObject.cs create mode 100644 src/Generated/Models/InternalResponsesTextFormatJsonSchema.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesTextFormatJsonSchema.cs create mode 100644 src/Generated/Models/InternalResponsesTextFormatText.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesTextFormatText.cs create mode 100644 src/Generated/Models/InternalResponsesTextFormatType.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceObject.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceObject.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceObjectComputer.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceObjectComputer.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceObjectFileSearch.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceObjectFileSearch.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceObjectFunction.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceObjectFunction.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceObjectType.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceObjectWebSearch.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceObjectWebSearch.cs create mode 100644 src/Generated/Models/InternalResponsesToolChoiceOption.cs create mode 100644 src/Generated/Models/InternalResponsesToolType.cs create mode 100644 src/Generated/Models/InternalResponsesUserMessage.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesUserMessage.cs create mode 100644 src/Generated/Models/InternalResponsesWebSearchApproximateLocation.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesWebSearchApproximateLocation.cs create mode 100644 src/Generated/Models/InternalResponsesWebSearchTool.Serialization.cs create mode 100644 src/Generated/Models/InternalResponsesWebSearchTool.cs delete mode 100644 src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker.cs create mode 100644 src/Generated/Models/InternalUnknownResponsesItem.Serialization.cs create mode 100644 src/Generated/Models/InternalUnknownResponsesItem.cs create mode 100644 src/Generated/Models/InternalUnknownResponsesMessage.Serialization.cs create mode 100644 src/Generated/Models/InternalUnknownResponsesMessage.cs create mode 100644 src/Generated/Models/InternalUnknownResponsesTextFormat.Serialization.cs create mode 100644 src/Generated/Models/InternalUnknownResponsesTextFormat.cs create mode 100644 src/Generated/Models/InternalUnknownResponsesTool.Serialization.cs create mode 100644 src/Generated/Models/InternalUnknownResponsesTool.cs create mode 100644 src/Generated/Models/InternalVectorStoreFileAttributes.Serialization.cs create mode 100644 src/Generated/Models/InternalVectorStoreFileAttributes.cs create mode 100644 src/Generated/Models/InternalWebSearchContextSize.cs create mode 100644 src/Generated/Models/InternalWebSearchLocation.Serialization.cs create mode 100644 src/Generated/Models/InternalWebSearchLocation.cs delete mode 100644 src/Generated/Models/MessageCollectionOrder.cs create mode 100644 src/Generated/Models/MessageResponseItem.Serialization.cs create mode 100644 src/Generated/Models/MessageResponseItem.cs create mode 100644 src/Generated/Models/MessageRole.cs create mode 100644 src/Generated/Models/MessageStatus.Serialization.cs create mode 100644 src/Generated/Models/OpenAIResponse.Serialization.cs create mode 100644 src/Generated/Models/OpenAIResponse.cs create mode 100644 src/Generated/Models/ReasoningResponseItem.Serialization.cs create mode 100644 src/Generated/Models/ReasoningResponseItem.cs create mode 100644 src/Generated/Models/ReasoningStatus.Serialization.cs create mode 100644 src/Generated/Models/ReferenceResponseItem.Serialization.cs create mode 100644 src/Generated/Models/ReferenceResponseItem.cs create mode 100644 src/Generated/Models/ResponseContentPart.Serialization.cs create mode 100644 src/Generated/Models/ResponseContentPart.cs create mode 100644 src/Generated/Models/ResponseContentPartKind.Serialization.cs create mode 100644 src/Generated/Models/ResponseCreationOptions.Serialization.cs create mode 100644 src/Generated/Models/ResponseCreationOptions.cs create mode 100644 src/Generated/Models/ResponseDeletionResult.Serialization.cs create mode 100644 src/Generated/Models/ResponseDeletionResult.cs create mode 100644 src/Generated/Models/ResponseError.Serialization.cs create mode 100644 src/Generated/Models/ResponseError.cs create mode 100644 src/Generated/Models/ResponseImageDetailLevel.cs create mode 100644 src/Generated/Models/ResponseIncompleteStatusDetails.Serialization.cs create mode 100644 src/Generated/Models/ResponseIncompleteStatusDetails.cs create mode 100644 src/Generated/Models/ResponseIncompleteStatusReason.cs create mode 100644 src/Generated/Models/ResponseItem.Serialization.cs create mode 100644 src/Generated/Models/ResponseItem.cs create mode 100644 src/Generated/Models/ResponseMessageAnnotation.Serialization.cs create mode 100644 src/Generated/Models/ResponseMessageAnnotation.cs create mode 100644 src/Generated/Models/ResponseMessageAnnotationKind.Serialization.cs create mode 100644 src/Generated/Models/ResponseOutputTokenUsageDetails.Serialization.cs create mode 100644 src/Generated/Models/ResponseOutputTokenUsageDetails.cs create mode 100644 src/Generated/Models/ResponseReasoningEffortLevel.cs create mode 100644 src/Generated/Models/ResponseReasoningOptions.Serialization.cs create mode 100644 src/Generated/Models/ResponseReasoningOptions.cs create mode 100644 src/Generated/Models/ResponseReasoningSummaryVerbosity.cs create mode 100644 src/Generated/Models/ResponseStatus.Serialization.cs create mode 100644 src/Generated/Models/ResponseTextFormat.Serialization.cs create mode 100644 src/Generated/Models/ResponseTextFormat.cs create mode 100644 src/Generated/Models/ResponseTextOptions.Serialization.cs rename src/Generated/Models/{ChatMessageContent.cs => ResponseTextOptions.cs} (61%) create mode 100644 src/Generated/Models/ResponseTokenUsage.Serialization.cs create mode 100644 src/Generated/Models/ResponseTokenUsage.cs create mode 100644 src/Generated/Models/ResponseTool.Serialization.cs create mode 100644 src/Generated/Models/ResponseTool.cs create mode 100644 src/Generated/Models/ResponseTruncationMode.cs delete mode 100644 src/Generated/Models/RunCollectionOrder.cs delete mode 100644 src/Generated/Models/RunStepCollectionOrder.cs create mode 100644 src/Generated/Models/StreamingResponseErrorUpdate.Serialization.cs create mode 100644 src/Generated/Models/StreamingResponseErrorUpdate.cs create mode 100644 src/Generated/Models/StreamingResponseTextAnnotationUpdate.Serialization.cs create mode 100644 src/Generated/Models/StreamingResponseTextAnnotationUpdate.cs create mode 100644 src/Generated/Models/StreamingResponseUpdate.Serialization.cs create mode 100644 src/Generated/Models/StreamingResponseUpdate.cs create mode 100644 src/Generated/Models/StreamingResponseUpdateKind.cs create mode 100644 src/Generated/Models/UnknownResponsesComputerCallItemAction.Serialization.cs create mode 100644 src/Generated/Models/UnknownResponsesComputerCallItemAction.cs create mode 100644 src/Generated/Models/UnknownResponsesComputerCallOutputItemOutput.Serialization.cs create mode 100644 src/Generated/Models/UnknownResponsesComputerCallOutputItemOutput.cs create mode 100644 src/Generated/Models/UnknownResponsesContent.Serialization.cs create mode 100644 src/Generated/Models/UnknownResponsesContent.cs create mode 100644 src/Generated/Models/UnknownResponsesOutputTextAnnotation.Serialization.cs create mode 100644 src/Generated/Models/UnknownResponsesOutputTextAnnotation.cs create mode 100644 src/Generated/Models/UnknownResponsesReasoningItemSummaryElement.Serialization.cs create mode 100644 src/Generated/Models/UnknownResponsesReasoningItemSummaryElement.cs create mode 100644 src/Generated/Models/UnknownResponsesResponseStreamEvent.Serialization.cs create mode 100644 src/Generated/Models/UnknownResponsesResponseStreamEvent.cs create mode 100644 src/Generated/Models/UnknownResponsesToolChoiceObject.Serialization.cs create mode 100644 src/Generated/Models/UnknownResponsesToolChoiceObject.cs create mode 100644 src/Generated/Models/UnknownResponsesWebSearchLocation.Serialization.cs create mode 100644 src/Generated/Models/UnknownResponsesWebSearchLocation.cs delete mode 100644 src/Generated/Models/VectorStoreFileAssociationCollectionOrder.cs create mode 100644 src/Generated/Models/WebSearchCallResponseItem.Serialization.cs create mode 100644 src/Generated/Models/WebSearchCallResponseItem.cs create mode 100644 src/Generated/Models/WebSearchCallStatus.Serialization.cs create mode 100644 src/Generated/Models/WebSearchToolContextSize.cs create mode 100644 src/Generated/Models/WebSearchToolLocation.Serialization.cs create mode 100644 src/Generated/Models/WebSearchToolLocation.cs create mode 100644 src/Generated/OpenAIResponseClient.RestClient.cs create mode 100644 src/Generated/OpenAIResponseClient.cs rename src/{Custom/Chat/Streaming/InternalAsyncStreamingChatCompletionUpdateCollection.cs => Utility/AsyncSseUpdateCollection.cs} (55%) delete mode 100644 src/Utility/Generator/CodeGenClientAttribute.cs delete mode 100644 src/Utility/Generator/CodeGenMemberAttribute.cs delete mode 100644 src/Utility/Generator/CodeGenModelAttribute.cs delete mode 100644 src/Utility/Generator/CodeGenSerializationAttribute.cs delete mode 100644 src/Utility/Generator/CodeGenSuppressAttribute.cs delete mode 100644 src/Utility/Generator/CodeGenTypeAttribute.cs delete mode 100644 src/Utility/MultipartFormDataBinaryContent.cs rename src/{Custom/Chat/Streaming/InternalStreamingChatCompletionUpdateCollection.cs => Utility/SseUpdateCollection.cs} (57%) create mode 100644 tests/Assets/images_screenshot_with_save_1024_768.png create mode 100644 tests/Responses/ResponsesSmokeTests.cs create mode 100644 tests/Responses/ResponsesTests.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index 34c4a5097..5b668cb2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Release History +## 2.2.0-beta.3 (Unreleased) + +### Features Added + +### Breaking Changes + +### Bugs Fixed + +### Other Changes + ## 2.2.0-beta.2 (2025-02-18) ### Bugs fixed diff --git a/api/OpenAI.net8.0.cs b/api/OpenAI.net8.0.cs index db067ca29..8f4fd74f2 100644 --- a/api/OpenAI.net8.0.cs +++ b/api/OpenAI.net8.0.cs @@ -19,6 +19,8 @@ public class OpenAIClient { 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("OPENAI002")] public virtual RealtimeConversation.RealtimeConversationClient GetRealtimeConversationClient(string model); [Experimental("OPENAI001")] @@ -267,7 +269,7 @@ public class AssistantModificationOptions : IJsonModel, IEquatable, IJsonModel, IPersistableModel { + public class AssistantResponseFormat : IEquatable, IEquatable, IJsonModel, IPersistableModel { public static AssistantResponseFormat Auto { get; } public static AssistantResponseFormat JsonObject { get; } public static AssistantResponseFormat Text { get; } @@ -765,7 +767,7 @@ public class RunStepTokenUsage : IJsonModel, IPersistableMode public static implicit operator BinaryContent(RunStepTokenUsage runStepTokenUsage); } [Experimental("OPENAI001")] - public abstract class RunStepToolCall : IJsonModel, IPersistableModel { + public class RunStepToolCall : IJsonModel, IPersistableModel { public string CodeInterpreterInput { get; } public IReadOnlyList CodeInterpreterOutputs { get; } public FileSearchRankingOptions FileSearchRankingOptions { get; } @@ -788,7 +790,7 @@ public enum RunStepToolCallKind { public class RunStepUpdate : StreamingUpdate { } [Experimental("OPENAI001")] - public abstract class RunStepUpdateCodeInterpreterOutput : IJsonModel, IPersistableModel { + public class RunStepUpdateCodeInterpreterOutput : IJsonModel, IPersistableModel { public string ImageFileId { get; } public string Logs { get; } public int OutputIndex { get; } @@ -1251,6 +1253,7 @@ public class ChatClient { public virtual AsyncCollectionResult CompleteChatStreamingAsync(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); } public class ChatCompletion : IJsonModel, IPersistableModel { + public IReadOnlyList Annotations { get; } public ChatMessageContent Content { get; } public IReadOnlyList ContentTokenLogProbabilities { get; } public DateTimeOffset CreatedAt { get; } @@ -1296,6 +1299,7 @@ public class ChatCompletionOptions : IJsonModel, IPersist public IList Tools { get; } 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); } @@ -1393,6 +1397,14 @@ public class ChatMessage : IJsonModel, IPersistableModel, 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); + } public class ChatMessageContent : ObjectModel.Collection { public ChatMessageContent(); public ChatMessageContent(params ChatMessageContentPart[] contentParts); @@ -1582,6 +1594,10 @@ public class ChatToolChoice : IJsonModel, IPersistableModel, IPersistableModel { + public static explicit operator ChatWebSearchOptions(ClientResult result); + public static implicit operator BinaryContent(ChatWebSearchOptions chatWebSearchOptions); + } public class DeveloperChatMessage : ChatMessage, IJsonModel, IPersistableModel { public DeveloperChatMessage(params ChatMessageContentPart[] contentParts); public DeveloperChatMessage(IEnumerable contentParts); @@ -1598,10 +1614,11 @@ public class FunctionChatMessage : ChatMessage, IJsonModel, public static implicit operator BinaryContent(FunctionChatMessage functionChatMessage); } 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); + 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); + public static ChatMessageAnnotation ChatMessageAnnotation(int startIndex = 0, int endIndex = 0, Uri webResourceUri = null, string webResourceTitle = null); public static ChatOutputAudio ChatOutputAudio(BinaryData audioBytes, string id = null, string transcript = null, DateTimeOffset expiresAt = default); public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount = 0, int audioTokenCount = 0, int acceptedPredictionTokenCount = 0, int rejectedPredictionTokenCount = 0); [EditorBrowsable(EditorBrowsableState.Never)] @@ -1752,7 +1769,8 @@ public enum FilePurpose { BatchOutput = 3, FineTune = 4, FineTuneResults = 5, - Vision = 6 + Vision = 6, + UserData = 7 } [Obsolete("This struct 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 enum FileStatus { @@ -1764,7 +1782,9 @@ public enum FileStatus { public FileUploadPurpose(string value); public static FileUploadPurpose Assistants { get; } public static FileUploadPurpose Batch { get; } + public static FileUploadPurpose Evaluations { get; } public static FileUploadPurpose FineTune { get; } + public static FileUploadPurpose UserData { get; } public static FileUploadPurpose Vision { get; } public readonly bool Equals(FileUploadPurpose other); [EditorBrowsable(EditorBrowsableState.Never)] @@ -1778,6 +1798,7 @@ public enum FileStatus { } public class OpenAIFile : IJsonModel, IPersistableModel { public DateTimeOffset CreatedAt { get; } + public DateTimeOffset? ExpiresAt { get; } public string Filename { get; } public string Id { get; } public FilePurpose Purpose { get; } @@ -1856,7 +1877,9 @@ public class OpenAIFileCollection : ObjectModel.ReadOnlyCollection, 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); + 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); + [EditorBrowsable(EditorBrowsableState.Never)] + public static OpenAIFile OpenAIFileInfo(string id, int? sizeInBytes, DateTimeOffset createdAt, string filename, FilePurpose purpose, FileStatus status, string statusDetails); } } namespace OpenAI.FineTuning { @@ -2170,7 +2193,7 @@ public enum ConversationContentModalities { Audio = 2 } [Experimental("OPENAI002")] - public abstract class ConversationContentPart : IJsonModel, IPersistableModel { + public class ConversationContentPart : IJsonModel, IPersistableModel { public string AudioTranscript { get; } public string Text { get; } public static ConversationContentPart CreateInputAudioTranscriptPart(string transcript = null); @@ -2294,7 +2317,7 @@ public class ConversationInputTranscriptionOptions : IJsonModel, IPersistableModel { + public class ConversationItem : IJsonModel, IPersistableModel { public string FunctionArguments { get; } public string FunctionCallId { get; } public string FunctionName { get; } @@ -2662,7 +2685,7 @@ public enum ConversationTurnDetectionKind { Disabled = 1 } [Experimental("OPENAI002")] - public abstract class ConversationTurnDetectionOptions : IJsonModel, IPersistableModel { + 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); @@ -2670,7 +2693,7 @@ public abstract class ConversationTurnDetectionOptions : IJsonModel, IPersistableModel { + public class ConversationUpdate : IJsonModel, IPersistableModel { public string EventId { get; } public ConversationUpdateKind Kind { get; protected internal set; } public BinaryData GetRawContent(); @@ -2805,6 +2828,644 @@ public class RealtimeConversationSession : IDisposable { public override readonly string ToString(); } } +namespace OpenAI.Responses { + public class ComputerCallAction : IJsonModel, IPersistableModel { + public Drawing.Point? ClickCoordinates { get; } + public ComputerCallActionMouseButton? ClickMouseButton { get; } + public Drawing.Point? DoubleClickCoordinates { get; } + public IList DragPath { get; } + public IList KeyPressKeyCodes { get; } + public ComputerCallActionKind Kind { get; } + public Drawing.Point? MoveCoordinates { get; } + public Drawing.Point? ScrollCoordinates { get; } + public int? ScrollHorizontalOffset { get; } + public int? ScrollVerticalOffset { get; } + public string TypeText { get; } + public static ComputerCallAction CreateClickAction(Drawing.Point clickCoordinates, ComputerCallActionMouseButton clickMouseButton); + public static ComputerCallAction CreateDoubleClickAction(Drawing.Point doubleClickCoordinates, ComputerCallActionMouseButton doubleClickMouseButton); + public static ComputerCallAction CreateDragAction(IList dragPath); + public static ComputerCallAction CreateKeyPressAction(IList keyCodes); + public static ComputerCallAction CreateMoveAction(Drawing.Point moveCoordinates); + public static ComputerCallAction CreateScreenshotAction(); + 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); + } + public enum ComputerCallActionKind { + Click = 0, + DoubleClick = 1, + Drag = 2, + KeyPress = 3, + Move = 4, + Screenshot = 5, + Scroll = 6, + Type = 7, + Wait = 8 + } + public enum ComputerCallActionMouseButton { + Left = 0, + Right = 1, + Wheel = 2, + Back = 3, + 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 ComputerCallOutputStatus? Status { get; } + public new static explicit operator ComputerCallOutputResponseItem(ClientResult result); + public static implicit operator BinaryContent(ComputerCallOutputResponseItem computerCallOutputResponseItem); + } + public enum ComputerCallOutputStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + public class ComputerCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public ComputerCallResponseItem(string id, string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks); + public ComputerCallAction Action { get; set; } + public string CallId { get; set; } + public IList PendingSafetyChecks { get; } + public ComputerCallStatus Status { get; } + public new static explicit operator ComputerCallResponseItem(ClientResult result); + public static implicit operator BinaryContent(ComputerCallResponseItem computerCallResponseItem); + } + 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); + } + public enum ComputerCallStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + public class ComputerOutput : IJsonModel, IPersistableModel { + public static ComputerOutput CreateScreenshotOutput(BinaryData screenshotImageBytes, string screenshotImageBytesMediaType); + public static ComputerOutput CreateScreenshotOutput(string screenshotImageFileId); + public static ComputerOutput CreateScreenshotOutput(Uri screenshotImageUri); + public static explicit operator ComputerOutput(ClientResult result); + public static implicit operator BinaryContent(ComputerOutput computerOutput); + } + public readonly partial struct ComputerToolEnvironment : IEquatable { + public ComputerToolEnvironment(string value); + public static ComputerToolEnvironment Browser { get; } + public static ComputerToolEnvironment Mac { get; } + public static ComputerToolEnvironment Ubuntu { get; } + public static ComputerToolEnvironment Windows { get; } + public readonly bool Equals(ComputerToolEnvironment other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ComputerToolEnvironment left, ComputerToolEnvironment right); + public static implicit operator ComputerToolEnvironment(string value); + public static bool operator !=(ComputerToolEnvironment left, ComputerToolEnvironment right); + public override readonly string ToString(); + } + public class FileSearchCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public FileSearchCallResponseItem(string id, 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 class FileSearchCallResult : IJsonModel, IPersistableModel { + public IDictionary 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); + } + public enum FileSearchCallStatus { + InProgress = 0, + Searching = 1, + Completed = 2, + Incomplete = 3, + Failed = 4 + } + public readonly partial struct FileSearchToolRanker : IEquatable { + public FileSearchToolRanker(string value); + public static FileSearchToolRanker Auto { get; } + public static FileSearchToolRanker Default20241115 { get; } + public readonly bool Equals(FileSearchToolRanker other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(FileSearchToolRanker left, FileSearchToolRanker right); + public static implicit operator FileSearchToolRanker(string value); + public static bool operator !=(FileSearchToolRanker left, FileSearchToolRanker right); + public override readonly string ToString(); + } + 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); + } + public class FunctionCallOutputResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public FunctionCallOutputResponseItem(string callId, string functionOutput); + public string CallId { get; set; } + public string FunctionOutput { get; set; } + public FunctionCallOutputStatus? Status { get; } + public new static explicit operator FunctionCallOutputResponseItem(ClientResult result); + public static implicit operator BinaryContent(FunctionCallOutputResponseItem functionCallOutputResponseItem); + } + public enum FunctionCallOutputStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + public class FunctionCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public FunctionCallResponseItem(string id, string callId, string functionName, BinaryData functionArguments); + public string CallId { get; set; } + 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); + } + public enum FunctionCallStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + public class MessageResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public MessageResponseItem(MessageRole role); + 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); + } + public readonly partial struct MessageRole : IEquatable { + public MessageRole(string value); + public static MessageRole Assistant { get; } + public static MessageRole Developer { get; } + public static MessageRole System { get; } + public static MessageRole User { get; } + public readonly bool Equals(MessageRole other); + [EditorBrowsable(global::EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(global::EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(MessageRole left, MessageRole right); + public static implicit operator MessageRole(string value); + public static bool operator !=(MessageRole left, MessageRole right); + public override readonly string ToString(); + } + public enum MessageStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + public class OpenAIResponse : IJsonModel, IPersistableModel { + public bool AllowParallelToolCalls { get; } + public DateTimeOffset CreatedAt { get; } + public string EndUserId { get; } + public ResponseError Error { get; } + public string Id { get; } + public ResponseIncompleteStatusDetails IncompleteStatusDetails { get; } + public string Instructions { get; } + public int? MaxOutputTokenCount { get; } + public IDictionary Metadata { get; } + public string Model { get; } + public IList OutputItems { get; } + public string PreviousResponseId { get; } + public ResponseReasoningOptions ReasoningOptions { get; } + public ResponseStatus? Status { get; } + public float Temperature { get; } + public ResponseTextOptions TextOptions { get; } + public BinaryData ToolChoice { get; } + public IList Tools { get; } + public float TopP { get; } + public ResponseTruncationMode? TruncationMode { get; } + public ResponseTokenUsage Usage { get; } + public static explicit operator OpenAIResponse(ClientResult result); + public static implicit operator BinaryContent(OpenAIResponse openAIResponse); + } + public class OpenAIResponseClient { + protected OpenAIResponseClient(); + protected internal OpenAIResponseClient(ClientPipeline pipeline, string model, OpenAIClientOptions options); + public OpenAIResponseClient(string model, ApiKeyCredential credential, OpenAIClientOptions options); + public OpenAIResponseClient(string model, ApiKeyCredential credential); + public OpenAIResponseClient(string model, string apiKey); + public ClientPipeline Pipeline { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CreateResponse(BinaryContent content, RequestOptions options = null); + public virtual ClientResult CreateResponse(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult CreateResponse(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CreateResponseAsync(BinaryContent content, RequestOptions options = null); + public virtual Task> CreateResponseAsync(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> CreateResponseAsync(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult CreateResponseStreaming(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult CreateResponseStreaming(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult CreateResponseStreamingAsync(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult CreateResponseStreamingAsync(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult DeleteResponse(string responseId, RequestOptions options); + public virtual ClientResult DeleteResponse(string responseId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + 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, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetResponseAsync(string responseId, 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)] + public virtual CollectionResult GetResponseInputItems(string responseId, int? limit, string order, string after, string before, RequestOptions options = null); + 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 class ReasoningResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public ReasoningResponseItem(string id, IEnumerable summaryTextParts); + public ReasoningStatus? Status { get; } + public IReadOnlyList SummaryTextParts { get; } + public new static explicit operator ReasoningResponseItem(ClientResult result); + public static implicit operator BinaryContent(ReasoningResponseItem reasoningResponseItem); + } + public enum ReasoningStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + 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); + } + public class ResponseContentPart : IJsonModel, IPersistableModel { + public BinaryData InputFileBytes { get; } + public string InputFileId { get; } + public string InputFilename { get; } + public ResponseImageDetailLevel? InputImageDetailLevel { get; } + public string InputImageFileId { get; } + public ResponseContentPartKind Kind { get; } + 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 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); + } + public enum ResponseContentPartKind { + InputText = 0, + InputImage = 1, + InputFile = 2, + OutputText = 3, + Refusal = 4 + } + public class ResponseCreationOptions : IJsonModel, IPersistableModel { + public bool? AllowParallelToolCalls { get; set; } + public string EndUserId { get; set; } + public string Instructions { get; set; } + public int? MaxOutputTokenCount { get; set; } + public IDictionary Metadata { get; } + public string PreviousResponseId { get; set; } + public ResponseReasoningOptions ReasoningOptions { get; set; } + public bool? StoredOutputEnabled { get; set; } + public float? Temperature { get; set; } + public ResponseTextOptions TextOptions { get; set; } + public BinaryData ToolChoice { get; set; } + public IList Tools { get; set; } + public float? TopP { get; set; } + public ResponseTruncationMode? TruncationMode { get; set; } + public static explicit operator ResponseCreationOptions(ClientResult result); + public static implicit operator BinaryContent(ResponseCreationOptions responseCreationOptions); + } + 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); + } + public class ResponseError : IJsonModel, IPersistableModel { + public string Code { get; } + public string Message { get; } + public static explicit operator ResponseError(ClientResult result); + public static implicit operator BinaryContent(ResponseError responseError); + } + public readonly partial struct ResponseImageDetailLevel : IEquatable { + public ResponseImageDetailLevel(string value); + public static ResponseImageDetailLevel Auto { get; } + public static ResponseImageDetailLevel High { get; } + public static ResponseImageDetailLevel Low { get; } + public readonly bool Equals(ResponseImageDetailLevel other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseImageDetailLevel left, ResponseImageDetailLevel right); + public static implicit operator ResponseImageDetailLevel(string value); + public static bool operator !=(ResponseImageDetailLevel left, ResponseImageDetailLevel right); + public override readonly string ToString(); + } + public class ResponseIncompleteStatusDetails : IJsonModel, IPersistableModel { + public ResponseIncompleteStatusReason? Reason { get; } + public static explicit operator ResponseIncompleteStatusDetails(ClientResult result); + public static implicit operator BinaryContent(ResponseIncompleteStatusDetails responseIncompleteStatusDetails); + } + public readonly partial struct ResponseIncompleteStatusReason : IEquatable { + public ResponseIncompleteStatusReason(string value); + public static ResponseIncompleteStatusReason ContentFilter { get; } + public static ResponseIncompleteStatusReason MaxOutputTokens { get; } + public readonly bool Equals(ResponseIncompleteStatusReason other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseIncompleteStatusReason left, ResponseIncompleteStatusReason right); + public static implicit operator ResponseIncompleteStatusReason(string value); + public static bool operator !=(ResponseIncompleteStatusReason left, ResponseIncompleteStatusReason right); + public override readonly string ToString(); + } + public class ResponseItem : IJsonModel, IPersistableModel { + public string Id { get; } + public static MessageResponseItem CreateAssistantMessageItem(string id, string content); + public static ResponseItem CreateComputerCallItem(string id, string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks); + [Experimental("OPENAICUA001")] + public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, BinaryData screenshotImageBytes, string screenshotImageBytesMediaType); + [Experimental("OPENAICUA001")] + public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, string screenshotImageFileId); + [Experimental("OPENAICUA001")] + public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, Uri screenshotImageUri); + public static MessageResponseItem CreateDeveloperMessageItem(string content); + public static FileSearchCallResponseItem CreateFileSearchCallResponseItem(string id, IEnumerable queries, IEnumerable results); + public static FunctionCallResponseItem CreateFunctionCall(string id, string callId, string functionName, BinaryData functionArguments); + public static FunctionCallOutputResponseItem CreateFunctionCallOutputItem(string callId, string functionOutput); + public static ReasoningResponseItem CreateReasoningItem(string id, IEnumerable summaryTextParts); + public static ReferenceResponseItem CreateReferenceItem(string id); + public static MessageResponseItem CreateSystemMessageItem(string content); + public static MessageResponseItem CreateUserMessageItem(IEnumerable contentParts); + public static MessageResponseItem CreateUserMessageItem(string content); + public static WebSearchCallResponseItem CreateWebSearchCallItem(string id); + public static explicit operator ResponseItem(ClientResult result); + public static implicit operator BinaryContent(ResponseItem responseItem); + } + [Experimental("OPENAI001")] + public class ResponseItemCollectionOptions { + public string AfterId { get; set; } + public string BeforeId { get; set; } + public ResponseItemCollectionOrder? Order { get; set; } + public int? PageSizeLimit { get; set; } + } + [Experimental("OPENAI001")] + public readonly partial struct ResponseItemCollectionOrder : IEquatable { + public ResponseItemCollectionOrder(string value); + public static ResponseItemCollectionOrder Ascending { get; } + public static ResponseItemCollectionOrder Descending { get; } + public readonly bool Equals(ResponseItemCollectionOrder other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseItemCollectionOrder left, ResponseItemCollectionOrder right); + public static implicit operator ResponseItemCollectionOrder(string value); + public static bool operator !=(ResponseItemCollectionOrder left, ResponseItemCollectionOrder right); + public override readonly string ToString(); + } + public class ResponseMessageAnnotation : IJsonModel, IPersistableModel { + public string FileCitationFileId { get; } + public int? FileCitationIndex { get; } + public string FilePathFileId { get; } + public int? FilePathIndex { get; } + public ResponseMessageAnnotationKind Kind { get; } + 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 enum ResponseMessageAnnotationKind { + FileCitation = 0, + UriCitation = 1, + FilePath = 2 + } + public class ResponseOutputTokenUsageDetails : IJsonModel, IPersistableModel { + public int ReasoningTokenCount { get; } + public static explicit operator ResponseOutputTokenUsageDetails(ClientResult result); + public static implicit operator BinaryContent(ResponseOutputTokenUsageDetails responseOutputTokenUsageDetails); + } + public readonly partial struct ResponseReasoningEffortLevel : IEquatable { + public ResponseReasoningEffortLevel(string value); + public static ResponseReasoningEffortLevel High { get; } + public static ResponseReasoningEffortLevel Low { get; } + public static ResponseReasoningEffortLevel Medium { get; } + public readonly bool Equals(ResponseReasoningEffortLevel other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseReasoningEffortLevel left, ResponseReasoningEffortLevel right); + public static implicit operator ResponseReasoningEffortLevel(string value); + public static bool operator !=(ResponseReasoningEffortLevel left, ResponseReasoningEffortLevel right); + public override readonly string ToString(); + } + public class ResponseReasoningOptions : 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); + } + public readonly partial struct ResponseReasoningSummaryVerbosity : IEquatable { + public ResponseReasoningSummaryVerbosity(string value); + public static ResponseReasoningSummaryVerbosity Concise { get; } + public static ResponseReasoningSummaryVerbosity Detailed { get; } + public readonly bool Equals(ResponseReasoningSummaryVerbosity other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseReasoningSummaryVerbosity left, ResponseReasoningSummaryVerbosity right); + public static implicit operator ResponseReasoningSummaryVerbosity(string value); + public static bool operator !=(ResponseReasoningSummaryVerbosity left, ResponseReasoningSummaryVerbosity right); + public override readonly string ToString(); + } + public enum ResponseStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2, + Failed = 3 + } + public class ResponseTextFormat : IJsonModel, IPersistableModel { + 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); + } + public class ResponseTextOptions : IJsonModel, IPersistableModel { + public ResponseTextFormat ResponseFormat { get; set; } + public static explicit operator ResponseTextOptions(ClientResult result); + public static implicit operator BinaryContent(ResponseTextOptions responseTextOptions); + } + public class ResponseTokenUsage : IJsonModel, IPersistableModel { + public int InputTokenCount { 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); + } + public class ResponseTool : IJsonModel, IPersistableModel { + [Experimental("OPENAICUA001")] + public static ResponseTool CreateComputerTool(int displayWidth, int displayHeight, ComputerToolEnvironment environment); + 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 readonly partial struct ResponseTruncationMode : IEquatable { + public ResponseTruncationMode(string value); + public static ResponseTruncationMode Auto { get; } + public static ResponseTruncationMode Disabled { get; } + public readonly bool Equals(ResponseTruncationMode other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseTruncationMode left, ResponseTruncationMode right); + public static implicit operator ResponseTruncationMode(string value); + public static bool operator !=(ResponseTruncationMode left, ResponseTruncationMode right); + public override readonly string ToString(); + } + public class StreamingResponseContentPartDeltaUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public int ContentPartIndex { get; } + public string FunctionArguments { get; } + public string ItemId { get; } + public int ItemIndex { get; } + public string Refusal { get; } + public string Text { get; } + } + 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); + } + public class StreamingResponseFileSearchCallUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public string OutputItemId { get; } + public int OutputItemIndex { get; } + } + public class StreamingResponseItemUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public ResponseItem Item { get; } + public int ItemIndex { get; } + } + public class StreamingResponseStatusUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public OpenAIResponse Response { get; } + } + public class StreamingResponseTextAnnotationUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public ResponseMessageAnnotation Annotation { get; } + public int ContentIndex { get; } + public string ItemId { get; } + public int OutputIndex { get; } + public new static explicit operator StreamingResponseTextAnnotationUpdate(ClientResult result); + public static implicit operator BinaryContent(StreamingResponseTextAnnotationUpdate streamingResponseTextAnnotationUpdate); + } + public class StreamingResponseUpdate : IJsonModel, IPersistableModel { + public StreamingResponseUpdateKind Kind { get; } + public static explicit operator StreamingResponseUpdate(ClientResult result); + public static implicit operator BinaryContent(StreamingResponseUpdate streamingResponseUpdate); + } + public readonly partial struct StreamingResponseUpdateKind : IEquatable { + public StreamingResponseUpdateKind(string value); + public static StreamingResponseUpdateKind Error { get; } + public static StreamingResponseUpdateKind ResponseCompleted { get; } + public static StreamingResponseUpdateKind ResponseContentPartAdded { get; } + public static StreamingResponseUpdateKind ResponseContentPartDone { get; } + public static StreamingResponseUpdateKind ResponseCreated { get; } + public static StreamingResponseUpdateKind ResponseFailed { get; } + public static StreamingResponseUpdateKind ResponseFileSearchCallCompleted { get; } + public static StreamingResponseUpdateKind ResponseFileSearchCallInProgress { get; } + public static StreamingResponseUpdateKind ResponseFileSearchCallSearching { get; } + public static StreamingResponseUpdateKind ResponseFunctionCallArgumentsDelta { get; } + public static StreamingResponseUpdateKind ResponseFunctionCallArgumentsDone { get; } + public static StreamingResponseUpdateKind ResponseIncomplete { get; } + public static StreamingResponseUpdateKind ResponseInProgress { get; } + public static StreamingResponseUpdateKind ResponseOutputItemAdded { get; } + public static StreamingResponseUpdateKind ResponseOutputItemDone { get; } + public static StreamingResponseUpdateKind ResponseOutputTextAnnotationAdded { get; } + public static StreamingResponseUpdateKind ResponseOutputTextDelta { get; } + public static StreamingResponseUpdateKind ResponseOutputTextDone { get; } + public static StreamingResponseUpdateKind ResponseRefusalDelta { get; } + public static StreamingResponseUpdateKind ResponseRefusalDone { get; } + public static StreamingResponseUpdateKind ResponseWebSearchCallCompleted { get; } + public static StreamingResponseUpdateKind ResponseWebSearchCallInProgress { get; } + public static StreamingResponseUpdateKind ResponseWebSearchCallSearching { get; } + public readonly bool Equals(StreamingResponseUpdateKind other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(StreamingResponseUpdateKind left, StreamingResponseUpdateKind right); + public static implicit operator StreamingResponseUpdateKind(string value); + public static bool operator !=(StreamingResponseUpdateKind left, StreamingResponseUpdateKind right); + public override readonly string ToString(); + } + public class StreamingResponseWebSearchCallUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public string OutputItemId { get; } + public int OutputItemIndex { get; } + } + public class WebSearchCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public WebSearchCallResponseItem(string id); + public WebSearchCallStatus Status { get; } + public new static explicit operator WebSearchCallResponseItem(ClientResult result); + public static implicit operator BinaryContent(WebSearchCallResponseItem webSearchCallResponseItem); + } + 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); + [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 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); + } +} namespace OpenAI.VectorStores { [Experimental("OPENAI001")] public class AddFileToVectorStoreOperation : OperationResult { @@ -3072,6 +3733,7 @@ public class VectorStoreExpirationPolicy : IJsonModel, IPersistableModel { + public IDictionary Attributes { get; } public FileChunkingStrategy ChunkingStrategy { get; } public DateTimeOffset CreatedAt { get; } public string FileId { get; } diff --git a/api/OpenAI.netstandard2.0.cs b/api/OpenAI.netstandard2.0.cs index 52b1d8263..e1e5cd624 100644 --- a/api/OpenAI.netstandard2.0.cs +++ b/api/OpenAI.netstandard2.0.cs @@ -16,6 +16,8 @@ public class OpenAIClient { 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 VectorStoreClient GetVectorStoreClient(); } @@ -254,7 +256,7 @@ public class AssistantModificationOptions : IJsonModel, IEquatable, IJsonModel, IPersistableModel { + public class AssistantResponseFormat : IEquatable, IEquatable, IJsonModel, IPersistableModel { public static AssistantResponseFormat Auto { get; } public static AssistantResponseFormat JsonObject { get; } public static AssistantResponseFormat Text { get; } @@ -702,7 +704,7 @@ public class RunStepTokenUsage : IJsonModel, IPersistableMode public static explicit operator RunStepTokenUsage(ClientResult result); public static implicit operator BinaryContent(RunStepTokenUsage runStepTokenUsage); } - public abstract class RunStepToolCall : IJsonModel, IPersistableModel { + public class RunStepToolCall : IJsonModel, IPersistableModel { public string CodeInterpreterInput { get; } public IReadOnlyList CodeInterpreterOutputs { get; } public FileSearchRankingOptions FileSearchRankingOptions { get; } @@ -722,7 +724,7 @@ public enum RunStepToolCallKind { } public class RunStepUpdate : StreamingUpdate { } - public abstract class RunStepUpdateCodeInterpreterOutput : IJsonModel, IPersistableModel { + public class RunStepUpdateCodeInterpreterOutput : IJsonModel, IPersistableModel { public string ImageFileId { get; } public string Logs { get; } public int OutputIndex { get; } @@ -1163,6 +1165,7 @@ public class ChatClient { public virtual AsyncCollectionResult CompleteChatStreamingAsync(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); } public class ChatCompletion : IJsonModel, IPersistableModel { + public IReadOnlyList Annotations { get; } public ChatMessageContent Content { get; } public IReadOnlyList ContentTokenLogProbabilities { get; } public DateTimeOffset CreatedAt { get; } @@ -1207,6 +1210,7 @@ public class ChatCompletionOptions : IJsonModel, IPersist public IList Tools { get; } 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); } @@ -1304,6 +1308,14 @@ public class ChatMessage : IJsonModel, IPersistableModel, 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); + } public class ChatMessageContent : ObjectModel.Collection { public ChatMessageContent(); public ChatMessageContent(params ChatMessageContentPart[] contentParts); @@ -1493,6 +1505,10 @@ public class ChatToolChoice : IJsonModel, IPersistableModel, IPersistableModel { + public static explicit operator ChatWebSearchOptions(ClientResult result); + public static implicit operator BinaryContent(ChatWebSearchOptions chatWebSearchOptions); + } public class DeveloperChatMessage : ChatMessage, IJsonModel, IPersistableModel { public DeveloperChatMessage(params ChatMessageContentPart[] contentParts); public DeveloperChatMessage(IEnumerable contentParts); @@ -1509,10 +1525,11 @@ public class FunctionChatMessage : ChatMessage, IJsonModel, public static implicit operator BinaryContent(FunctionChatMessage functionChatMessage); } 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); + 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); + public static ChatMessageAnnotation ChatMessageAnnotation(int startIndex = 0, int endIndex = 0, Uri webResourceUri = null, string webResourceTitle = null); public static ChatOutputAudio ChatOutputAudio(BinaryData audioBytes, string id = null, string transcript = null, DateTimeOffset expiresAt = default); public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount = 0, int audioTokenCount = 0, int acceptedPredictionTokenCount = 0, int rejectedPredictionTokenCount = 0); [EditorBrowsable(EditorBrowsableState.Never)] @@ -1663,7 +1680,8 @@ public enum FilePurpose { BatchOutput = 3, FineTune = 4, FineTuneResults = 5, - Vision = 6 + Vision = 6, + UserData = 7 } [Obsolete("This struct 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 enum FileStatus { @@ -1675,7 +1693,9 @@ public enum FileStatus { public FileUploadPurpose(string value); public static FileUploadPurpose Assistants { get; } public static FileUploadPurpose Batch { get; } + public static FileUploadPurpose Evaluations { get; } public static FileUploadPurpose FineTune { get; } + public static FileUploadPurpose UserData { get; } public static FileUploadPurpose Vision { get; } public readonly bool Equals(FileUploadPurpose other); [EditorBrowsable(EditorBrowsableState.Never)] @@ -1689,6 +1709,7 @@ public enum FileStatus { } public class OpenAIFile : IJsonModel, IPersistableModel { public DateTimeOffset CreatedAt { get; } + public DateTimeOffset? ExpiresAt { get; } public string Filename { get; } public string Id { get; } public FilePurpose Purpose { get; } @@ -1759,7 +1780,9 @@ public class OpenAIFileCollection : ObjectModel.ReadOnlyCollection, 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); + 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); + [EditorBrowsable(EditorBrowsableState.Never)] + public static OpenAIFile OpenAIFileInfo(string id, int? sizeInBytes, DateTimeOffset createdAt, string filename, FilePurpose purpose, FileStatus status, string statusDetails); } } namespace OpenAI.FineTuning { @@ -2068,7 +2091,7 @@ public enum ConversationContentModalities { Text = 1, Audio = 2 } - public abstract class ConversationContentPart : IJsonModel, IPersistableModel { + public class ConversationContentPart : IJsonModel, IPersistableModel { public string AudioTranscript { get; } public string Text { get; } public static ConversationContentPart CreateInputAudioTranscriptPart(string transcript = null); @@ -2178,7 +2201,7 @@ public class ConversationInputTranscriptionOptions : IJsonModel, IPersistableModel { + public class ConversationItem : IJsonModel, IPersistableModel { public string FunctionArguments { get; } public string FunctionCallId { get; } public string FunctionName { get; } @@ -2515,14 +2538,14 @@ public enum ConversationTurnDetectionKind { ServerVoiceActivityDetection = 0, Disabled = 1 } - public abstract class ConversationTurnDetectionOptions : IJsonModel, IPersistableModel { + 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 abstract class ConversationUpdate : IJsonModel, IPersistableModel { + public class ConversationUpdate : IJsonModel, IPersistableModel { public string EventId { get; } public ConversationUpdateKind Kind { get; protected internal set; } public BinaryData GetRawContent(); @@ -2652,6 +2675,638 @@ public class RealtimeConversationSession : IDisposable { public override readonly string ToString(); } } +namespace OpenAI.Responses { + public class ComputerCallAction : IJsonModel, IPersistableModel { + public Drawing.Point? ClickCoordinates { get; } + public ComputerCallActionMouseButton? ClickMouseButton { get; } + public Drawing.Point? DoubleClickCoordinates { get; } + public IList DragPath { get; } + public IList KeyPressKeyCodes { get; } + public ComputerCallActionKind Kind { get; } + public Drawing.Point? MoveCoordinates { get; } + public Drawing.Point? ScrollCoordinates { get; } + public int? ScrollHorizontalOffset { get; } + public int? ScrollVerticalOffset { get; } + public string TypeText { get; } + public static ComputerCallAction CreateClickAction(Drawing.Point clickCoordinates, ComputerCallActionMouseButton clickMouseButton); + public static ComputerCallAction CreateDoubleClickAction(Drawing.Point doubleClickCoordinates, ComputerCallActionMouseButton doubleClickMouseButton); + public static ComputerCallAction CreateDragAction(IList dragPath); + public static ComputerCallAction CreateKeyPressAction(IList keyCodes); + public static ComputerCallAction CreateMoveAction(Drawing.Point moveCoordinates); + public static ComputerCallAction CreateScreenshotAction(); + 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); + } + public enum ComputerCallActionKind { + Click = 0, + DoubleClick = 1, + Drag = 2, + KeyPress = 3, + Move = 4, + Screenshot = 5, + Scroll = 6, + Type = 7, + Wait = 8 + } + public enum ComputerCallActionMouseButton { + Left = 0, + Right = 1, + Wheel = 2, + Back = 3, + 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 ComputerCallOutputStatus? Status { get; } + public new static explicit operator ComputerCallOutputResponseItem(ClientResult result); + public static implicit operator BinaryContent(ComputerCallOutputResponseItem computerCallOutputResponseItem); + } + public enum ComputerCallOutputStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + public class ComputerCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public ComputerCallResponseItem(string id, string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks); + public ComputerCallAction Action { get; set; } + public string CallId { get; set; } + public IList PendingSafetyChecks { get; } + public ComputerCallStatus Status { get; } + public new static explicit operator ComputerCallResponseItem(ClientResult result); + public static implicit operator BinaryContent(ComputerCallResponseItem computerCallResponseItem); + } + 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); + } + public enum ComputerCallStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + public class ComputerOutput : IJsonModel, IPersistableModel { + public static ComputerOutput CreateScreenshotOutput(BinaryData screenshotImageBytes, string screenshotImageBytesMediaType); + public static ComputerOutput CreateScreenshotOutput(string screenshotImageFileId); + public static ComputerOutput CreateScreenshotOutput(Uri screenshotImageUri); + public static explicit operator ComputerOutput(ClientResult result); + public static implicit operator BinaryContent(ComputerOutput computerOutput); + } + public readonly partial struct ComputerToolEnvironment : IEquatable { + public ComputerToolEnvironment(string value); + public static ComputerToolEnvironment Browser { get; } + public static ComputerToolEnvironment Mac { get; } + public static ComputerToolEnvironment Ubuntu { get; } + public static ComputerToolEnvironment Windows { get; } + public readonly bool Equals(ComputerToolEnvironment other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ComputerToolEnvironment left, ComputerToolEnvironment right); + public static implicit operator ComputerToolEnvironment(string value); + public static bool operator !=(ComputerToolEnvironment left, ComputerToolEnvironment right); + public override readonly string ToString(); + } + public class FileSearchCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public FileSearchCallResponseItem(string id, 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 class FileSearchCallResult : IJsonModel, IPersistableModel { + public IDictionary 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); + } + public enum FileSearchCallStatus { + InProgress = 0, + Searching = 1, + Completed = 2, + Incomplete = 3, + Failed = 4 + } + public readonly partial struct FileSearchToolRanker : IEquatable { + public FileSearchToolRanker(string value); + public static FileSearchToolRanker Auto { get; } + public static FileSearchToolRanker Default20241115 { get; } + public readonly bool Equals(FileSearchToolRanker other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(FileSearchToolRanker left, FileSearchToolRanker right); + public static implicit operator FileSearchToolRanker(string value); + public static bool operator !=(FileSearchToolRanker left, FileSearchToolRanker right); + public override readonly string ToString(); + } + 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); + } + public class FunctionCallOutputResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public FunctionCallOutputResponseItem(string callId, string functionOutput); + public string CallId { get; set; } + public string FunctionOutput { get; set; } + public FunctionCallOutputStatus? Status { get; } + public new static explicit operator FunctionCallOutputResponseItem(ClientResult result); + public static implicit operator BinaryContent(FunctionCallOutputResponseItem functionCallOutputResponseItem); + } + public enum FunctionCallOutputStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + public class FunctionCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public FunctionCallResponseItem(string id, string callId, string functionName, BinaryData functionArguments); + public string CallId { get; set; } + 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); + } + public enum FunctionCallStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + public class MessageResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public MessageResponseItem(MessageRole role); + 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); + } + public readonly partial struct MessageRole : IEquatable { + public MessageRole(string value); + public static MessageRole Assistant { get; } + public static MessageRole Developer { get; } + public static MessageRole System { get; } + public static MessageRole User { get; } + public readonly bool Equals(MessageRole other); + [EditorBrowsable(global::EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(global::EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(MessageRole left, MessageRole right); + public static implicit operator MessageRole(string value); + public static bool operator !=(MessageRole left, MessageRole right); + public override readonly string ToString(); + } + public enum MessageStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + public class OpenAIResponse : IJsonModel, IPersistableModel { + public bool AllowParallelToolCalls { get; } + public DateTimeOffset CreatedAt { get; } + public string EndUserId { get; } + public ResponseError Error { get; } + public string Id { get; } + public ResponseIncompleteStatusDetails IncompleteStatusDetails { get; } + public string Instructions { get; } + public int? MaxOutputTokenCount { get; } + public IDictionary Metadata { get; } + public string Model { get; } + public IList OutputItems { get; } + public string PreviousResponseId { get; } + public ResponseReasoningOptions ReasoningOptions { get; } + public ResponseStatus? Status { get; } + public float Temperature { get; } + public ResponseTextOptions TextOptions { get; } + public BinaryData ToolChoice { get; } + public IList Tools { get; } + public float TopP { get; } + public ResponseTruncationMode? TruncationMode { get; } + public ResponseTokenUsage Usage { get; } + public static explicit operator OpenAIResponse(ClientResult result); + public static implicit operator BinaryContent(OpenAIResponse openAIResponse); + } + public class OpenAIResponseClient { + protected OpenAIResponseClient(); + protected internal OpenAIResponseClient(ClientPipeline pipeline, string model, OpenAIClientOptions options); + public OpenAIResponseClient(string model, ApiKeyCredential credential, OpenAIClientOptions options); + public OpenAIResponseClient(string model, ApiKeyCredential credential); + public OpenAIResponseClient(string model, string apiKey); + public ClientPipeline Pipeline { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CreateResponse(BinaryContent content, RequestOptions options = null); + public virtual ClientResult CreateResponse(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult CreateResponse(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CreateResponseAsync(BinaryContent content, RequestOptions options = null); + public virtual Task> CreateResponseAsync(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> CreateResponseAsync(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult CreateResponseStreaming(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult CreateResponseStreaming(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult CreateResponseStreamingAsync(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult CreateResponseStreamingAsync(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult DeleteResponse(string responseId, RequestOptions options); + public virtual ClientResult DeleteResponse(string responseId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + 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, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetResponseAsync(string responseId, 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)] + public virtual CollectionResult GetResponseInputItems(string responseId, int? limit, string order, string after, string before, RequestOptions options = null); + 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 class ReasoningResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public ReasoningResponseItem(string id, IEnumerable summaryTextParts); + public ReasoningStatus? Status { get; } + public IReadOnlyList SummaryTextParts { get; } + public new static explicit operator ReasoningResponseItem(ClientResult result); + public static implicit operator BinaryContent(ReasoningResponseItem reasoningResponseItem); + } + public enum ReasoningStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2 + } + 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); + } + public class ResponseContentPart : IJsonModel, IPersistableModel { + public BinaryData InputFileBytes { get; } + public string InputFileId { get; } + public string InputFilename { get; } + public ResponseImageDetailLevel? InputImageDetailLevel { get; } + public string InputImageFileId { get; } + public ResponseContentPartKind Kind { get; } + 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 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); + } + public enum ResponseContentPartKind { + InputText = 0, + InputImage = 1, + InputFile = 2, + OutputText = 3, + Refusal = 4 + } + public class ResponseCreationOptions : IJsonModel, IPersistableModel { + public bool? AllowParallelToolCalls { get; set; } + public string EndUserId { get; set; } + public string Instructions { get; set; } + public int? MaxOutputTokenCount { get; set; } + public IDictionary Metadata { get; } + public string PreviousResponseId { get; set; } + public ResponseReasoningOptions ReasoningOptions { get; set; } + public bool? StoredOutputEnabled { get; set; } + public float? Temperature { get; set; } + public ResponseTextOptions TextOptions { get; set; } + public BinaryData ToolChoice { get; set; } + public IList Tools { get; set; } + public float? TopP { get; set; } + public ResponseTruncationMode? TruncationMode { get; set; } + public static explicit operator ResponseCreationOptions(ClientResult result); + public static implicit operator BinaryContent(ResponseCreationOptions responseCreationOptions); + } + 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); + } + public class ResponseError : IJsonModel, IPersistableModel { + public string Code { get; } + public string Message { get; } + public static explicit operator ResponseError(ClientResult result); + public static implicit operator BinaryContent(ResponseError responseError); + } + public readonly partial struct ResponseImageDetailLevel : IEquatable { + public ResponseImageDetailLevel(string value); + public static ResponseImageDetailLevel Auto { get; } + public static ResponseImageDetailLevel High { get; } + public static ResponseImageDetailLevel Low { get; } + public readonly bool Equals(ResponseImageDetailLevel other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseImageDetailLevel left, ResponseImageDetailLevel right); + public static implicit operator ResponseImageDetailLevel(string value); + public static bool operator !=(ResponseImageDetailLevel left, ResponseImageDetailLevel right); + public override readonly string ToString(); + } + public class ResponseIncompleteStatusDetails : IJsonModel, IPersistableModel { + public ResponseIncompleteStatusReason? Reason { get; } + public static explicit operator ResponseIncompleteStatusDetails(ClientResult result); + public static implicit operator BinaryContent(ResponseIncompleteStatusDetails responseIncompleteStatusDetails); + } + public readonly partial struct ResponseIncompleteStatusReason : IEquatable { + public ResponseIncompleteStatusReason(string value); + public static ResponseIncompleteStatusReason ContentFilter { get; } + public static ResponseIncompleteStatusReason MaxOutputTokens { get; } + public readonly bool Equals(ResponseIncompleteStatusReason other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseIncompleteStatusReason left, ResponseIncompleteStatusReason right); + public static implicit operator ResponseIncompleteStatusReason(string value); + public static bool operator !=(ResponseIncompleteStatusReason left, ResponseIncompleteStatusReason right); + public override readonly string ToString(); + } + public class ResponseItem : IJsonModel, IPersistableModel { + public string Id { get; } + public static MessageResponseItem CreateAssistantMessageItem(string id, string content); + public static ResponseItem CreateComputerCallItem(string id, 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 MessageResponseItem CreateDeveloperMessageItem(string content); + public static FileSearchCallResponseItem CreateFileSearchCallResponseItem(string id, IEnumerable queries, IEnumerable results); + public static FunctionCallResponseItem CreateFunctionCall(string id, string callId, string functionName, BinaryData functionArguments); + public static FunctionCallOutputResponseItem CreateFunctionCallOutputItem(string callId, string functionOutput); + public static ReasoningResponseItem CreateReasoningItem(string id, IEnumerable summaryTextParts); + public static ReferenceResponseItem CreateReferenceItem(string id); + public static MessageResponseItem CreateSystemMessageItem(string content); + public static MessageResponseItem CreateUserMessageItem(IEnumerable contentParts); + public static MessageResponseItem CreateUserMessageItem(string content); + public static WebSearchCallResponseItem CreateWebSearchCallItem(string id); + public static explicit operator ResponseItem(ClientResult result); + public static implicit operator BinaryContent(ResponseItem responseItem); + } + public class ResponseItemCollectionOptions { + public string AfterId { get; set; } + public string BeforeId { get; set; } + public ResponseItemCollectionOrder? Order { get; set; } + public int? PageSizeLimit { get; set; } + } + public readonly partial struct ResponseItemCollectionOrder : IEquatable { + public ResponseItemCollectionOrder(string value); + public static ResponseItemCollectionOrder Ascending { get; } + public static ResponseItemCollectionOrder Descending { get; } + public readonly bool Equals(ResponseItemCollectionOrder other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseItemCollectionOrder left, ResponseItemCollectionOrder right); + public static implicit operator ResponseItemCollectionOrder(string value); + public static bool operator !=(ResponseItemCollectionOrder left, ResponseItemCollectionOrder right); + public override readonly string ToString(); + } + public class ResponseMessageAnnotation : IJsonModel, IPersistableModel { + public string FileCitationFileId { get; } + public int? FileCitationIndex { get; } + public string FilePathFileId { get; } + public int? FilePathIndex { get; } + public ResponseMessageAnnotationKind Kind { get; } + 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 enum ResponseMessageAnnotationKind { + FileCitation = 0, + UriCitation = 1, + FilePath = 2 + } + public class ResponseOutputTokenUsageDetails : IJsonModel, IPersistableModel { + public int ReasoningTokenCount { get; } + public static explicit operator ResponseOutputTokenUsageDetails(ClientResult result); + public static implicit operator BinaryContent(ResponseOutputTokenUsageDetails responseOutputTokenUsageDetails); + } + public readonly partial struct ResponseReasoningEffortLevel : IEquatable { + public ResponseReasoningEffortLevel(string value); + public static ResponseReasoningEffortLevel High { get; } + public static ResponseReasoningEffortLevel Low { get; } + public static ResponseReasoningEffortLevel Medium { get; } + public readonly bool Equals(ResponseReasoningEffortLevel other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseReasoningEffortLevel left, ResponseReasoningEffortLevel right); + public static implicit operator ResponseReasoningEffortLevel(string value); + public static bool operator !=(ResponseReasoningEffortLevel left, ResponseReasoningEffortLevel right); + public override readonly string ToString(); + } + public class ResponseReasoningOptions : 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); + } + public readonly partial struct ResponseReasoningSummaryVerbosity : IEquatable { + public ResponseReasoningSummaryVerbosity(string value); + public static ResponseReasoningSummaryVerbosity Concise { get; } + public static ResponseReasoningSummaryVerbosity Detailed { get; } + public readonly bool Equals(ResponseReasoningSummaryVerbosity other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseReasoningSummaryVerbosity left, ResponseReasoningSummaryVerbosity right); + public static implicit operator ResponseReasoningSummaryVerbosity(string value); + public static bool operator !=(ResponseReasoningSummaryVerbosity left, ResponseReasoningSummaryVerbosity right); + public override readonly string ToString(); + } + public enum ResponseStatus { + InProgress = 0, + Completed = 1, + Incomplete = 2, + Failed = 3 + } + public class ResponseTextFormat : IJsonModel, IPersistableModel { + 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); + } + public class ResponseTextOptions : IJsonModel, IPersistableModel { + public ResponseTextFormat ResponseFormat { get; set; } + public static explicit operator ResponseTextOptions(ClientResult result); + public static implicit operator BinaryContent(ResponseTextOptions responseTextOptions); + } + public class ResponseTokenUsage : IJsonModel, IPersistableModel { + public int InputTokenCount { 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); + } + public class ResponseTool : IJsonModel, IPersistableModel { + public static ResponseTool CreateComputerTool(int displayWidth, int displayHeight, ComputerToolEnvironment environment); + 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 readonly partial struct ResponseTruncationMode : IEquatable { + public ResponseTruncationMode(string value); + public static ResponseTruncationMode Auto { get; } + public static ResponseTruncationMode Disabled { get; } + public readonly bool Equals(ResponseTruncationMode other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseTruncationMode left, ResponseTruncationMode right); + public static implicit operator ResponseTruncationMode(string value); + public static bool operator !=(ResponseTruncationMode left, ResponseTruncationMode right); + public override readonly string ToString(); + } + public class StreamingResponseContentPartDeltaUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public int ContentPartIndex { get; } + public string FunctionArguments { get; } + public string ItemId { get; } + public int ItemIndex { get; } + public string Refusal { get; } + public string Text { get; } + } + 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); + } + public class StreamingResponseFileSearchCallUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public string OutputItemId { get; } + public int OutputItemIndex { get; } + } + public class StreamingResponseItemUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public ResponseItem Item { get; } + public int ItemIndex { get; } + } + public class StreamingResponseStatusUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public OpenAIResponse Response { get; } + } + public class StreamingResponseTextAnnotationUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public ResponseMessageAnnotation Annotation { get; } + public int ContentIndex { get; } + public string ItemId { get; } + public int OutputIndex { get; } + public new static explicit operator StreamingResponseTextAnnotationUpdate(ClientResult result); + public static implicit operator BinaryContent(StreamingResponseTextAnnotationUpdate streamingResponseTextAnnotationUpdate); + } + public class StreamingResponseUpdate : IJsonModel, IPersistableModel { + public StreamingResponseUpdateKind Kind { get; } + public static explicit operator StreamingResponseUpdate(ClientResult result); + public static implicit operator BinaryContent(StreamingResponseUpdate streamingResponseUpdate); + } + public readonly partial struct StreamingResponseUpdateKind : IEquatable { + public StreamingResponseUpdateKind(string value); + public static StreamingResponseUpdateKind Error { get; } + public static StreamingResponseUpdateKind ResponseCompleted { get; } + public static StreamingResponseUpdateKind ResponseContentPartAdded { get; } + public static StreamingResponseUpdateKind ResponseContentPartDone { get; } + public static StreamingResponseUpdateKind ResponseCreated { get; } + public static StreamingResponseUpdateKind ResponseFailed { get; } + public static StreamingResponseUpdateKind ResponseFileSearchCallCompleted { get; } + public static StreamingResponseUpdateKind ResponseFileSearchCallInProgress { get; } + public static StreamingResponseUpdateKind ResponseFileSearchCallSearching { get; } + public static StreamingResponseUpdateKind ResponseFunctionCallArgumentsDelta { get; } + public static StreamingResponseUpdateKind ResponseFunctionCallArgumentsDone { get; } + public static StreamingResponseUpdateKind ResponseIncomplete { get; } + public static StreamingResponseUpdateKind ResponseInProgress { get; } + public static StreamingResponseUpdateKind ResponseOutputItemAdded { get; } + public static StreamingResponseUpdateKind ResponseOutputItemDone { get; } + public static StreamingResponseUpdateKind ResponseOutputTextAnnotationAdded { get; } + public static StreamingResponseUpdateKind ResponseOutputTextDelta { get; } + public static StreamingResponseUpdateKind ResponseOutputTextDone { get; } + public static StreamingResponseUpdateKind ResponseRefusalDelta { get; } + public static StreamingResponseUpdateKind ResponseRefusalDone { get; } + public static StreamingResponseUpdateKind ResponseWebSearchCallCompleted { get; } + public static StreamingResponseUpdateKind ResponseWebSearchCallInProgress { get; } + public static StreamingResponseUpdateKind ResponseWebSearchCallSearching { get; } + public readonly bool Equals(StreamingResponseUpdateKind other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(StreamingResponseUpdateKind left, StreamingResponseUpdateKind right); + public static implicit operator StreamingResponseUpdateKind(string value); + public static bool operator !=(StreamingResponseUpdateKind left, StreamingResponseUpdateKind right); + public override readonly string ToString(); + } + public class StreamingResponseWebSearchCallUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public string OutputItemId { get; } + public int OutputItemIndex { get; } + } + public class WebSearchCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { + public WebSearchCallResponseItem(string id); + public WebSearchCallStatus Status { get; } + public new static explicit operator WebSearchCallResponseItem(ClientResult result); + public static implicit operator BinaryContent(WebSearchCallResponseItem webSearchCallResponseItem); + } + 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); + [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 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); + } +} namespace OpenAI.VectorStores { public class AddFileToVectorStoreOperation : OperationResult { public string FileId { get; } @@ -2901,6 +3556,7 @@ public class VectorStoreExpirationPolicy : IJsonModel, IPersistableModel { + public IDictionary Attributes { get; } public FileChunkingStrategy ChunkingStrategy { get; } public DateTimeOffset CreatedAt { get; } public string FileId { get; } diff --git a/examples/Responses/Example01_CuaFlow.cs b/examples/Responses/Example01_CuaFlow.cs new file mode 100644 index 000000000..f3e90da28 --- /dev/null +++ b/examples/Responses/Example01_CuaFlow.cs @@ -0,0 +1,45 @@ +using NUnit.Framework; +using OpenAI.Responses; +using System; +using System.ClientModel; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; + +namespace OpenAI.Examples; + +#pragma warning disable OPENAICUA001 + +public partial class ResponsesExamples +{ + [Test] + public async Task Example01_CuaFlow() + { + OpenAIResponseClient client = new( + model: "computer-use-preview", + credential: new ApiKeyCredential(Environment.GetEnvironmentVariable("OPENAI_API_KEY"))); + + OpenAIResponse response = await client.CreateResponseAsync( + [ResponseItem.CreateUserMessageItem("Click on the OK button")], + new ResponseCreationOptions() + { + Tools = { ResponseTool.CreateComputerTool(1024, 768, ComputerToolEnvironment.Windows) }, + }); + + if (response.OutputItems.FirstOrDefault() is ComputerCallResponseItem computerCall) + { + if (computerCall.Action.Kind == ComputerCallActionKind.Screenshot) + { + Uri screenshotLink = new("https://uxmovement.com/wp-content/uploads/2011/05/left-to-right-mapping.png"); + + response = await client.CreateResponseAsync( + [ResponseItem.CreateComputerCallOutputItem(computerCall.Id, [], screenshotLink)]); + } + else if (computerCall.Action.Kind == ComputerCallActionKind.Click) + { + Console.WriteLine($"Instruction from model: click"); + } + } + } +} diff --git a/src/Custom/Administration/Internal/GeneratorStubs.cs b/src/Custom/Administration/Internal/GeneratorStubs.cs index 7ed945616..3227e60df 100644 --- a/src/Custom/Administration/Internal/GeneratorStubs.cs +++ b/src/Custom/Administration/Internal/GeneratorStubs.cs @@ -1,36 +1,36 @@ namespace OpenAI.Administration; -[CodeGenModel("AuditLogActorServiceAccount")] internal partial class InternalAuditLogActorServiceAccount { } -[CodeGenModel("AuditLogActorUser")] internal partial class InternalAuditLogActorUser { } -[CodeGenModel("AuditLogActorApiKey")] internal partial class InternalAuditLogActorApiKey { } -[CodeGenModel("AuditLogActorSession")] internal partial class InternalAuditLogActorSession { } -[CodeGenModel("AuditLogActor")] internal partial class InternalAuditLogActor { } -[CodeGenModel("AuditLog")] internal partial class InternalAuditLog { } -[CodeGenModel("ListAuditLogsResponse")] internal partial class InternalListAuditLogsResponse { } -[CodeGenModel("Invite")] internal partial class InternalInvite { } -[CodeGenModel("InviteListResponse")] internal partial class InternalInviteListResponse { } -[CodeGenModel("InviteRequest")] internal partial class InternalInviteRequest { } -[CodeGenModel("InviteDeleteResponse")] internal partial class InternalInviteDeleteResponse { } -[CodeGenModel("User")] internal partial class InternalUser { } -[CodeGenModel("UserListResponse")] internal partial class InternalUserListResponse { } -[CodeGenModel("UserRoleUpdateRequest")] internal partial class InternalUserRoleUpdateRequest { } -[CodeGenModel("UserDeleteResponse")] internal partial class InternalUserDeleteResponse { } -[CodeGenModel("Project")] internal partial class InternalProject { } -[CodeGenModel("ProjectListResponse")] internal partial class InternalProjectListResponse { } -[CodeGenModel("ProjectCreateRequest")] internal partial class InternalProjectCreateRequest { } -[CodeGenModel("ProjectUpdateRequest")] internal partial class InternalProjectUpdateRequest { } -[CodeGenModel("DefaultProjectErrorResponse")] internal partial class InternalDefaultProjectErrorResponse { } -[CodeGenModel("ProjectUser")] internal partial class InternalProjectUser { } -[CodeGenModel("ProjectUserListResponse")] internal partial class InternalProjectUserListResponse { } -[CodeGenModel("ProjectUserCreateRequest")] internal partial class InternalProjectUserCreateRequest { } -[CodeGenModel("ProjectUserUpdateRequest")] internal partial class InternalProjectUserUpdateRequest { } -[CodeGenModel("ProjectUserDeleteResponse")] internal partial class InternalProjectUserDeleteResponse { } -[CodeGenModel("ProjectServiceAccount")] internal partial class InternalProjectServiceAccount { } -[CodeGenModel("ProjectServiceAccountListResponse")] internal partial class InternalProjectServiceAccountListResponse { } -[CodeGenModel("ProjectServiceAccountCreateRequest")] internal partial class InternalProjectServiceAccountCreateRequest { } -[CodeGenModel("ProjectServiceAccountCreateResponse")] internal partial class InternalProjectServiceAccountCreateResponse { } -[CodeGenModel("ProjectServiceAccountApiKey")] internal partial class InternalProjectServiceAccountApiKey { } -[CodeGenModel("ProjectServiceAccountDeleteResponse")] internal partial class InternalProjectServiceAccountDeleteResponse { } -[CodeGenModel("ProjectApiKey")] internal partial class InternalProjectApiKey { } -[CodeGenModel("ProjectApiKeyListResponse")] internal partial class InternalProjectApiKeyListResponse { } -[CodeGenModel("ProjectApiKeyDeleteResponse")] internal partial class InternalProjectApiKeyDeleteResponse { } +[CodeGenType("AuditLogActorServiceAccount")] internal partial class InternalAuditLogActorServiceAccount { } +[CodeGenType("AuditLogActorUser")] internal partial class InternalAuditLogActorUser { } +[CodeGenType("AuditLogActorApiKey")] internal partial class InternalAuditLogActorApiKey { } +[CodeGenType("AuditLogActorSession")] internal partial class InternalAuditLogActorSession { } +[CodeGenType("AuditLogActor")] internal partial class InternalAuditLogActor { } +[CodeGenType("AuditLog")] internal partial class InternalAuditLog { } +[CodeGenType("ListAuditLogsResponse")] internal partial class InternalListAuditLogsResponse { } +[CodeGenType("Invite")] internal partial class InternalInvite { } +[CodeGenType("InviteListResponse")] internal partial class InternalInviteListResponse { } +[CodeGenType("InviteRequest")] internal partial class InternalInviteRequest { } +[CodeGenType("InviteDeleteResponse")] internal partial class InternalInviteDeleteResponse { } +[CodeGenType("User")] internal partial class InternalUser { } +[CodeGenType("UserListResponse")] internal partial class InternalUserListResponse { } +[CodeGenType("UserRoleUpdateRequest")] internal partial class InternalUserRoleUpdateRequest { } +[CodeGenType("UserDeleteResponse")] internal partial class InternalUserDeleteResponse { } +[CodeGenType("Project")] internal partial class InternalProject { } +[CodeGenType("ProjectListResponse")] internal partial class InternalProjectListResponse { } +[CodeGenType("ProjectCreateRequest")] internal partial class InternalProjectCreateRequest { } +[CodeGenType("ProjectUpdateRequest")] internal partial class InternalProjectUpdateRequest { } +[CodeGenType("DefaultProjectErrorResponse")] internal partial class InternalDefaultProjectErrorResponse { } +[CodeGenType("ProjectUser")] internal partial class InternalProjectUser { } +[CodeGenType("ProjectUserListResponse")] internal partial class InternalProjectUserListResponse { } +[CodeGenType("ProjectUserCreateRequest")] internal partial class InternalProjectUserCreateRequest { } +[CodeGenType("ProjectUserUpdateRequest")] internal partial class InternalProjectUserUpdateRequest { } +[CodeGenType("ProjectUserDeleteResponse")] internal partial class InternalProjectUserDeleteResponse { } +[CodeGenType("ProjectServiceAccount")] internal partial class InternalProjectServiceAccount { } +[CodeGenType("ProjectServiceAccountListResponse")] internal partial class InternalProjectServiceAccountListResponse { } +[CodeGenType("ProjectServiceAccountCreateRequest")] internal partial class InternalProjectServiceAccountCreateRequest { } +[CodeGenType("ProjectServiceAccountCreateResponse")] internal partial class InternalProjectServiceAccountCreateResponse { } +[CodeGenType("ProjectServiceAccountApiKey")] internal partial class InternalProjectServiceAccountApiKey { } +[CodeGenType("ProjectServiceAccountDeleteResponse")] internal partial class InternalProjectServiceAccountDeleteResponse { } +[CodeGenType("ProjectApiKey")] internal partial class InternalProjectApiKey { } +[CodeGenType("ProjectApiKeyListResponse")] internal partial class InternalProjectApiKeyListResponse { } +[CodeGenType("ProjectApiKeyDeleteResponse")] internal partial class InternalProjectApiKeyDeleteResponse { } diff --git a/src/Custom/Assistants/Assistant.cs b/src/Custom/Assistants/Assistant.cs index db714f552..ba12c4a82 100644 --- a/src/Custom/Assistants/Assistant.cs +++ b/src/Custom/Assistants/Assistant.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("AssistantObject")] +[CodeGenType("AssistantObject")] public partial class Assistant { // CUSTOM: Made internal. diff --git a/src/Custom/Assistants/AssistantClient.cs b/src/Custom/Assistants/AssistantClient.cs index 408bcb7e0..4aee9923d 100644 --- a/src/Custom/Assistants/AssistantClient.cs +++ b/src/Custom/Assistants/AssistantClient.cs @@ -12,8 +12,8 @@ namespace OpenAI.Assistants; /// The service client for OpenAI assistants operations. [Experimental("OPENAI001")] -[CodeGenClient("Assistants")] -[CodeGenSuppress("AssistantClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[CodeGenType("Assistants")] +[CodeGenSuppress("AssistantClient", typeof(ClientPipeline), typeof(Uri))] [CodeGenSuppress("CreateAssistantAsync", typeof(AssistantCreationOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateAssistant", typeof(AssistantCreationOptions), typeof(CancellationToken))] [CodeGenSuppress("GetAssistantAsync", typeof(string))] @@ -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(AssistantCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListAssistants", typeof(int?), typeof(AssistantCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[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))] public partial class AssistantClient { private readonly InternalAssistantMessageClient _messageSubClient; @@ -725,11 +725,10 @@ public virtual AsyncCollectionResult CreateRunStreamingAsync( options.AssistantId = assistantId; options.Stream = true; - async Task sendRequestAsync() => - await CreateRunAsync(threadId, options, cancellationToken.ToRequestOptions(streaming: true)) - .ConfigureAwait(false); - - return new AsyncStreamingUpdateCollection(sendRequestAsync, cancellationToken); + return new AsyncSseUpdateCollection( + async () => await CreateRunAsync(threadId, options, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), + StreamingUpdate.FromSseItem, + cancellationToken); } /// @@ -753,8 +752,10 @@ public virtual CollectionResult CreateRunStreaming( options.AssistantId = assistantId; options.Stream = true; - ClientResult sendRequest() => CreateRun(threadId, options, cancellationToken.ToRequestOptions(streaming: true)); - return new StreamingUpdateCollection(sendRequest, cancellationToken); + return new SseUpdateCollection( + () => CreateRun(threadId, options, cancellationToken.ToRequestOptions(streaming: true)), + StreamingUpdate.FromSseItem, + cancellationToken); } /// @@ -818,11 +819,10 @@ public virtual AsyncCollectionResult CreateThreadAndRunStreamin runOptions.Stream = true; BinaryContent protocolContent = CreateThreadAndRunProtocolContent(assistantId, threadOptions, runOptions); - async Task sendRequestAsync() => - await CreateThreadAndRunAsync(protocolContent, cancellationToken.ToRequestOptions(streaming: true)) - .ConfigureAwait(false); - - return new AsyncStreamingUpdateCollection(sendRequestAsync, cancellationToken); + return new AsyncSseUpdateCollection( + async () => await CreateThreadAndRunAsync(protocolContent, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), + StreamingUpdate.FromSseItem, + cancellationToken); } /// @@ -844,8 +844,10 @@ public virtual CollectionResult CreateThreadAndRunStreaming( runOptions.Stream = true; BinaryContent protocolContent = CreateThreadAndRunProtocolContent(assistantId, threadOptions, runOptions); - ClientResult sendRequest() => CreateThreadAndRun(protocolContent, cancellationToken.ToRequestOptions(streaming: true)); - return new StreamingUpdateCollection(sendRequest, cancellationToken); + return new SseUpdateCollection( + () => CreateThreadAndRun(protocolContent, cancellationToken.ToRequestOptions(streaming: true)), + StreamingUpdate.FromSseItem, + cancellationToken); } /// @@ -1043,11 +1045,10 @@ public virtual AsyncCollectionResult SubmitToolOutputsToRunStre BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs.ToList(), stream: true, null); - async Task sendRequestAsync() => - await SubmitToolOutputsToRunAsync(threadId, runId, content, cancellationToken.ToRequestOptions(streaming: true)) - .ConfigureAwait(false); - - return new AsyncStreamingUpdateCollection(sendRequestAsync, cancellationToken); + return new AsyncSseUpdateCollection( + async () => await SubmitToolOutputsToRunAsync(threadId, runId, content, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), + StreamingUpdate.FromSseItem, + cancellationToken); } /// @@ -1070,8 +1071,10 @@ public virtual CollectionResult SubmitToolOutputsToRunStreaming BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs.ToList(), stream: true, null); - ClientResult sendRequest() => SubmitToolOutputsToRun(threadId, runId, content, cancellationToken.ToRequestOptions(streaming: true)); - return new StreamingUpdateCollection(sendRequest, cancellationToken); + return new SseUpdateCollection( + () => SubmitToolOutputsToRun(threadId, runId, content, cancellationToken.ToRequestOptions(streaming: true)), + StreamingUpdate.FromSseItem, + cancellationToken); } /// diff --git a/src/Custom/Assistants/AssistantCollectionOrder.cs b/src/Custom/Assistants/AssistantCollectionOrder.cs index 275d5d98d..a72909fac 100644 --- a/src/Custom/Assistants/AssistantCollectionOrder.cs +++ b/src/Custom/Assistants/AssistantCollectionOrder.cs @@ -1,17 +1,40 @@ -using System.Diagnostics.CodeAnalysis; +using System; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Assistants; -// CUSTOM: Renamed. [Experimental("OPENAI001")] -[CodeGenModel("ListAssistantsRequestOrder")] -public readonly partial struct AssistantCollectionOrder +public readonly partial struct AssistantCollectionOrder: IEquatable { - // CUSTOM: Renamed. - [CodeGenMember("Asc")] - public static AssistantCollectionOrder Ascending { get; } = new AssistantCollectionOrder(AscValue); + public static AssistantCollectionOrder Ascending { get; } = new AssistantCollectionOrder("asc"); - // CUSTOM: Renamed. - [CodeGenMember("Desc")] - public static AssistantCollectionOrder Descending { get; } = new AssistantCollectionOrder(DescValue); + public static AssistantCollectionOrder Descending { get; } = new AssistantCollectionOrder("desc"); + + private readonly string _value; + private const string AscValue = "asc"; + private const string DescValue = "desc"; + + public AssistantCollectionOrder(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static bool operator ==(AssistantCollectionOrder left, AssistantCollectionOrder right) => left.Equals(right); + + public static bool operator !=(AssistantCollectionOrder left, AssistantCollectionOrder right) => !left.Equals(right); + + public static implicit operator AssistantCollectionOrder(string value) => new AssistantCollectionOrder(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is AssistantCollectionOrder other && Equals(other); + + public bool Equals(AssistantCollectionOrder 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/Custom/Assistants/AssistantCreationOptions.cs b/src/Custom/Assistants/AssistantCreationOptions.cs index 1072600ce..461044410 100644 --- a/src/Custom/Assistants/AssistantCreationOptions.cs +++ b/src/Custom/Assistants/AssistantCreationOptions.cs @@ -1,3 +1,4 @@ +using OpenAI.Chat; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -7,7 +8,7 @@ namespace OpenAI.Assistants; /// Represents additional options available when creating a new . /// [Experimental("OPENAI001")] -[CodeGenModel("CreateAssistantRequest")] +[CodeGenType("CreateAssistantRequest")] [CodeGenSuppress(nameof(AssistantCreationOptions), typeof(string))] public partial class AssistantCreationOptions { @@ -39,11 +40,9 @@ public partial class AssistantCreationOptions [CodeGenMember("TopP")] public float? NucleusSamplingFactor { get; set; } - internal AssistantCreationOptions(InternalCreateAssistantRequestModel model) - : this() - { - Model = model.ToString(); - } + // CUSTOM: Made internal. + [CodeGenMember("ReasoningEffort")] + internal ChatReasoningEffortLevel? ReasoningEffortLevel { get; set; } /// /// Creates a new instance of . diff --git a/src/Custom/Assistants/AssistantDeletionResult.cs b/src/Custom/Assistants/AssistantDeletionResult.cs index 2dd2e16e6..cdec0e457 100644 --- a/src/Custom/Assistants/AssistantDeletionResult.cs +++ b/src/Custom/Assistants/AssistantDeletionResult.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("DeleteAssistantResponse")] +[CodeGenType("DeleteAssistantResponse")] public partial class AssistantDeletionResult { // CUSTOM: Renamed. diff --git a/src/Custom/Assistants/AssistantModificationOptions.cs b/src/Custom/Assistants/AssistantModificationOptions.cs index 295559878..2d69ce463 100644 --- a/src/Custom/Assistants/AssistantModificationOptions.cs +++ b/src/Custom/Assistants/AssistantModificationOptions.cs @@ -1,3 +1,4 @@ +using OpenAI.Chat; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -7,7 +8,7 @@ namespace OpenAI.Assistants; /// Represents additional options available when modifying an existing . /// [Experimental("OPENAI001")] -[CodeGenModel("ModifyAssistantRequest")] +[CodeGenType("ModifyAssistantRequest")] public partial class AssistantModificationOptions { /// @@ -42,4 +43,8 @@ public partial class AssistantModificationOptions /// [CodeGenMember("TopP")] public float? NucleusSamplingFactor { get; set; } + + // CUSTOM: Made internal. + [CodeGenMember("ReasoningEffort")] + internal ChatReasoningEffortLevel? ReasoningEffortLevel { get; set; } } diff --git a/src/Custom/Assistants/AssistantResponseFormat.cs b/src/Custom/Assistants/AssistantResponseFormat.cs index 68b9b33dc..c25bf8078 100644 --- a/src/Custom/Assistants/AssistantResponseFormat.cs +++ b/src/Custom/Assistants/AssistantResponseFormat.cs @@ -7,7 +7,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("AssistantResponseFormat")] +[CodeGenType("AssistantResponseFormat")] public partial class AssistantResponseFormat : IEquatable, IEquatable { public static AssistantResponseFormat Auto { get; } = CreateAutoFormat(); diff --git a/src/Custom/Assistants/AssistantThread.cs b/src/Custom/Assistants/AssistantThread.cs index ea5e65f72..d1c2b68c1 100644 --- a/src/Custom/Assistants/AssistantThread.cs +++ b/src/Custom/Assistants/AssistantThread.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("ThreadObject")] +[CodeGenType("ThreadObject")] public partial class AssistantThread { // CUSTOM: Made internal. diff --git a/src/Custom/Assistants/CodeInterpreterToolResources.cs b/src/Custom/Assistants/CodeInterpreterToolResources.cs index 5f80800f4..de3ecbe91 100644 --- a/src/Custom/Assistants/CodeInterpreterToolResources.cs +++ b/src/Custom/Assistants/CodeInterpreterToolResources.cs @@ -5,7 +5,7 @@ namespace OpenAI.Assistants; /// The AssistantObjectToolResourcesCodeInterpreter. [Experimental("OPENAI001")] -[CodeGenModel("AssistantObjectToolResourcesCodeInterpreter")] +[CodeGenType("AssistantObjectToolResourcesCodeInterpreter")] public partial class CodeInterpreterToolResources { private ChangeTrackingList _fileIds = new ChangeTrackingList(); diff --git a/src/Custom/Assistants/FileSearchRankingOptions.cs b/src/Custom/Assistants/FileSearchRankingOptions.cs index 210ffe204..8ae085dc2 100644 --- a/src/Custom/Assistants/FileSearchRankingOptions.cs +++ b/src/Custom/Assistants/FileSearchRankingOptions.cs @@ -5,7 +5,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("FileSearchRankingOptions")] +[CodeGenType("FileSearchRankingOptions")] [CodeGenSuppress(nameof(FileSearchRankingOptions), typeof(float))] [CodeGenSuppress(nameof(FileSearchRankingOptions), typeof(FileSearchRankingOptions), typeof(float), typeof(IDictionary))] public partial class FileSearchRankingOptions diff --git a/src/Custom/Assistants/FileSearchToolDefinition.cs b/src/Custom/Assistants/FileSearchToolDefinition.cs index 7bde340cf..8d333be3b 100644 --- a/src/Custom/Assistants/FileSearchToolDefinition.cs +++ b/src/Custom/Assistants/FileSearchToolDefinition.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("AssistantToolsFileSearch")] +[CodeGenType("AssistantToolsFileSearch")] [CodeGenSuppress(nameof(FileSearchToolDefinition))] public partial class FileSearchToolDefinition : ToolDefinition { diff --git a/src/Custom/Assistants/FileSearchToolResources.cs b/src/Custom/Assistants/FileSearchToolResources.cs index f85e5cf48..af56bbded 100644 --- a/src/Custom/Assistants/FileSearchToolResources.cs +++ b/src/Custom/Assistants/FileSearchToolResources.cs @@ -6,7 +6,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("ToolResourcesFileSearch")] +[CodeGenType("ToolResourcesFileSearch")] [CodeGenSerialization(nameof(NewVectorStores), "vector_stores", SerializationValueHook = nameof(SerializeNewVectorStores))] public partial class FileSearchToolResources { diff --git a/src/Custom/Assistants/FunctionToolDefinition.cs b/src/Custom/Assistants/FunctionToolDefinition.cs index 448cca2c4..2e8c2adfd 100644 --- a/src/Custom/Assistants/FunctionToolDefinition.cs +++ b/src/Custom/Assistants/FunctionToolDefinition.cs @@ -5,7 +5,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("AssistantToolsFunction")] +[CodeGenType("AssistantToolsFunction")] [CodeGenSuppress(nameof(FunctionToolDefinition), typeof(InternalFunctionDefinition))] public partial class FunctionToolDefinition : ToolDefinition { diff --git a/src/Custom/Assistants/GeneratorStubs.cs b/src/Custom/Assistants/GeneratorStubs.cs index 8afcfeb68..7b01cbb72 100644 --- a/src/Custom/Assistants/GeneratorStubs.cs +++ b/src/Custom/Assistants/GeneratorStubs.cs @@ -7,46 +7,46 @@ namespace OpenAI.Assistants; * that are not otherwise attributed elsewhere. */ [Experimental("OPENAI001")] -[CodeGenModel("AssistantToolsCode")] +[CodeGenType("AssistantToolsCode")] public partial class CodeInterpreterToolDefinition : ToolDefinition { } [Experimental("OPENAI001")] -[CodeGenModel("MessageObjectStatus")] +[CodeGenType("MessageObjectStatus")] public readonly partial struct MessageStatus { } [Experimental("OPENAI001")] -[CodeGenModel("MessageObjectIncompleteDetails")] +[CodeGenType("MessageObjectIncompleteDetails1")] public partial class MessageFailureDetails { } [Experimental("OPENAI001")] -[CodeGenModel("MessageObjectIncompleteDetailsReason")] +[CodeGenType("MessageObjectIncompleteDetailsReason")] public readonly partial struct MessageFailureReason { } [Experimental("OPENAI001")] -[CodeGenModel("RunObjectLastError")] +[CodeGenType("RunObjectLastError1")] public partial class RunError { } [Experimental("OPENAI001")] -[CodeGenModel("RunObjectLastErrorCode")] +[CodeGenType("RunObjectLastErrorCode")] public readonly partial struct RunErrorCode { } [Experimental("OPENAI001")] -[CodeGenModel("RunObjectIncompleteDetails")] +[CodeGenType("RunObjectIncompleteDetails1")] public partial class RunIncompleteDetails { } [Experimental("OPENAI001")] -[CodeGenModel("RunStepObjectStatus")] +[CodeGenType("RunStepObjectStatus")] public readonly partial struct RunStepStatus { } [Experimental("OPENAI001")] -[CodeGenModel("RunStepObjectLastError")] +[CodeGenType("RunStepObjectLastError1")] public partial class RunStepError { } [Experimental("OPENAI001")] -[CodeGenModel("RunStepObjectLastErrorCode")] +[CodeGenType("RunStepObjectLastErrorCode")] public readonly partial struct RunStepErrorCode { } [Experimental("OPENAI001")] -[CodeGenModel("RunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject")] +[CodeGenType("RunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject")] public partial class RunStepCodeInterpreterOutput { } diff --git a/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs b/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs index 0fc14de68..cb27e0ed7 100644 --- a/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs +++ b/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs @@ -4,88 +4,85 @@ namespace OpenAI.Assistants; * This file stubs and performs minimal customization to generated internal types for the OpenAI.Assistants namespace. */ -[CodeGenModel("SubmitToolOutputsRunRequest")] +[CodeGenType("SubmitToolOutputsRunRequest")] internal partial class InternalSubmitToolOutputsRunRequest { } -[CodeGenModel("CreateAssistantRequestModel")] -internal readonly partial struct InternalCreateAssistantRequestModel { } - -[CodeGenModel("MessageContentTextObjectAnnotation")] +[CodeGenType("MessageContentTextObjectAnnotation")] internal partial class InternalMessageContentTextObjectAnnotation { } -[CodeGenModel("MessageContentTextAnnotationsFileCitationObject")] +[CodeGenType("MessageContentTextAnnotationsFileCitationObject")] internal partial class InternalMessageContentTextAnnotationsFileCitationObject { } -[CodeGenModel("MessageContentTextAnnotationsFilePathObject")] +[CodeGenType("MessageContentTextAnnotationsFilePathObject")] internal partial class InternalMessageContentTextAnnotationsFilePathObject { } -[CodeGenModel("MessageDeltaContentImageFileObjectImageFile")] +[CodeGenType("MessageDeltaContentImageFileObjectImageFile")] internal partial class InternalMessageDeltaContentImageFileObjectImageFile { [CodeGenMember("Detail")] internal string Detail { get; set; } } -[CodeGenModel("MessageDeltaContentImageUrlObjectImageUrl")] +[CodeGenType("MessageDeltaContentImageUrlObjectImageUrl")] internal partial class InternalMessageDeltaContentImageUrlObjectImageUrl { [CodeGenMember("Detail")] internal string Detail { get; } } -[CodeGenModel("MessageDeltaContentImageFileObject")] +[CodeGenType("MessageDeltaContentImageFileObject")] internal partial class InternalMessageDeltaContentImageFileObject { } -[CodeGenModel("MessageDeltaContentImageUrlObject")] +[CodeGenType("MessageDeltaContentImageUrlObject")] internal partial class InternalMessageDeltaContentImageUrlObject { } -[CodeGenModel("MessageDeltaObjectDelta")] +[CodeGenType("MessageDeltaObjectDelta")] internal partial class InternalMessageDeltaObjectDelta { [CodeGenMember("Role")] internal MessageRole? Role { get; } } -[CodeGenModel("MessageDeltaContentTextObject")] +[CodeGenType("MessageDeltaContentTextObject")] internal partial class InternalMessageDeltaContentTextObject { } -[CodeGenModel("MessageDeltaContentTextObjectText")] +[CodeGenType("MessageDeltaContentTextObjectText")] internal partial class InternalMessageDeltaContentTextObjectText { } -[CodeGenModel("MessageDeltaContentTextAnnotationsFileCitationObject")] +[CodeGenType("MessageDeltaContentTextAnnotationsFileCitationObject")] internal partial class InternalMessageDeltaContentTextAnnotationsFileCitationObject { } -[CodeGenModel("MessageDeltaTextContentAnnotation")] +[CodeGenType("MessageDeltaTextContentAnnotation")] internal partial class InternalMessageDeltaTextContentAnnotation { } -[CodeGenModel("MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation")] +[CodeGenType("MessageDeltaContentTextAnnotationsFileCitationObjectFileCitation")] internal partial class InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation { } -[CodeGenModel("RunStepDeltaObject")] +[CodeGenType("RunStepDeltaObject")] internal partial class InternalRunStepDelta { private readonly object Object; } -[CodeGenModel("RunStepDeltaObjectDelta")] +[CodeGenType("RunStepDeltaObjectDelta")] internal partial class InternalRunStepDeltaObjectDelta { } -[CodeGenModel("MessageDeltaContentTextAnnotationsFilePathObject")] +[CodeGenType("MessageDeltaContentTextAnnotationsFilePathObject")] internal partial class InternalMessageDeltaContentTextAnnotationsFilePathObject { } -[CodeGenModel("MessageDeltaContentTextAnnotationsFilePathObjectFilePath")] +[CodeGenType("MessageDeltaContentTextAnnotationsFilePathObjectFilePath")] internal partial class InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath { } -[CodeGenModel("MessageDeltaContent")] +[CodeGenType("MessageDeltaContent")] internal partial class InternalMessageDeltaContent { } -[CodeGenModel("DeleteAssistantResponseObject")] +[CodeGenType("DeleteAssistantResponseObject")] internal readonly partial struct InternalDeleteAssistantResponseObject { } -[CodeGenModel("DeleteThreadResponseObject")] +[CodeGenType("DeleteThreadResponseObject")] internal readonly partial struct InternalDeleteThreadResponseObject { } -[CodeGenModel("DeleteMessageResponseObject")] +[CodeGenType("DeleteMessageResponseObject")] internal readonly partial struct InternalDeleteMessageResponseObject { } -[CodeGenModel("CreateThreadAndRunRequest")] +[CodeGenType("CreateThreadAndRunRequest")] internal partial class InternalCreateThreadAndRunRequest { public string Model { get; set; } @@ -94,291 +91,291 @@ internal partial class InternalCreateThreadAndRunRequest public ToolConstraint ToolChoice { get; set; } } -[CodeGenModel("MessageContentImageUrlObjectImageUrl")] +[CodeGenType("MessageContentImageUrlObjectImageUrl")] internal partial class InternalMessageContentImageUrlObjectImageUrl { [CodeGenMember("Detail")] internal string Detail { get; } } -[CodeGenModel("MessageContentImageFileObjectImageFile")] +[CodeGenType("MessageContentImageFileObjectImageFile")] internal partial class InternalMessageContentItemFileObjectImageFile { [CodeGenMember("Detail")] internal string Detail { get; set; } } -[CodeGenModel("MessageContentTextObjectText")] +[CodeGenType("MessageContentTextObjectText")] internal partial class InternalMessageContentTextObjectText { } -[CodeGenModel("MessageContentRefusalObjectType")] +[CodeGenType("MessageContentRefusalObjectType")] internal readonly partial struct InternalMessageContentRefusalObjectType { } -[CodeGenModel("RunStepDetailsMessageCreationObjectMessageCreation")] +[CodeGenType("RunStepDetailsMessageCreationObjectMessageCreation")] internal partial class InternalRunStepDetailsMessageCreationObjectMessageCreation { } -[CodeGenModel("RunStepDetailsToolCallsFunctionObjectFunction")] +[CodeGenType("RunStepDetailsToolCallsFunctionObjectFunction")] internal partial class InternalRunStepDetailsToolCallsFunctionObjectFunction { } -[CodeGenModel("RunStepDetailsToolCallsCodeObjectCodeInterpreter")] +[CodeGenType("RunStepDetailsToolCallsCodeObjectCodeInterpreter")] internal partial class InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter { } -[CodeGenModel("RunStepDetailsToolCallsCodeOutputImageObjectImage")] +[CodeGenType("RunStepDetailsToolCallsCodeOutputImageObjectImage")] internal partial class InternalRunStepDetailsToolCallsCodeOutputImageObjectImage { } -[CodeGenModel("MessageContentTextAnnotationsFileCitationObjectFileCitation")] +[CodeGenType("MessageContentTextAnnotationsFileCitationObjectFileCitation")] internal partial class InternalMessageContentTextAnnotationsFileCitationObjectFileCitation { } -[CodeGenModel("MessageContentTextAnnotationsFilePathObjectFilePath")] +[CodeGenType("MessageContentTextAnnotationsFilePathObjectFilePath")] internal partial class InternalMessageContentTextAnnotationsFilePathObjectFilePath { } -[CodeGenModel("RunObjectRequiredAction")] +[CodeGenType("RunObjectRequiredAction1")] internal partial class InternalRunRequiredAction { private readonly object Type; } -[CodeGenModel("RunObjectRequiredActionSubmitToolOutputs")] +[CodeGenType("RunObjectRequiredActionSubmitToolOutputs")] internal partial class InternalRunObjectRequiredActionSubmitToolOutputs { private readonly object Type; } -[CodeGenModel("RunToolCallObjectFunction")] +[CodeGenType("RunToolCallObjectFunction")] internal partial class InternalRunToolCallObjectFunction { } -[CodeGenModel("ListAssistantsResponse")] +[CodeGenType("ListAssistantsResponse")] internal partial class InternalListAssistantsResponse : IInternalListResponse { } -[CodeGenModel("ListAssistantsResponseObject")] +[CodeGenType("ListAssistantsResponseObject")] internal readonly partial struct InternalListAssistantsResponseObject { } -[CodeGenModel("ListThreadsResponse")] +[CodeGenType("ListThreadsResponse")] internal partial class InternalListThreadsResponse : IInternalListResponse { } -[CodeGenModel("ListThreadsResponseObject")] +[CodeGenType("ListThreadsResponseObject")] internal readonly partial struct InternalListThreadsResponseObject { } -[CodeGenModel("ListMessagesResponse")] +[CodeGenType("ListMessagesResponse")] internal partial class InternalListMessagesResponse : IInternalListResponse { } -[CodeGenModel("ListMessagesResponseObject")] +[CodeGenType("ListMessagesResponseObject")] internal readonly partial struct InternalListMessagesResponseObject { } -[CodeGenModel("ListRunsResponse")] +[CodeGenType("ListRunsResponse")] internal partial class InternalListRunsResponse : IInternalListResponse { } -[CodeGenModel("ListRunsResponseObject")] +[CodeGenType("ListRunsResponseObject")] internal readonly partial struct InternalListRunsResponseObject { } -[CodeGenModel("ListRunStepsResponse")] +[CodeGenType("ListRunStepsResponse")] internal partial class InternalListRunStepsResponse : IInternalListResponse { } -[CodeGenModel("ListRunStepsResponseObject")] +[CodeGenType("ListRunStepsResponseObject")] internal readonly partial struct InternalListRunStepsResponseObject { } -[CodeGenModel("RunStepDetailsToolCallsCodeObject")] +[CodeGenType("RunStepDetailsToolCallsCodeObject")] internal partial class InternalRunStepDetailsToolCallsCodeObject { } -[CodeGenModel("RunStepDetailsToolCallsFileSearchObject")] +[CodeGenType("RunStepDetailsToolCallsFileSearchObject")] internal partial class InternalRunStepDetailsToolCallsFileSearchObject { } -[CodeGenModel("RunStepDetailsToolCallsFunctionObject")] +[CodeGenType("RunStepDetailsToolCallsFunctionObject")] internal partial class InternalRunStepDetailsToolCallsFunctionObject { } -[CodeGenModel("TruncationObjectType")] +[CodeGenType("TruncationObjectType")] internal readonly partial struct InternalTruncationObjectType { } -[CodeGenModel("AssistantsNamedToolChoiceType")] +[CodeGenType("AssistantsNamedToolChoiceType")] internal readonly partial struct InternalAssistantsNamedToolChoiceType { } -[CodeGenModel("RunStepDeltaStepDetailsToolCallsCodeObject")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsCodeObject")] internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeObject { } -[CodeGenModel("RunStepDeltaStepDetailsToolCallsCodeOutputImageObject")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsCodeOutputImageObject")] internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject { } -[CodeGenModel("RunStepDeltaStepDetailsToolCallsCodeOutputLogsObject")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsCodeOutputLogsObject")] internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject { [CodeGenMember("Logs")] public string InternalLogs { get; set; } } -[CodeGenModel("RunStepDeltaStepDetailsMessageCreationObject")] +[CodeGenType("RunStepDeltaStepDetailsMessageCreationObject")] internal partial class InternalRunStepDeltaStepDetailsMessageCreationObject { } -[CodeGenModel("RunStepDeltaStepDetailsToolCallsObject")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsObject")] internal partial class InternalRunStepDeltaStepDetailsToolCallsObject { } -[CodeGenModel("RunStepDeltaStepDetailsToolCallsFileSearchObject")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsFileSearchObject")] internal partial class InternalRunStepDeltaStepDetailsToolCallsFileSearchObject { [CodeGenMember("FileSearch")] public InternalRunStepDetailsToolCallsFileSearchObjectFileSearch FileSearch { get; set; } } -[CodeGenModel("RunStepDeltaStepDetailsToolCallsFunctionObject")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsFunctionObject")] internal partial class InternalRunStepDeltaStepDetailsToolCallsFunctionObject { } -[CodeGenModel("RunStepDeltaStepDetailsToolCallsObjectToolCallsObject")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsObjectToolCallsObject")] internal partial class InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject { } -[CodeGenModel("RunStepDeltaStepDetailsMessageCreationObjectMessageCreation")] +[CodeGenType("RunStepDeltaStepDetailsMessageCreationObjectMessageCreation")] internal partial class InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation { } -[CodeGenModel("RunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter")] internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter { } -[CodeGenModel("RunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage")] internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage { } -[CodeGenModel("RunStepDeltaStepDetails")] +[CodeGenType("RunStepDeltaStepDetails")] internal partial class InternalRunStepDeltaStepDetails { } -[CodeGenModel("RunStepDeltaStepDetailsToolCallsFunctionObjectFunction")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsFunctionObjectFunction")] internal partial class InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction { } -[CodeGenModel("AssistantsNamedToolChoiceFunction")] +[CodeGenType("AssistantsNamedToolChoiceFunction")] internal partial class InternalAssistantsNamedToolChoiceFunction { } -[CodeGenModel("AssistantObjectObject")] +[CodeGenType("AssistantObjectObject")] internal readonly partial struct InternalAssistantObjectObject { } -[CodeGenModel("MessageObjectObject")] +[CodeGenType("MessageObjectObject")] internal readonly partial struct InternalMessageObjectObject { } -[CodeGenModel("RunObjectObject")] +[CodeGenType("RunObjectObject")] internal readonly partial struct InternalRunObjectObject { } -[CodeGenModel("RunStepObjectObject")] +[CodeGenType("RunStepObjectObject")] internal readonly partial struct InternalRunStepObjectObject { } -[CodeGenModel("ThreadObjectObject")] +[CodeGenType("ThreadObjectObject")] internal readonly partial struct InternalThreadObjectObject { } -[CodeGenModel("MessageRequestContentTextObjectType")] +[CodeGenType("MessageRequestContentTextObjectType")] internal readonly partial struct InternalMessageRequestContentTextObjectType { } -[CodeGenModel("MessageContentImageUrlObjectImageUrlDetail")] +[CodeGenType("MessageContentImageUrlObjectImageUrlDetail")] internal readonly partial struct InternalMessageContentImageUrlObjectImageUrlDetail { } -[CodeGenModel("MessageContentImageFileObjectImageFileDetail")] +[CodeGenType("MessageContentImageFileObjectImageFileDetail")] internal readonly partial struct InternalMessageContentImageFileObjectImageFileDetail { } -[CodeGenModel("MessageDeltaContentImageFileObjectImageFileDetail")] +[CodeGenType("MessageDeltaContentImageFileObjectImageFileDetail")] internal readonly partial struct InternalMessageDeltaContentImageFileObjectImageFileDetail { } -[CodeGenModel("MessageDeltaContentImageUrlObjectImageUrlDetail")] +[CodeGenType("MessageDeltaContentImageUrlObjectImageUrlDetail")] internal readonly partial struct InternalMessageDeltaContentImageUrlObjectImageUrlDetail { } -[CodeGenModel("MessageDeltaObject")] +[CodeGenType("MessageDeltaObject")] internal partial class InternalMessageDeltaObject { } -[CodeGenModel("MessageDeltaObjectDeltaRole")] +[CodeGenType("MessageDeltaObjectDeltaRole")] internal readonly partial struct InternalMessageDeltaObjectDeltaRole { } -[CodeGenModel("MessageDeltaObjectObject")] +[CodeGenType("MessageDeltaObjectObject")] internal readonly partial struct InternalMessageDeltaObjectObject { } -[CodeGenModel("MessageObjectAttachment")] +[CodeGenType("MessageObjectAttachment")] internal partial class InternalMessageObjectAttachment { } -[CodeGenModel("MessageContentImageFileObjectType")] +[CodeGenType("MessageContentImageFileObjectType")] internal readonly partial struct InternalMessageContentImageFileObjectType { } -[CodeGenModel("MessageContentImageUrlObjectType")] +[CodeGenType("MessageContentImageUrlObjectType")] internal readonly partial struct InternalMessageContentImageUrlObjectType { } -[CodeGenModel("MessageContentTextObjectType")] +[CodeGenType("MessageContentTextObjectType")] internal readonly partial struct InternalMessageContentTextObjectType { } -[CodeGenModel("RunObjectRequiredActionType")] +[CodeGenType("RunObjectRequiredAction1Type")] internal readonly partial struct InternalRunObjectRequiredActionType { } -[CodeGenModel("RunStepDeltaObjectObject")] +[CodeGenType("RunStepDeltaObjectObject")] internal readonly partial struct InternalRunStepDeltaObjectObject { } -[CodeGenModel("RunToolCallObjectType")] +[CodeGenType("RunToolCallObjectType")] internal readonly partial struct InternalRunToolCallObjectType { } -[CodeGenModel("MessageObjectRole")] +[CodeGenType("MessageObjectRole")] internal readonly partial struct InternalMessageObjectRole { } -[CodeGenModel("CreateRunRequestModel")] -internal readonly partial struct InternalCreateRunRequestModel { } - -[CodeGenModel("CreateAssistantRequestToolResources")] +[CodeGenType("CreateAssistantRequestToolResources1")] internal partial class InternalCreateAssistantRequestToolResources { } -[CodeGenModel("CreateAssistantRequestToolResourcesCodeInterpreter")] +[CodeGenType("CreateAssistantRequestToolResourcesCodeInterpreter")] internal partial class InternalCreateAssistantRequestToolResourcesCodeInterpreter { } -[CodeGenModel("CreateThreadAndRunRequestModel")] +[CodeGenType("CreateThreadAndRunRequestModel")] internal readonly partial struct InternalCreateThreadAndRunRequestModel { } -[CodeGenModel("CreateThreadAndRunRequestToolChoice")] +[CodeGenType("CreateThreadAndRunRequestToolChoice1")] internal readonly partial struct InternalCreateThreadAndRunRequestToolChoice { } -[CodeGenModel("CreateThreadAndRunRequestToolResources")] +[CodeGenType("CreateThreadAndRunRequestToolResources1")] internal partial class InternalCreateThreadAndRunRequestToolResources { } -[CodeGenModel("CreateThreadAndRunRequestToolResourcesCodeInterpreter")] +[CodeGenType("CreateThreadAndRunRequestToolResourcesCodeInterpreter")] internal partial class InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter { } -[CodeGenModel("CreateThreadRequestToolResources")] +[CodeGenType("CreateThreadRequestToolResources1")] internal partial class InternalCreateThreadRequestToolResources { } -[CodeGenModel("CreateThreadRequestToolResourcesCodeInterpreter")] +[CodeGenType("CreateThreadRequestToolResourcesCodeInterpreter")] internal partial class InternalCreateThreadRequestToolResourcesCodeInterpreter { } -[CodeGenModel("CreateThreadRequestToolResourcesFileSearchBase")] +[CodeGenType("CreateThreadRequestToolResourcesFileSearchBase")] internal partial class InternalCreateThreadRequestToolResourcesFileSearchBase { } -[CodeGenModel("ModifyAssistantRequestToolResources")] +[CodeGenType("ModifyAssistantRequestToolResources1")] internal partial class InternalModifyAssistantRequestToolResources { } -[CodeGenModel("ModifyAssistantRequestToolResourcesCodeInterpreter")] +[CodeGenType("ModifyAssistantRequestToolResourcesCodeInterpreter")] internal partial class InternalModifyAssistantRequestToolResourcesCodeInterpreter { } -[CodeGenModel("ModifyThreadRequestToolResources")] +[CodeGenType("ModifyThreadRequestToolResources1")] internal partial class InternalModifyThreadRequestToolResources { } -[CodeGenModel("ModifyThreadRequestToolResourcesCodeInterpreter")] +[CodeGenType("ModifyThreadRequestToolResourcesCodeInterpreter")] internal partial class InternalModifyThreadRequestToolResourcesCodeInterpreter { } -[CodeGenModel("ThreadObjectToolResources")] +[CodeGenType("ThreadObjectToolResources1")] internal partial class InternalThreadObjectToolResources { } -[CodeGenModel("ThreadObjectToolResourcesCodeInterpreter")] +[CodeGenType("ThreadObjectToolResourcesCodeInterpreter")] internal partial class InternalThreadObjectToolResourcesCodeInterpreter { } -[CodeGenModel("ThreadObjectToolResourcesFileSearch")] +[CodeGenType("ThreadObjectToolResourcesFileSearch")] internal partial class InternalThreadObjectToolResourcesFileSearch { } -[CodeGenModel("AssistantToolsFileSearchTypeOnly")] +[CodeGenType("AssistantToolsFileSearchTypeOnly")] internal partial class InternalAssistantToolsFileSearchTypeOnly { } -[CodeGenModel("AssistantToolsFileSearchTypeOnlyType")] +[CodeGenType("AssistantToolsFileSearchTypeOnlyType")] internal readonly partial struct InternalAssistantToolsFileSearchTypeOnlyType { } -[CodeGenModel("AssistantResponseFormatText")] +[CodeGenType("AssistantResponseFormatText")] internal partial class InternalAssistantResponseFormatText { } -[CodeGenModel("AssistantResponseFormatJsonObject")] +[CodeGenType("AssistantResponseFormatJsonObject")] internal partial class InternalAssistantResponseFormatJsonObject { } -[CodeGenModel("AssistantResponseFormatJsonSchema")] +[CodeGenType("AssistantResponseFormatJsonSchema")] internal partial class InternalAssistantResponseFormatJsonSchema { } -[CodeGenModel("UnknownAssistantResponseFormat")] +[CodeGenType("UnknownAssistantResponseFormat")] internal partial class InternalUnknownAssistantResponseFormat { } -[CodeGenModel("MessageDeltaContentRefusalObject")] +[CodeGenType("MessageDeltaContentRefusalObject")] internal partial class InternalMessageDeltaContentRefusalObject { } -[CodeGenModel("ToolResourcesFileSearchIdsOnly")] +[CodeGenType("ToolResourcesFileSearchIdsOnly")] internal partial class InternalToolResourcesFileSearchIdsOnly { } -[CodeGenModel("RunStepDetailsToolCallsFileSearchRankingOptionsObject")] +[CodeGenType("RunStepDetailsToolCallsFileSearchRankingOptionsObject")] internal partial class InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject { } -[CodeGenModel("RunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker")] +[CodeGenType("RunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker")] internal readonly partial struct InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker { } -[CodeGenModel("IncludedRunStepProperty")] -internal readonly partial struct InternalIncludedRunStepProperty { } \ No newline at end of file +[CodeGenType("IncludedRunStepProperty")] +internal readonly partial struct InternalIncludedRunStepProperty { } + +[CodeGenType("AssistantSupportedModels")] +internal readonly partial struct InternalAssistantSupportedModels { } diff --git a/src/Custom/Assistants/Internal/InternalAssistantMessageClient.cs b/src/Custom/Assistants/Internal/InternalAssistantMessageClient.cs index 111dcf265..15e8f3eb5 100644 --- a/src/Custom/Assistants/Internal/InternalAssistantMessageClient.cs +++ b/src/Custom/Assistants/Internal/InternalAssistantMessageClient.cs @@ -5,12 +5,12 @@ namespace OpenAI.Assistants; -[CodeGenClient("Messages")] +[CodeGenType("Messages")] [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(MessageCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListMessages", typeof(string), typeof(int?), typeof(MessageCollectionOrder?), typeof(string), typeof(string), 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("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/InternalAssistantRunClient.Protocol.cs b/src/Custom/Assistants/Internal/InternalAssistantRunClient.Protocol.cs index 86e942ae1..342f4fe2b 100644 --- a/src/Custom/Assistants/Internal/InternalAssistantRunClient.Protocol.cs +++ b/src/Custom/Assistants/Internal/InternalAssistantRunClient.Protocol.cs @@ -6,8 +6,12 @@ namespace OpenAI.Assistants; -[CodeGenSuppress("CreateRunAsync", typeof(string), typeof(BinaryContent), typeof(IEnumerable), typeof(RequestOptions))] -[CodeGenSuppress("CreateRun", typeof(string), typeof(BinaryContent), typeof(IEnumerable), typeof(RequestOptions))] +[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("GetRunStepAsync", typeof(string), typeof(string), typeof(string), typeof(IEnumerable), typeof(RequestOptions))] @@ -29,7 +33,10 @@ public virtual async Task CreateThreadAndRunAsync(BinaryContent co PipelineMessage message = null; try { - message = CreateCreateThreadAndRunRequest(content, options); + string acceptHeaderValue = options?.BufferResponse == false + ? AcceptHeaderValue.TextEventStream.ToString() + : AcceptHeaderValue.ApplicationJson.ToString(); + message = CreateCreateThreadAndRunRequest(content, acceptHeaderValue, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } finally @@ -56,7 +63,11 @@ public virtual ClientResult CreateThreadAndRun(BinaryContent content, RequestOpt PipelineMessage message = null; try { - message = CreateCreateThreadAndRunRequest(content, options); + string acceptHeaderValue = options?.BufferResponse == false + ? AcceptHeaderValue.TextEventStream.ToString() + : AcceptHeaderValue.ApplicationJson.ToString(); + + message = CreateCreateThreadAndRunRequest(content, acceptHeaderValue, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } finally @@ -86,10 +97,14 @@ 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, includedRunStepProperties, options); + message = CreateCreateRunRequest(threadId, content, acceptHeaderValue, includedRunStepProperties, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } finally @@ -119,10 +134,14 @@ 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, includedRunStepProperties, options); + message = CreateCreateRunRequest(threadId, content, acceptHeaderValue, includedRunStepProperties, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } finally @@ -274,7 +293,11 @@ public virtual async Task SubmitToolOutputsToRunAsync(string threa PipelineMessage message = null; try { - message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, options); + string acceptHeaderValue = options?.BufferResponse == false + ? AcceptHeaderValue.TextEventStream.ToString() + : AcceptHeaderValue.ApplicationJson.ToString(); + + message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, acceptHeaderValue, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } finally @@ -308,7 +331,11 @@ public virtual ClientResult SubmitToolOutputsToRun(string threadId, string runId PipelineMessage message = null; try { - message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, options); + string acceptHeaderValue = options?.BufferResponse == false + ? AcceptHeaderValue.TextEventStream.ToString() + : AcceptHeaderValue.ApplicationJson.ToString(); + + message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, acceptHeaderValue, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } finally diff --git a/src/Custom/Assistants/Internal/InternalAssistantRunClient.cs b/src/Custom/Assistants/Internal/InternalAssistantRunClient.cs index 21813f852..751b22fe1 100644 --- a/src/Custom/Assistants/Internal/InternalAssistantRunClient.cs +++ b/src/Custom/Assistants/Internal/InternalAssistantRunClient.cs @@ -6,24 +6,24 @@ namespace OpenAI.Assistants; -[CodeGenClient("Runs")] +[CodeGenType("Runs")] [CodeGenSuppress("InternalAssistantRunClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] -[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("ListRunsAsync", typeof(string), typeof(int?), typeof(RunCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListRuns", typeof(string), typeof(int?), typeof(RunCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[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("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(CancellationToken))] -[CodeGenSuppress("SubmitToolOutputsToRun", typeof(string), typeof(string), typeof(InternalSubmitToolOutputsRunRequest), typeof(CancellationToken))] -[CodeGenSuppress("ListRunStepsAsync", typeof(string), typeof(string), typeof(int?), typeof(RunStepCollectionOrder?), typeof(string), typeof(string), typeof(IEnumerable), typeof(CancellationToken))] -[CodeGenSuppress("ListRunSteps", typeof(string), typeof(string), typeof(int?), typeof(RunStepCollectionOrder?), typeof(string), typeof(string), typeof(IEnumerable), 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("GetRunStepAsync", 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 diff --git a/src/Custom/Assistants/Internal/InternalAssistantThreadClient.cs b/src/Custom/Assistants/Internal/InternalAssistantThreadClient.cs index 799bd1121..16993fa12 100644 --- a/src/Custom/Assistants/Internal/InternalAssistantThreadClient.cs +++ b/src/Custom/Assistants/Internal/InternalAssistantThreadClient.cs @@ -5,7 +5,7 @@ namespace OpenAI.Assistants; -[CodeGenClient("Threads")] +[CodeGenType("Threads")] [CodeGenSuppress("InternalAssistantThreadClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] [CodeGenSuppress("CreateThreadAsync", typeof(ThreadCreationOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateThread", typeof(ThreadCreationOptions), typeof(CancellationToken))] diff --git a/src/Custom/Assistants/Internal/InternalAssistantToolsFileSearchFileSearch.cs b/src/Custom/Assistants/Internal/InternalAssistantToolsFileSearchFileSearch.cs index 781f98db2..7f4ccf12d 100644 --- a/src/Custom/Assistants/Internal/InternalAssistantToolsFileSearchFileSearch.cs +++ b/src/Custom/Assistants/Internal/InternalAssistantToolsFileSearchFileSearch.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("AssistantToolsFileSearchFileSearch")] +[CodeGenType("AssistantToolsFileSearchFileSearch")] internal partial class InternalAssistantToolsFileSearchFileSearch { [CodeGenMember("MaxNumResults")] diff --git a/src/Custom/Assistants/Internal/InternalMessageImageFileContent.cs b/src/Custom/Assistants/Internal/InternalMessageImageFileContent.cs index 1aac69dd4..e49bdebfe 100644 --- a/src/Custom/Assistants/Internal/InternalMessageImageFileContent.cs +++ b/src/Custom/Assistants/Internal/InternalMessageImageFileContent.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants; /// Use the method to /// create an instance of this type. /// -[CodeGenModel("MessageContentImageFileObject")] +[CodeGenType("MessageContentImageFileObject")] [CodeGenSuppress("InternalMessageImageFileContent", typeof(InternalMessageContentItemFileObjectImageFile))] internal partial class InternalMessageImageFileContent { diff --git a/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.cs b/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.cs index 76388449d..5f8b81716 100644 --- a/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.cs +++ b/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants; /// Use the method to /// create an instance of this type. /// -[CodeGenModel("MessageContentImageUrlObject")] +[CodeGenType("MessageContentImageUrlObject")] [CodeGenSuppress("MessageImageUrlContent", typeof(InternalMessageContentImageUrlObjectImageUrl))] internal partial class InternalMessageImageUrlContent { diff --git a/src/Custom/Assistants/Internal/InternalMessageRefusalContent.cs b/src/Custom/Assistants/Internal/InternalMessageRefusalContent.cs index ed0188314..46908fe01 100644 --- a/src/Custom/Assistants/Internal/InternalMessageRefusalContent.cs +++ b/src/Custom/Assistants/Internal/InternalMessageRefusalContent.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants; /// Use the method to /// create an instance of this type. /// -[CodeGenModel("MessageContentRefusalObject")] +[CodeGenType("MessageContentRefusalObject")] internal partial class InternalMessageRefusalContent { [CodeGenMember("Type")] diff --git a/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.cs b/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.cs index 9925844e2..0ac72f75c 100644 --- a/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.cs +++ b/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.cs @@ -7,7 +7,7 @@ /// Use the method to create an instance of this /// type. /// -[CodeGenModel("MessageRequestContentTextObject")] +[CodeGenType("MessageRequestContentTextObject")] internal partial class InternalRequestMessageTextContent { [CodeGenMember("Text")] diff --git a/src/Custom/Assistants/Internal/InternalRequiredFunctionToolCall.cs b/src/Custom/Assistants/Internal/InternalRequiredFunctionToolCall.cs index 4bd70fc9c..5dded028f 100644 --- a/src/Custom/Assistants/Internal/InternalRequiredFunctionToolCall.cs +++ b/src/Custom/Assistants/Internal/InternalRequiredFunctionToolCall.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; /// /// A requested invocation of a defined function tool, needed by an Assistants API run to continue. /// -[CodeGenModel("RunToolCallObject")] +[CodeGenType("RunToolCallObject")] internal partial class InternalRequiredFunctionToolCall : InternalRequiredToolCall { // CUSTOM: diff --git a/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.cs b/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.cs index 0d7b79794..18ea17dbb 100644 --- a/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.cs +++ b/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.cs @@ -5,7 +5,7 @@ namespace OpenAI.Assistants; /// /// Represents an item of annotated text content within an Assistants API response message. /// -[CodeGenModel("MessageContentTextObject")] +[CodeGenType("MessageContentTextObject")] internal partial class InternalResponseMessageTextContent { /// diff --git a/src/Custom/Assistants/Internal/InternalRunStepCodeInterpreterLogOutput.cs b/src/Custom/Assistants/Internal/InternalRunStepCodeInterpreterLogOutput.cs index 4d0a1d8e0..9c73c27a2 100644 --- a/src/Custom/Assistants/Internal/InternalRunStepCodeInterpreterLogOutput.cs +++ b/src/Custom/Assistants/Internal/InternalRunStepCodeInterpreterLogOutput.cs @@ -1,7 +1,7 @@ namespace OpenAI.Assistants { /// Text output from the Code Interpreter tool call as part of a run step. - [CodeGenModel("RunStepDetailsToolCallsCodeOutputLogsObject")] + [CodeGenType("RunStepDetailsToolCallsCodeOutputLogsObject")] internal partial class InternalRunStepCodeInterpreterLogOutput : RunStepCodeInterpreterOutput { /// The text output from the Code Interpreter tool call. diff --git a/src/Custom/Assistants/Internal/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.cs b/src/Custom/Assistants/Internal/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.cs index b7ec3a1fa..1dd45e58f 100644 --- a/src/Custom/Assistants/Internal/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.cs +++ b/src/Custom/Assistants/Internal/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("RunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch")] internal partial class InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch { // CUSTOM: reuse input model for ranking options, which differs only in the request presence of 'auto' as a selection diff --git a/src/Custom/Assistants/Internal/InternalRunStepDetailsMessageCreationObject.cs b/src/Custom/Assistants/Internal/InternalRunStepDetailsMessageCreationObject.cs index 9c0ab12f5..f4ee99e22 100644 --- a/src/Custom/Assistants/Internal/InternalRunStepDetailsMessageCreationObject.cs +++ b/src/Custom/Assistants/Internal/InternalRunStepDetailsMessageCreationObject.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("RunStepDetailsMessageCreationObject")] +[CodeGenType("RunStepDetailsMessageCreationObject")] internal partial class InternalRunStepDetailsMessageCreationObject : RunStepDetails { /// diff --git a/src/Custom/Assistants/Internal/InternalRunStepDetailsToolCallsCodeOutputImageObject.cs b/src/Custom/Assistants/Internal/InternalRunStepDetailsToolCallsCodeOutputImageObject.cs index 15558d514..0090ca92e 100644 --- a/src/Custom/Assistants/Internal/InternalRunStepDetailsToolCallsCodeOutputImageObject.cs +++ b/src/Custom/Assistants/Internal/InternalRunStepDetailsToolCallsCodeOutputImageObject.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("RunStepDetailsToolCallsCodeOutputImageObject")] +[CodeGenType("RunStepDetailsToolCallsCodeOutputImageObject")] internal partial class InternalRunStepDetailsToolCallsCodeOutputImageObject { /// diff --git a/src/Custom/Assistants/Internal/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.cs b/src/Custom/Assistants/Internal/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.cs index cd956c983..10dcd16d9 100644 --- a/src/Custom/Assistants/Internal/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.cs +++ b/src/Custom/Assistants/Internal/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("RunStepDetailsToolCallsFileSearchObjectFileSearch")] +[CodeGenType("RunStepDetailsToolCallsFileSearchObjectFileSearch")] internal partial class InternalRunStepDetailsToolCallsFileSearchObjectFileSearch { // CUSTOM: reuse input model for ranking options, which differs only in the request presence of 'auto' as a selection diff --git a/src/Custom/Assistants/Internal/InternalRunStepToolCallDetailsCollection.cs b/src/Custom/Assistants/Internal/InternalRunStepToolCallDetailsCollection.cs index 59e91f6e1..dc12c2cff 100644 --- a/src/Custom/Assistants/Internal/InternalRunStepToolCallDetailsCollection.cs +++ b/src/Custom/Assistants/Internal/InternalRunStepToolCallDetailsCollection.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; -[CodeGenModel("RunStepDetailsToolCallsObject")] +[CodeGenType("RunStepDetailsToolCallsObject")] internal partial class InternalRunStepDetailsToolCallsObject : IReadOnlyList { [CodeGenMember("ToolCalls")] diff --git a/src/Custom/Assistants/Internal/UnknownAssistantToolDefinition.cs b/src/Custom/Assistants/Internal/UnknownAssistantToolDefinition.cs index d9c826db6..02539ee02 100644 --- a/src/Custom/Assistants/Internal/UnknownAssistantToolDefinition.cs +++ b/src/Custom/Assistants/Internal/UnknownAssistantToolDefinition.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("UnknownAssistantToolDefinition")] +[CodeGenType("UnknownAssistantToolDefinition")] internal partial class UnknownAssistantToolDefinition { } \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/UnknownMessageContentTextObjectAnnotation.cs b/src/Custom/Assistants/Internal/UnknownMessageContentTextObjectAnnotation.cs index bf2ac05a0..bb8dad508 100644 --- a/src/Custom/Assistants/Internal/UnknownMessageContentTextObjectAnnotation.cs +++ b/src/Custom/Assistants/Internal/UnknownMessageContentTextObjectAnnotation.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("UnknownMessageContentTextObjectAnnotation")] +[CodeGenType("UnknownMessageContentTextObjectAnnotation")] internal partial class UnknownMessageContentTextObjectAnnotation { } \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/UnknownMessageDeltaContent.cs b/src/Custom/Assistants/Internal/UnknownMessageDeltaContent.cs index 3fcd7656c..07603d430 100644 --- a/src/Custom/Assistants/Internal/UnknownMessageDeltaContent.cs +++ b/src/Custom/Assistants/Internal/UnknownMessageDeltaContent.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("UnknownMessageDeltaContent")] +[CodeGenType("UnknownMessageDeltaContent")] internal partial class UnknownMessageDeltaContent { } diff --git a/src/Custom/Assistants/Internal/UnknownMessageDeltaTextContentAnnotation.cs b/src/Custom/Assistants/Internal/UnknownMessageDeltaTextContentAnnotation.cs index 53016f480..14ebb397f 100644 --- a/src/Custom/Assistants/Internal/UnknownMessageDeltaTextContentAnnotation.cs +++ b/src/Custom/Assistants/Internal/UnknownMessageDeltaTextContentAnnotation.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("UnknownMessageDeltaTextContentAnnotation")] +[CodeGenType("UnknownMessageDeltaTextContentAnnotation")] internal partial class UnknownMessageDeltaTextContentAnnotation { } \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetails.cs b/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetails.cs index 1d309757d..f89548c91 100644 --- a/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetails.cs +++ b/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetails.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("UnknownRunStepDeltaStepDetails")] +[CodeGenType("UnknownRunStepDeltaStepDetails")] internal partial class UnknownRunStepDeltaStepDetails { } \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs b/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs index 30579f8f8..d30878b66 100644 --- a/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs +++ b/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject")] +[CodeGenType("UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject")] internal partial class UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject { } \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs b/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs index 55ffc905e..3cfae59c7 100644 --- a/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs +++ b/src/Custom/Assistants/Internal/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject")] +[CodeGenType("UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject")] internal partial class UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject { } \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/UnknownRunStepDetails.cs b/src/Custom/Assistants/Internal/UnknownRunStepDetails.cs index 2fd75b988..3095cded7 100644 --- a/src/Custom/Assistants/Internal/UnknownRunStepDetails.cs +++ b/src/Custom/Assistants/Internal/UnknownRunStepDetails.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("UnknownRunStepDetails")] +[CodeGenType("UnknownRunStepDetails")] internal partial class UnknownRunStepDetails { } \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs b/src/Custom/Assistants/Internal/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs index d6fbc0575..4f6a2591f 100644 --- a/src/Custom/Assistants/Internal/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs +++ b/src/Custom/Assistants/Internal/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject")] +[CodeGenType("UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject")] internal partial class UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject { } \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/UnknownRunStepDetailsToolCallsObjectToolCallsObject.cs b/src/Custom/Assistants/Internal/UnknownRunStepDetailsToolCallsObjectToolCallsObject.cs index 0540c25da..59b87ffc6 100644 --- a/src/Custom/Assistants/Internal/UnknownRunStepDetailsToolCallsObjectToolCallsObject.cs +++ b/src/Custom/Assistants/Internal/UnknownRunStepDetailsToolCallsObjectToolCallsObject.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("UnknownRunStepDetailsToolCallsObjectToolCallsObject")] +[CodeGenType("UnknownRunStepDetailsToolCallsObjectToolCallsObject")] internal partial class UnknownRunStepDetailsToolCallsObjectToolCallsObject { } \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/UnknownRunStepObjectStepDetails.cs b/src/Custom/Assistants/Internal/UnknownRunStepObjectStepDetails.cs index d18908820..b43e6bb23 100644 --- a/src/Custom/Assistants/Internal/UnknownRunStepObjectStepDetails.cs +++ b/src/Custom/Assistants/Internal/UnknownRunStepObjectStepDetails.cs @@ -1,6 +1,6 @@ namespace OpenAI.Assistants; -[CodeGenModel("UnknownRunStepObjectStepDetails")] +[CodeGenType("UnknownRunStepObjectStepDetails")] internal partial class UnknownRunStepObjectStepDetails { } \ No newline at end of file diff --git a/src/Custom/Assistants/MessageCollectionOrder.cs b/src/Custom/Assistants/MessageCollectionOrder.cs index 47d03e935..250a8a814 100644 --- a/src/Custom/Assistants/MessageCollectionOrder.cs +++ b/src/Custom/Assistants/MessageCollectionOrder.cs @@ -1,17 +1,40 @@ -using System.Diagnostics.CodeAnalysis; +using System; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Assistants; -// CUSTOM: Renamed. [Experimental("OPENAI001")] -[CodeGenModel("ListMessagesRequestOrder")] -public readonly partial struct MessageCollectionOrder +public readonly partial struct MessageCollectionOrder : IEquatable { - // CUSTOM: Renamed. - [CodeGenMember("Asc")] - public static MessageCollectionOrder Ascending { get; } = new MessageCollectionOrder(AscValue); + public static MessageCollectionOrder Ascending { get; } = new MessageCollectionOrder("asc"); - // CUSTOM: Renamed. - [CodeGenMember("Desc")] - public static MessageCollectionOrder Descending { get; } = new MessageCollectionOrder(DescValue); + public static MessageCollectionOrder Descending { get; } = new MessageCollectionOrder("desc"); + + private readonly string _value; + private const string AscValue = "asc"; + private const string DescValue = "desc"; + + public MessageCollectionOrder(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static bool operator ==(MessageCollectionOrder left, MessageCollectionOrder right) => left.Equals(right); + + public static bool operator !=(MessageCollectionOrder left, MessageCollectionOrder right) => !left.Equals(right); + + public static implicit operator MessageCollectionOrder(string value) => new MessageCollectionOrder(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is MessageCollectionOrder other && Equals(other); + + public bool Equals(MessageCollectionOrder 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/Custom/Assistants/MessageContent.cs b/src/Custom/Assistants/MessageContent.cs index ff21c52c3..32c082067 100644 --- a/src/Custom/Assistants/MessageContent.cs +++ b/src/Custom/Assistants/MessageContent.cs @@ -5,7 +5,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("MessageContent")] +[CodeGenType("MessageContent")] public abstract partial class MessageContent { /// diff --git a/src/Custom/Assistants/MessageCreationAttachment.cs b/src/Custom/Assistants/MessageCreationAttachment.cs index c75d00c7b..b75ccccd3 100644 --- a/src/Custom/Assistants/MessageCreationAttachment.cs +++ b/src/Custom/Assistants/MessageCreationAttachment.cs @@ -7,7 +7,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("CreateMessageRequestAttachment")] +[CodeGenType("CreateMessageRequestAttachment")] [CodeGenSerialization(nameof(Tools), "tools", SerializationValueHook = nameof(SerializeTools), DeserializationValueHook = nameof(DeserializeTools))] public partial class MessageCreationAttachment { diff --git a/src/Custom/Assistants/MessageCreationOptions.cs b/src/Custom/Assistants/MessageCreationOptions.cs index 676ac91fc..7953bbeab 100644 --- a/src/Custom/Assistants/MessageCreationOptions.cs +++ b/src/Custom/Assistants/MessageCreationOptions.cs @@ -8,7 +8,7 @@ namespace OpenAI.Assistants; /// Represents additional options available when creating a new . /// [Experimental("OPENAI001")] -[CodeGenModel("CreateMessageRequest")] +[CodeGenType("CreateMessageRequest")] [CodeGenSuppress("MessageCreationOptions", typeof(MessageRole), typeof(IEnumerable))] [CodeGenSerialization(nameof(Content), SerializationValueHook = nameof(SerializeContent))] public partial class MessageCreationOptions diff --git a/src/Custom/Assistants/MessageDeletionResult.cs b/src/Custom/Assistants/MessageDeletionResult.cs index d084006f7..2c39d94bd 100644 --- a/src/Custom/Assistants/MessageDeletionResult.cs +++ b/src/Custom/Assistants/MessageDeletionResult.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("DeleteMessageResponse")] +[CodeGenType("DeleteMessageResponse")] public partial class MessageDeletionResult { // CUSTOM: Renamed. diff --git a/src/Custom/Assistants/MessageModificationOptions.cs b/src/Custom/Assistants/MessageModificationOptions.cs index 55cffbb38..769732884 100644 --- a/src/Custom/Assistants/MessageModificationOptions.cs +++ b/src/Custom/Assistants/MessageModificationOptions.cs @@ -6,7 +6,7 @@ namespace OpenAI.Assistants; /// Represents additional options available when modifying an existing . /// [Experimental("OPENAI001")] -[CodeGenModel("ModifyMessageRequest")] +[CodeGenType("ModifyMessageRequest")] public partial class MessageModificationOptions { } diff --git a/src/Custom/Assistants/MessageRole.cs b/src/Custom/Assistants/MessageRole.cs index 28dce0718..89abae2c2 100644 --- a/src/Custom/Assistants/MessageRole.cs +++ b/src/Custom/Assistants/MessageRole.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("CreateMessageRequestRole")] +[CodeGenType("CreateMessageRequestRole")] public enum MessageRole { /// diff --git a/src/Custom/Assistants/RunCollectionOrder.cs b/src/Custom/Assistants/RunCollectionOrder.cs index 0b2f91749..7e08c2003 100644 --- a/src/Custom/Assistants/RunCollectionOrder.cs +++ b/src/Custom/Assistants/RunCollectionOrder.cs @@ -1,17 +1,41 @@ -using System.Diagnostics.CodeAnalysis; +using System; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Assistants; -// CUSTOM: Renamed. [Experimental("OPENAI001")] -[CodeGenModel("ListRunsRequestOrder")] -public readonly partial struct RunCollectionOrder +public readonly partial struct RunCollectionOrder: IEquatable { - // CUSTOM: Renamed. - [CodeGenMember("Asc")] - public static RunCollectionOrder Ascending { get; } = new RunCollectionOrder(AscValue); + public static RunCollectionOrder Ascending { get; } = new RunCollectionOrder("asc"); - // CUSTOM: Renamed. - [CodeGenMember("Desc")] - public static RunCollectionOrder Descending { get; } = new RunCollectionOrder(DescValue); + public static RunCollectionOrder Descending { get; } = new RunCollectionOrder("desc"); + + private readonly string _value; + private const string AscValue = "asc"; + private const string DescValue = "desc"; + + public RunCollectionOrder(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static bool operator ==(RunCollectionOrder left, RunCollectionOrder right) => left.Equals(right); + + public static bool operator !=(RunCollectionOrder left, RunCollectionOrder right) => !left.Equals(right); + + public static implicit operator RunCollectionOrder(string value) => new RunCollectionOrder(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is RunCollectionOrder other && Equals(other); + + public bool Equals(RunCollectionOrder 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/Custom/Assistants/RunCreationOptions.cs b/src/Custom/Assistants/RunCreationOptions.cs index 575006617..96fbe89bb 100644 --- a/src/Custom/Assistants/RunCreationOptions.cs +++ b/src/Custom/Assistants/RunCreationOptions.cs @@ -1,3 +1,4 @@ +using OpenAI.Chat; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -10,7 +11,7 @@ namespace OpenAI.Assistants; /// Represents additional options available when creating a new . /// [Experimental("OPENAI001")] -[CodeGenModel("CreateRunRequest")] +[CodeGenType("CreateRunRequest")] [CodeGenSuppress("RunCreationOptions", typeof(string))] [CodeGenSerialization(nameof(ToolConstraint), "tool_choice", SerializationValueHook = nameof(SerializeToolConstraint))] public partial class RunCreationOptions @@ -131,6 +132,10 @@ private set [CodeGenMember("ToolChoice")] public ToolConstraint ToolConstraint { get; set; } + // CUSTOM: Made internal. + [CodeGenMember("ReasoningEffort")] + internal ChatReasoningEffortLevel? ReasoningEffortLevel { get; set; } + /// /// Creates a new instance of . /// diff --git a/src/Custom/Assistants/RunIncompleteReason.cs b/src/Custom/Assistants/RunIncompleteReason.cs index 692300ebf..e096ed8f9 100644 --- a/src/Custom/Assistants/RunIncompleteReason.cs +++ b/src/Custom/Assistants/RunIncompleteReason.cs @@ -6,7 +6,7 @@ namespace OpenAI.Assistants { [Experimental("OPENAI001")] - [CodeGenModel("RunObjectIncompleteDetailsReason")] + [CodeGenType("RunObjectIncompleteDetailsReason")] public readonly partial struct RunIncompleteReason { // CUSTOM: Renamed. diff --git a/src/Custom/Assistants/RunModificationOptions.cs b/src/Custom/Assistants/RunModificationOptions.cs index 8b8a125b8..17cddcbea 100644 --- a/src/Custom/Assistants/RunModificationOptions.cs +++ b/src/Custom/Assistants/RunModificationOptions.cs @@ -6,7 +6,7 @@ namespace OpenAI.Assistants; /// Represents additional options available when modifying an existing . /// [Experimental("OPENAI001")] -[CodeGenModel("ModifyRunRequest")] +[CodeGenType("ModifyRunRequest")] public partial class RunModificationOptions { } diff --git a/src/Custom/Assistants/RunStatus.cs b/src/Custom/Assistants/RunStatus.cs index 6075e7460..d2a8cde74 100644 --- a/src/Custom/Assistants/RunStatus.cs +++ b/src/Custom/Assistants/RunStatus.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("RunObjectStatus")] +[CodeGenType("RunObjectStatus")] public readonly partial struct RunStatus { /// diff --git a/src/Custom/Assistants/RunStep.cs b/src/Custom/Assistants/RunStep.cs index 5f24da9e1..bf59f3d82 100644 --- a/src/Custom/Assistants/RunStep.cs +++ b/src/Custom/Assistants/RunStep.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("RunStepObject")] +[CodeGenType("RunStepObject")] public partial class RunStep { // CUSTOM: Made internal. diff --git a/src/Custom/Assistants/RunStepCollectionOrder.cs b/src/Custom/Assistants/RunStepCollectionOrder.cs index 5cc86bd75..e6532a65f 100644 --- a/src/Custom/Assistants/RunStepCollectionOrder.cs +++ b/src/Custom/Assistants/RunStepCollectionOrder.cs @@ -1,17 +1,40 @@ -using System.Diagnostics.CodeAnalysis; +using System; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Assistants; -// CUSTOM: Renamed. [Experimental("OPENAI001")] -[CodeGenModel("ListRunStepsRequestOrder")] -public readonly partial struct RunStepCollectionOrder +public readonly partial struct RunStepCollectionOrder : IEquatable { - // CUSTOM: Renamed. - [CodeGenMember("Asc")] - public static RunStepCollectionOrder Ascending { get; } = new RunStepCollectionOrder(AscValue); + public static RunStepCollectionOrder Ascending { get; } = new RunStepCollectionOrder("asc"); - // CUSTOM: Renamed. - [CodeGenMember("Desc")] - public static RunStepCollectionOrder Descending { get; } = new RunStepCollectionOrder(DescValue); + public static RunStepCollectionOrder Descending { get; } = new RunStepCollectionOrder("desc"); + + private readonly string _value; + private const string AscValue = "asc"; + private const string DescValue = "desc"; + + public RunStepCollectionOrder(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static bool operator ==(RunStepCollectionOrder left, RunStepCollectionOrder right) => left.Equals(right); + + public static bool operator !=(RunStepCollectionOrder left, RunStepCollectionOrder right) => !left.Equals(right); + + public static implicit operator RunStepCollectionOrder(string value) => new RunStepCollectionOrder(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is RunStepCollectionOrder other && Equals(other); + + public bool Equals(RunStepCollectionOrder 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/Custom/Assistants/RunStepDetails.cs b/src/Custom/Assistants/RunStepDetails.cs index e003f0ece..876559167 100644 --- a/src/Custom/Assistants/RunStepDetails.cs +++ b/src/Custom/Assistants/RunStepDetails.cs @@ -4,7 +4,7 @@ namespace OpenAI.Assistants { [Experimental("OPENAI001")] - [CodeGenModel("RunStepObjectStepDetails")] + [CodeGenType("RunStepObjectStepDetails")] public abstract partial class RunStepDetails { public string CreatedMessageId => AsInternalMessageCreation?.InternalMessageId; diff --git a/src/Custom/Assistants/RunStepFileSearchResult.cs b/src/Custom/Assistants/RunStepFileSearchResult.cs index 9146d759d..c9c5b4ba0 100644 --- a/src/Custom/Assistants/RunStepFileSearchResult.cs +++ b/src/Custom/Assistants/RunStepFileSearchResult.cs @@ -4,7 +4,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("RunStepDetailsToolCallsFileSearchResultObject")] +[CodeGenType("RunStepDetailsToolCallsFileSearchResultObject")] public partial class RunStepFileSearchResult { } diff --git a/src/Custom/Assistants/RunStepFileSearchResultContent.cs b/src/Custom/Assistants/RunStepFileSearchResultContent.cs index 992ad6852..968369685 100644 --- a/src/Custom/Assistants/RunStepFileSearchResultContent.cs +++ b/src/Custom/Assistants/RunStepFileSearchResultContent.cs @@ -4,7 +4,7 @@ namespace OpenAI.Assistants; // CUSTOM: Renamed. [Experimental("OPENAI001")] -[CodeGenModel("RunStepDetailsToolCallsFileSearchResultObjectContent")] +[CodeGenType("RunStepDetailsToolCallsFileSearchResultObjectContent")] public partial class RunStepFileSearchResultContent { // CUSTOM: Renamed. diff --git a/src/Custom/Assistants/RunStepFileSearchResultContentKind.cs b/src/Custom/Assistants/RunStepFileSearchResultContentKind.cs index 059dce544..5e53b6ed4 100644 --- a/src/Custom/Assistants/RunStepFileSearchResultContentKind.cs +++ b/src/Custom/Assistants/RunStepFileSearchResultContentKind.cs @@ -4,7 +4,7 @@ namespace OpenAI.Assistants; // CUSTOM: Renamed. [Experimental("OPENAI001")] -[CodeGenModel("RunStepDetailsToolCallsFileSearchResultObjectContentType")] +[CodeGenType("RunStepDetailsToolCallsFileSearchResultObjectContentType")] public enum RunStepFileSearchResultContentKind { Text, diff --git a/src/Custom/Assistants/RunStepKind.cs b/src/Custom/Assistants/RunStepKind.cs index e74539f70..e574cdb93 100644 --- a/src/Custom/Assistants/RunStepKind.cs +++ b/src/Custom/Assistants/RunStepKind.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("RunStepObjectType")] +[CodeGenType("RunStepObjectType")] public enum RunStepKind { // CUSTOM: Renamed. diff --git a/src/Custom/Assistants/RunStepTokenUsage.cs b/src/Custom/Assistants/RunStepTokenUsage.cs index 66f01c908..f5be81732 100644 --- a/src/Custom/Assistants/RunStepTokenUsage.cs +++ b/src/Custom/Assistants/RunStepTokenUsage.cs @@ -5,7 +5,7 @@ namespace OpenAI.Assistants { [Experimental("OPENAI001")] - [CodeGenModel("RunStepCompletionUsage")] + [CodeGenType("RunStepCompletionUsage")] public partial class RunStepTokenUsage { // CUSTOM: Renamed. diff --git a/src/Custom/Assistants/RunStepToolCall.cs b/src/Custom/Assistants/RunStepToolCall.cs index 8d2d34cc1..222165753 100644 --- a/src/Custom/Assistants/RunStepToolCall.cs +++ b/src/Custom/Assistants/RunStepToolCall.cs @@ -4,7 +4,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("RunStepDetailsToolCallsObjectToolCallsObject")] +[CodeGenType("RunStepDetailsToolCallsObjectToolCallsObject")] public partial class RunStepToolCall { private IReadOnlyList _codeInterpreterOutputs; diff --git a/src/Custom/Assistants/RunStepToolCallKind.cs b/src/Custom/Assistants/RunStepToolCallKind.cs index f99fc0a7d..9fe5be2f6 100644 --- a/src/Custom/Assistants/RunStepToolCallKind.cs +++ b/src/Custom/Assistants/RunStepToolCallKind.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("RunStepDetailsToolCallType")] +[CodeGenType("RunStepDetailsToolCallType")] public enum RunStepToolCallKind { CodeInterpreter, diff --git a/src/Custom/Assistants/RunTokenUsage.cs b/src/Custom/Assistants/RunTokenUsage.cs index 9bfc6e9e6..3bb109fd7 100644 --- a/src/Custom/Assistants/RunTokenUsage.cs +++ b/src/Custom/Assistants/RunTokenUsage.cs @@ -5,7 +5,7 @@ namespace OpenAI.Assistants { [Experimental("OPENAI001")] - [CodeGenModel("RunCompletionUsage")] + [CodeGenType("RunCompletionUsage")] public partial class RunTokenUsage { // CUSTOM: Renamed. diff --git a/src/Custom/Assistants/RunTruncationStrategy.cs b/src/Custom/Assistants/RunTruncationStrategy.cs index fe895710d..7a27a422c 100644 --- a/src/Custom/Assistants/RunTruncationStrategy.cs +++ b/src/Custom/Assistants/RunTruncationStrategy.cs @@ -6,7 +6,7 @@ namespace OpenAI.Assistants { /// Controls for how a thread will be truncated prior to the run. Use this to control the intial context window of the run. [Experimental("OPENAI001")] - [CodeGenModel("TruncationObject")] + [CodeGenType("TruncationObject")] [CodeGenSuppress(nameof(RunTruncationStrategy), typeof(InternalTruncationObjectType))] public partial class RunTruncationStrategy { diff --git a/src/Custom/Assistants/Streaming/AsyncStreamingUpdateCollection.cs b/src/Custom/Assistants/Streaming/AsyncStreamingUpdateCollection.cs deleted file mode 100644 index 9fbdce2e8..000000000 --- a/src/Custom/Assistants/Streaming/AsyncStreamingUpdateCollection.cs +++ /dev/null @@ -1,151 +0,0 @@ -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Linq; -using System.Net.ServerSentEvents; -using System.Threading; -using System.Threading.Tasks; - -#nullable enable - -namespace OpenAI.Assistants; - -/// -/// Implementation of collection abstraction over streaming assistant updates. -/// -internal class AsyncStreamingUpdateCollection : AsyncCollectionResult -{ - private readonly Func> _sendRequestAsync; - private readonly CancellationToken _cancellationToken; - - public AsyncStreamingUpdateCollection(Func> sendRequestAsync, - CancellationToken cancellationToken) - { - Argument.AssertNotNull(sendRequestAsync, nameof(sendRequestAsync)); - - _sendRequestAsync = sendRequestAsync; - _cancellationToken = cancellationToken; - } - - public override ContinuationToken? GetContinuationToken(ClientResult page) - // Continuation is not supported for SSE streams. - => null; - - public async override IAsyncEnumerable GetRawPagesAsync() - { - // We don't currently support resuming a dropped connection from the - // last received event, so the response collection has a single element. - yield return await _sendRequestAsync(); - } - - protected async override IAsyncEnumerable GetValuesFromPageAsync(ClientResult page) - { - await using IAsyncEnumerator enumerator = new AsyncStreamingUpdateEnumerator(page, _cancellationToken); - while (await enumerator.MoveNextAsync().ConfigureAwait(false)) - { - yield return enumerator.Current; - } - } - - private sealed class AsyncStreamingUpdateEnumerator : IAsyncEnumerator - { - private static ReadOnlySpan TerminalData => "[DONE]"u8; - - private readonly CancellationToken _cancellationToken; - private readonly PipelineResponse _response; - - // These enumerators represent what is effectively a doubly-nested - // loop over the outer event collection and the inner update collection, - // i.e.: - // foreach (var sse in _events) { - // // get _updates from sse event - // foreach (var update in _updates) { ... } - // } - private IAsyncEnumerator>? _events; - private IEnumerator? _updates; - - private StreamingUpdate? _current; - private bool _started; - - public AsyncStreamingUpdateEnumerator(ClientResult page, CancellationToken cancellationToken) - { - Argument.AssertNotNull(page, nameof(page)); - - _response = page.GetRawResponse(); - _cancellationToken = cancellationToken; - } - - StreamingUpdate IAsyncEnumerator.Current - => _current!; - - async ValueTask IAsyncEnumerator.MoveNextAsync() - { - if (_events is null && _started) - { - throw new ObjectDisposedException(nameof(AsyncStreamingUpdateEnumerator)); - } - - _cancellationToken.ThrowIfCancellationRequested(); - _events ??= CreateEventEnumeratorAsync(); - _started = true; - - if (_updates is not null && _updates.MoveNext()) - { - _current = _updates.Current; - return true; - } - - if (await _events.MoveNextAsync().ConfigureAwait(false)) - { - if (_events.Current.Data.AsSpan().SequenceEqual(TerminalData)) - { - _current = default; - return false; - } - - var updates = StreamingUpdate.FromEvent(_events.Current); - _updates = updates.GetEnumerator(); - - if (_updates.MoveNext()) - { - _current = _updates.Current; - return true; - } - } - - _current = default; - return false; - } - - private IAsyncEnumerator> CreateEventEnumeratorAsync() - { - if (_response.ContentStream is null) - { - throw new InvalidOperationException("Unable to create result from response with null ContentStream"); - } - - IAsyncEnumerable> enumerable = SseParser.Create(_response.ContentStream, (_, bytes) => bytes.ToArray()).EnumerateAsync(); - return enumerable.GetAsyncEnumerator(_cancellationToken); - } - - public async ValueTask DisposeAsync() - { - await DisposeAsyncCore().ConfigureAwait(false); - - GC.SuppressFinalize(this); - } - - private async ValueTask DisposeAsyncCore() - { - if (_events is not null) - { - await _events.DisposeAsync().ConfigureAwait(false); - _events = null; - - // Dispose the response so we don't leave the network connection open. - _response?.Dispose(); - } - } - } -} diff --git a/src/Custom/Assistants/Streaming/RunStepDetailsUpdateCodeInterpreterOutput.cs b/src/Custom/Assistants/Streaming/RunStepDetailsUpdateCodeInterpreterOutput.cs index 77c041f15..68a43165e 100644 --- a/src/Custom/Assistants/Streaming/RunStepDetailsUpdateCodeInterpreterOutput.cs +++ b/src/Custom/Assistants/Streaming/RunStepDetailsUpdateCodeInterpreterOutput.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("RunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject")] +[CodeGenType("RunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject")] public partial class RunStepUpdateCodeInterpreterOutput { /// diff --git a/src/Custom/Assistants/Streaming/StreamingUpdate.cs b/src/Custom/Assistants/Streaming/StreamingUpdate.cs index 9f6a362b8..67e71f293 100644 --- a/src/Custom/Assistants/Streaming/StreamingUpdate.cs +++ b/src/Custom/Assistants/Streaming/StreamingUpdate.cs @@ -1,3 +1,4 @@ +using System.ClientModel.Primitives; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Net.ServerSentEvents; @@ -41,15 +42,16 @@ internal StreamingUpdate(StreamingUpdateReason updateKind) UpdateKind = updateKind; } - internal static IEnumerable FromEvent(SseItem sseItem) + internal static IEnumerable FromSseItem(SseItem sseItem) { StreamingUpdateReason updateKind = StreamingUpdateReasonExtensions.FromSseEventLabel(sseItem.EventType); using JsonDocument dataDocument = JsonDocument.Parse(sseItem.Data); JsonElement e = dataDocument.RootElement; + ModelReaderWriterOptions serializationOptions = ModelReaderWriterOptions.Json; return updateKind switch { - StreamingUpdateReason.ThreadCreated => ThreadUpdate.DeserializeThreadCreationUpdates(e, updateKind), + StreamingUpdateReason.ThreadCreated => ThreadUpdate.DeserializeThreadCreationUpdates(e, updateKind, serializationOptions), StreamingUpdateReason.RunCreated or StreamingUpdateReason.RunQueued or StreamingUpdateReason.RunInProgress @@ -58,20 +60,20 @@ or StreamingUpdateReason.RunIncomplete or StreamingUpdateReason.RunFailed or StreamingUpdateReason.RunCancelling or StreamingUpdateReason.RunCancelled - or StreamingUpdateReason.RunExpired => RunUpdate.DeserializeRunUpdates(e, updateKind), + or StreamingUpdateReason.RunExpired => RunUpdate.DeserializeRunUpdates(e, updateKind, serializationOptions), StreamingUpdateReason.RunRequiresAction => RequiredActionUpdate.DeserializeRequiredActionUpdates(e), StreamingUpdateReason.RunStepCreated or StreamingUpdateReason.RunStepInProgress or StreamingUpdateReason.RunStepCompleted or StreamingUpdateReason.RunStepFailed or StreamingUpdateReason.RunStepCancelled - or StreamingUpdateReason.RunStepExpired => RunStepUpdate.DeserializeRunStepUpdates(e, updateKind), + or StreamingUpdateReason.RunStepExpired => RunStepUpdate.DeserializeRunStepUpdates(e, updateKind, serializationOptions), StreamingUpdateReason.MessageCreated or StreamingUpdateReason.MessageInProgress or StreamingUpdateReason.MessageCompleted - or StreamingUpdateReason.MessageFailed => MessageStatusUpdate.DeserializeMessageStatusUpdates(e, updateKind), - StreamingUpdateReason.RunStepUpdated => RunStepDetailsUpdate.DeserializeRunStepDetailsUpdates(e, updateKind), - StreamingUpdateReason.MessageUpdated => MessageContentUpdate.DeserializeMessageContentUpdates(e, updateKind), + or StreamingUpdateReason.MessageFailed => MessageStatusUpdate.DeserializeMessageStatusUpdates(e, updateKind, serializationOptions), + StreamingUpdateReason.RunStepUpdated => RunStepDetailsUpdate.DeserializeRunStepDetailsUpdates(e, updateKind, serializationOptions), + StreamingUpdateReason.MessageUpdated => MessageContentUpdate.DeserializeMessageContentUpdates(e, updateKind, serializationOptions), _ => null, }; } diff --git a/src/Custom/Assistants/Streaming/StreamingUpdateCollection.cs b/src/Custom/Assistants/Streaming/StreamingUpdateCollection.cs deleted file mode 100644 index 3ddf7d609..000000000 --- a/src/Custom/Assistants/Streaming/StreamingUpdateCollection.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections; -using System.Collections.Generic; -using System.Net.ServerSentEvents; -using System.Threading; - -#nullable enable - -namespace OpenAI.Assistants; - -/// -/// Implementation of collection abstraction over streaming assistant updates. -/// -internal class StreamingUpdateCollection : CollectionResult -{ - private readonly Func _sendRequest; - private readonly CancellationToken _cancellationToken; - - public StreamingUpdateCollection( - Func sendRequest, - CancellationToken cancellationToken) - { - Argument.AssertNotNull(sendRequest, nameof(sendRequest)); - - _sendRequest = sendRequest; - _cancellationToken = cancellationToken; - } - - public override ContinuationToken? GetContinuationToken(ClientResult page) - // Continuation is not supported for SSE streams. - => null; - - public override IEnumerable GetRawPages() - { - // We don't currently support resuming a dropped connection from the - // last received event, so the response collection has a single element. - yield return _sendRequest(); - } - protected override IEnumerable GetValuesFromPage(ClientResult page) - { - using IEnumerator enumerator = new StreamingUpdateEnumerator(page, _cancellationToken); - while (enumerator.MoveNext()) - { - yield return enumerator.Current; - } - } - - private sealed class StreamingUpdateEnumerator : IEnumerator - { - private static ReadOnlySpan TerminalData => "[DONE]"u8; - - private readonly CancellationToken _cancellationToken; - private readonly PipelineResponse _response; - - // These enumerators represent what is effectively a doubly-nested - // loop over the outer event collection and the inner update collection, - // i.e.: - // foreach (var sse in _events) { - // // get _updates from sse event - // foreach (var update in _updates) { ... } - // } - private IEnumerator>? _events; - private IEnumerator? _updates; - - private StreamingUpdate? _current; - private bool _started; - - public StreamingUpdateEnumerator(ClientResult page, CancellationToken cancellationToken) - { - Argument.AssertNotNull(page, nameof(page)); - - _response = page.GetRawResponse(); - _cancellationToken = cancellationToken; - } - - StreamingUpdate IEnumerator.Current - => _current!; - - object IEnumerator.Current => _current!; - - public bool MoveNext() - { - if (_events is null && _started) - { - throw new ObjectDisposedException(nameof(StreamingUpdateEnumerator)); - } - - - _cancellationToken.ThrowIfCancellationRequested(); - _events ??= CreateEventEnumerator(); - _started = true; - - if (_updates is not null && _updates.MoveNext()) - { - _current = _updates.Current; - return true; - } - - if (_events.MoveNext()) - { - if (_events.Current.Data.AsSpan().SequenceEqual(TerminalData)) - { - _current = default; - return false; - } - - var updates = StreamingUpdate.FromEvent(_events.Current); - _updates = updates.GetEnumerator(); - - if (_updates.MoveNext()) - { - _current = _updates.Current; - return true; - } - } - - _current = default; - return false; - } - - private IEnumerator> CreateEventEnumerator() - { - if (_response.ContentStream is null) - { - throw new InvalidOperationException("Unable to create result from response with null ContentStream"); - } - - IEnumerable> enumerable = SseParser.Create(_response.ContentStream, (_, bytes) => bytes.ToArray()).Enumerate(); - return enumerable.GetEnumerator(); - } - - public void Reset() - { - throw new NotSupportedException("Cannot seek back in an SSE stream."); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - private void Dispose(bool disposing) - { - if (disposing && _events is not null) - { - _events.Dispose(); - _events = null; - - // Dispose the response so we don't leave the network connection open. - _response?.Dispose(); - } - } - } -} diff --git a/src/Custom/Assistants/ThreadCreationOptions.cs b/src/Custom/Assistants/ThreadCreationOptions.cs index 82d02e471..7298a4b46 100644 --- a/src/Custom/Assistants/ThreadCreationOptions.cs +++ b/src/Custom/Assistants/ThreadCreationOptions.cs @@ -8,7 +8,7 @@ namespace OpenAI.Assistants; /// Represents additional options available when creating a new . /// [Experimental("OPENAI001")] -[CodeGenModel("CreateThreadRequest")] +[CodeGenType("CreateThreadRequest")] public partial class ThreadCreationOptions { // CUSTOM: reuse a common type for request/response model representations of tool resources diff --git a/src/Custom/Assistants/ThreadDeletionResult.cs b/src/Custom/Assistants/ThreadDeletionResult.cs index a7a8234f1..a31c23169 100644 --- a/src/Custom/Assistants/ThreadDeletionResult.cs +++ b/src/Custom/Assistants/ThreadDeletionResult.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("DeleteThreadResponse")] +[CodeGenType("DeleteThreadResponse")] public partial class ThreadDeletionResult { // CUSTOM: Renamed. diff --git a/src/Custom/Assistants/ThreadMessage.cs b/src/Custom/Assistants/ThreadMessage.cs index 401479440..8d191bcb7 100644 --- a/src/Custom/Assistants/ThreadMessage.cs +++ b/src/Custom/Assistants/ThreadMessage.cs @@ -4,7 +4,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("MessageObject")] +[CodeGenType("MessageObject")] public partial class ThreadMessage { // CUSTOM: Made internal. diff --git a/src/Custom/Assistants/ThreadModificationOptions.cs b/src/Custom/Assistants/ThreadModificationOptions.cs index 31c81001c..9a0d13471 100644 --- a/src/Custom/Assistants/ThreadModificationOptions.cs +++ b/src/Custom/Assistants/ThreadModificationOptions.cs @@ -6,7 +6,7 @@ namespace OpenAI.Assistants; /// Represents additional options available when modifying an existing . /// [Experimental("OPENAI001")] -[CodeGenModel("ModifyThreadRequest")] +[CodeGenType("ModifyThreadRequest")] public partial class ThreadModificationOptions { // CUSTOM: reuse common request/response models for tool resources. Note that modification operations use the diff --git a/src/Custom/Assistants/ThreadRun.cs b/src/Custom/Assistants/ThreadRun.cs index 6b7c41d51..3d4717321 100644 --- a/src/Custom/Assistants/ThreadRun.cs +++ b/src/Custom/Assistants/ThreadRun.cs @@ -10,7 +10,7 @@ namespace OpenAI.Assistants; // hierarchy and formatted into a more intuitive collection for the consumer. [Experimental("OPENAI001")] -[CodeGenModel("RunObject")] +[CodeGenType("RunObject")] public partial class ThreadRun { // CUSTOM: Made internal. diff --git a/src/Custom/Assistants/ToolConstraint.cs b/src/Custom/Assistants/ToolConstraint.cs index e19da8e75..43ab5bd48 100644 --- a/src/Custom/Assistants/ToolConstraint.cs +++ b/src/Custom/Assistants/ToolConstraint.cs @@ -5,7 +5,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("AssistantsNamedToolChoice")] +[CodeGenType("AssistantsNamedToolChoice")] public partial class ToolConstraint { private readonly string _plainTextValue; diff --git a/src/Custom/Assistants/ToolDefinition.cs b/src/Custom/Assistants/ToolDefinition.cs index 020c861bd..396432429 100644 --- a/src/Custom/Assistants/ToolDefinition.cs +++ b/src/Custom/Assistants/ToolDefinition.cs @@ -4,7 +4,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("AssistantToolDefinition")] +[CodeGenType("AssistantToolDefinition")] public abstract partial class ToolDefinition { public static CodeInterpreterToolDefinition CreateCodeInterpreter() diff --git a/src/Custom/Assistants/ToolOutput.cs b/src/Custom/Assistants/ToolOutput.cs index fbdc8c911..345f9bde3 100644 --- a/src/Custom/Assistants/ToolOutput.cs +++ b/src/Custom/Assistants/ToolOutput.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("SubmitToolOutputsRunRequestToolOutput")] +[CodeGenType("SubmitToolOutputsRunRequestToolOutput")] public partial class ToolOutput { /// diff --git a/src/Custom/Assistants/ToolResources.cs b/src/Custom/Assistants/ToolResources.cs index 0cd833266..ca11d0533 100644 --- a/src/Custom/Assistants/ToolResources.cs +++ b/src/Custom/Assistants/ToolResources.cs @@ -5,7 +5,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("AssistantObjectToolResources")] +[CodeGenType("AssistantObjectToolResources1")] [CodeGenSerialization(nameof(FileSearch), "file_search", SerializationValueHook = nameof(SerializeFileSearch))] public partial class ToolResources { diff --git a/src/Custom/Assistants/VectorStoreCreationHelper.cs b/src/Custom/Assistants/VectorStoreCreationHelper.cs index ebba2b8d0..e2faa5e80 100644 --- a/src/Custom/Assistants/VectorStoreCreationHelper.cs +++ b/src/Custom/Assistants/VectorStoreCreationHelper.cs @@ -7,7 +7,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("ToolResourcesFileSearchVectorStore")] +[CodeGenType("ToolResourcesFileSearchVectorStore")] public partial class VectorStoreCreationHelper { [CodeGenMember("ChunkingStrategy")] diff --git a/src/Custom/Audio/AudioClient.cs b/src/Custom/Audio/AudioClient.cs index 8dd2e7efe..9a2247680 100644 --- a/src/Custom/Audio/AudioClient.cs +++ b/src/Custom/Audio/AudioClient.cs @@ -12,8 +12,8 @@ namespace OpenAI.Audio; // - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. // - Suppressed methods that only take the options parameter. /// The service client for OpenAI audio operations. -[CodeGenClient("Audio")] -[CodeGenSuppress("AudioClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[CodeGenType("Audio")] +[CodeGenSuppress("AudioClient", typeof(ClientPipeline), typeof(Uri))] [CodeGenSuppress("CreateSpeechAsync", typeof(SpeechGenerationOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateSpeech", typeof(SpeechGenerationOptions), typeof(CancellationToken))] public partial class AudioClient @@ -157,7 +157,7 @@ public virtual async Task> TranscribeAudioAsync options ??= new(); CreateAudioTranscriptionOptions(audio, audioFilename, ref options); - using MultipartFormDataBinaryContent content = 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()); } @@ -181,7 +181,7 @@ public virtual ClientResult TranscribeAudio(Stream audio, st options ??= new(); CreateAudioTranscriptionOptions(audio, audioFilename, ref options); - using MultipartFormDataBinaryContent content = 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()); } @@ -243,7 +243,7 @@ public virtual async Task> TranslateAudioAsync(St options ??= new(); CreateAudioTranslationOptions(audio, audioFilename, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(audio, audioFilename); + using MultiPartFormDataBinaryContent content = options.ToMultipartContent(audio, audioFilename); ClientResult result = await TranslateAudioAsync(content, content.ContentType, cancellationToken.ToRequestOptions()).ConfigureAwait(false); return ClientResult.FromValue(AudioTranslation.FromResponse(result.GetRawResponse()), result.GetRawResponse()); } @@ -267,7 +267,7 @@ public virtual ClientResult TranslateAudio(Stream audio, strin options ??= new(); CreateAudioTranslationOptions(audio, audioFilename, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(audio, audioFilename); + using MultiPartFormDataBinaryContent content = options.ToMultipartContent(audio, audioFilename); ClientResult result = TranslateAudio(content, content.ContentType, cancellationToken.ToRequestOptions()); return ClientResult.FromValue(AudioTranslation.FromResponse(result.GetRawResponse()), result.GetRawResponse()); } diff --git a/src/Custom/Audio/AudioTranscription.cs b/src/Custom/Audio/AudioTranscription.cs index a8483d33b..8395da987 100644 --- a/src/Custom/Audio/AudioTranscription.cs +++ b/src/Custom/Audio/AudioTranscription.cs @@ -2,7 +2,7 @@ namespace OpenAI.Audio; -[CodeGenModel("CreateTranscriptionResponseVerboseJson")] +[CodeGenType("CreateTranscriptionResponseVerboseJson")] public partial class AudioTranscription { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. diff --git a/src/Custom/Audio/AudioTranscriptionFormat.cs b/src/Custom/Audio/AudioTranscriptionFormat.cs index d5a3aca55..2b49c6682 100644 --- a/src/Custom/Audio/AudioTranscriptionFormat.cs +++ b/src/Custom/Audio/AudioTranscriptionFormat.cs @@ -3,7 +3,7 @@ namespace OpenAI.Audio; /// The format of the transcription. -[CodeGenModel("TranscriptionAudioResponseFormat")] +[CodeGenType("TranscriptionAudioResponseFormat")] public readonly partial struct AudioTranscriptionFormat { // CUSTOM: Hide from browsing as this is equivalent to Simple diff --git a/src/Custom/Audio/AudioTranscriptionOptions.cs b/src/Custom/Audio/AudioTranscriptionOptions.cs index 1230af13f..4e6818424 100644 --- a/src/Custom/Audio/AudioTranscriptionOptions.cs +++ b/src/Custom/Audio/AudioTranscriptionOptions.cs @@ -5,7 +5,7 @@ namespace OpenAI.Audio; -[CodeGenModel("CreateTranscriptionRequest")] +[CodeGenType("CreateTranscriptionRequest")] [CodeGenSuppress("AudioTranscriptionOptions", typeof(BinaryData), typeof(InternalCreateTranscriptionRequestModel))] public partial class AudioTranscriptionOptions { @@ -31,9 +31,9 @@ public AudioTranscriptionOptions() /// public AudioTimestampGranularities TimestampGranularities { get; set; } - internal MultipartFormDataBinaryContent ToMultipartContent(Stream audio, string audioFilename) + internal MultiPartFormDataBinaryContent ToMultipartContent(Stream audio, string audioFilename) { - MultipartFormDataBinaryContent content = new(); + MultiPartFormDataBinaryContent content = new(); content.Add(audio, "file", audioFilename); content.Add(Model.ToString(), "model"); diff --git a/src/Custom/Audio/AudioTranslation.cs b/src/Custom/Audio/AudioTranslation.cs index d5dc6f060..9a7b51f90 100644 --- a/src/Custom/Audio/AudioTranslation.cs +++ b/src/Custom/Audio/AudioTranslation.cs @@ -2,7 +2,7 @@ namespace OpenAI.Audio; -[CodeGenModel("CreateTranslationResponseVerboseJson")] +[CodeGenType("CreateTranslationResponseVerboseJson")] public partial class AudioTranslation { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. diff --git a/src/Custom/Audio/AudioTranslationFormat.cs b/src/Custom/Audio/AudioTranslationFormat.cs index 969a65413..998f35732 100644 --- a/src/Custom/Audio/AudioTranslationFormat.cs +++ b/src/Custom/Audio/AudioTranslationFormat.cs @@ -3,7 +3,7 @@ namespace OpenAI.Audio; /// The format of the transcription. -[CodeGenModel("TranslationAudioResponseFormat")] +[CodeGenType("TranslationAudioResponseFormat")] public readonly partial struct AudioTranslationFormat { // CUSTOM: Hide from browsing as this is equivalent to Simple diff --git a/src/Custom/Audio/AudioTranslationOptions.cs b/src/Custom/Audio/AudioTranslationOptions.cs index 14acc2aa1..b1d3f7609 100644 --- a/src/Custom/Audio/AudioTranslationOptions.cs +++ b/src/Custom/Audio/AudioTranslationOptions.cs @@ -3,7 +3,7 @@ namespace OpenAI.Audio; -[CodeGenModel("CreateTranslationRequest")] +[CodeGenType("CreateTranslationRequest")] [CodeGenSuppress("AudioTranslationOptions", typeof(BinaryData), typeof(InternalCreateTranslationRequestModel))] public partial class AudioTranslationOptions { @@ -21,9 +21,9 @@ public AudioTranslationOptions() { } - internal MultipartFormDataBinaryContent ToMultipartContent(Stream audio, string audioFilename) + internal MultiPartFormDataBinaryContent ToMultipartContent(Stream audio, string audioFilename) { - MultipartFormDataBinaryContent content = new(); + MultiPartFormDataBinaryContent content = new(); content.Add(audio, "file", audioFilename); content.Add(Model.ToString(), "model"); diff --git a/src/Custom/Audio/GeneratedSpeechFormat.cs b/src/Custom/Audio/GeneratedSpeechFormat.cs index 8ef097051..26fb17bac 100644 --- a/src/Custom/Audio/GeneratedSpeechFormat.cs +++ b/src/Custom/Audio/GeneratedSpeechFormat.cs @@ -1,7 +1,7 @@ namespace OpenAI.Audio; /// The audio format in which to generate the speech. -[CodeGenModel("CreateSpeechRequestResponseFormat")] +[CodeGenType("CreateSpeechRequestResponseFormat")] public readonly partial struct GeneratedSpeechFormat { } \ No newline at end of file diff --git a/src/Custom/Audio/GeneratedSpeechVoice.cs b/src/Custom/Audio/GeneratedSpeechVoice.cs index cecbea1bb..5a28431cd 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. /// -[CodeGenModel("CreateSpeechRequestVoice")] +[CodeGenType("CreateSpeechRequestVoice")] 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 909339d7a..dbab1b779 100644 --- a/src/Custom/Audio/Internal/GeneratorStubs.cs +++ b/src/Custom/Audio/Internal/GeneratorStubs.cs @@ -2,29 +2,29 @@ namespace OpenAI.Audio; // CUSTOM: Made internal. -[CodeGenModel("CreateSpeechRequestModel")] +[CodeGenType("CreateSpeechRequestModel")] internal readonly partial struct InternalCreateSpeechRequestModel { } -[CodeGenModel("CreateTranscriptionRequestModel")] +[CodeGenType("CreateTranscriptionRequestModel")] internal readonly partial struct InternalCreateTranscriptionRequestModel { } -[CodeGenModel("CreateTranscriptionRequestTimestampGranularities")] +[CodeGenType("CreateTranscriptionRequestTimestampGranularities")] internal readonly partial struct InternalCreateTranscriptionRequestTimestampGranularities { } -[CodeGenModel("CreateTranscriptionResponseJson")] +[CodeGenType("CreateTranscriptionResponseJson")] internal partial class InternalCreateTranscriptionResponseJson { } -[CodeGenModel("CreateTranscriptionResponseVerboseJsonTask")] +[CodeGenType("CreateTranscriptionResponseVerboseJsonTask")] internal readonly partial struct InternalCreateTranscriptionResponseVerboseJsonTask { } -[CodeGenModel("CreateTranslationRequestModel")] +[CodeGenType("CreateTranslationRequestModel")] internal readonly partial struct InternalCreateTranslationRequestModel { } -[CodeGenModel("CreateTranslationResponseJson")] +[CodeGenType("CreateTranslationResponseJson")] internal partial class InternalCreateTranslationResponseJson { } -[CodeGenModel("CreateTranslationResponseVerboseJsonTask")] +[CodeGenType("CreateTranslationResponseVerboseJsonTask")] internal readonly partial struct InternalCreateTranslationResponseVerboseJsonTask { } -[CodeGenModel("AudioResponseFormat")] +[CodeGenType("AudioResponseFormat")] internal readonly partial struct InternalAudioResponseFormat { } \ No newline at end of file diff --git a/src/Custom/Audio/SpeechGenerationOptions.cs b/src/Custom/Audio/SpeechGenerationOptions.cs index dc94bc72c..409851900 100644 --- a/src/Custom/Audio/SpeechGenerationOptions.cs +++ b/src/Custom/Audio/SpeechGenerationOptions.cs @@ -1,7 +1,7 @@ namespace OpenAI.Audio; /// The options to configure text-to-speech audio generation. -[CodeGenModel("CreateSpeechRequest")] +[CodeGenType("CreateSpeechRequest")] [CodeGenSuppress("SpeechGenerationOptions", typeof(InternalCreateSpeechRequestModel), typeof(string), typeof(GeneratedSpeechVoice))] public partial class SpeechGenerationOptions { diff --git a/src/Custom/Audio/TranscribedSegment.cs b/src/Custom/Audio/TranscribedSegment.cs index ab11007c3..48af7a52f 100644 --- a/src/Custom/Audio/TranscribedSegment.cs +++ b/src/Custom/Audio/TranscribedSegment.cs @@ -5,7 +5,7 @@ namespace OpenAI.Audio; /// A segment of the transcribed audio. -[CodeGenModel("TranscriptionSegment")] +[CodeGenType("TranscriptionSegment")] [StructLayout(LayoutKind.Auto)] public readonly partial struct TranscribedSegment { diff --git a/src/Custom/Audio/TranscribedWord.cs b/src/Custom/Audio/TranscribedWord.cs index 5b0d76c4f..25c087ce0 100644 --- a/src/Custom/Audio/TranscribedWord.cs +++ b/src/Custom/Audio/TranscribedWord.cs @@ -5,7 +5,7 @@ namespace OpenAI.Audio; /// A word of the transcribed audio. -[CodeGenModel("TranscriptionWord")] +[CodeGenType("TranscriptionWord")] [StructLayout(LayoutKind.Auto)] public readonly partial struct TranscribedWord { diff --git a/src/Custom/Batch/BatchClient.cs b/src/Custom/Batch/BatchClient.cs index c6f6fd867..2729490fa 100644 --- a/src/Custom/Batch/BatchClient.cs +++ b/src/Custom/Batch/BatchClient.cs @@ -13,8 +13,8 @@ namespace OpenAI.Batch; // - Suppressed convenience methods for now. /// The service client for OpenAI batch operations. [Experimental("OPENAI001")] -[CodeGenClient("Batches")] -[CodeGenSuppress("BatchClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[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(BinaryContent), typeof(RequestOptions))] @@ -81,6 +81,6 @@ protected internal BatchClient(ClientPipeline pipeline, OpenAIClientOptions opti internal virtual CreateBatchOperation CreateCreateBatchOperation(string batchId, string status, PipelineResponse response) { - return new CreateBatchOperation(Pipeline, _endpoint, batchId, status, response); + return new CreateBatchOperation(this, _endpoint, batchId, status, response); } } diff --git a/src/Custom/Batch/CreateBatchOperation.Protocol.cs b/src/Custom/Batch/CreateBatchOperation.Protocol.cs index 2a096567c..7c9b4041c 100644 --- a/src/Custom/Batch/CreateBatchOperation.Protocol.cs +++ b/src/Custom/Batch/CreateBatchOperation.Protocol.cs @@ -17,20 +17,19 @@ namespace OpenAI.Batch; [Experimental("OPENAI001")] public class CreateBatchOperation : OperationResult { - private readonly ClientPipeline _pipeline; + private readonly BatchClient _parentClient; private readonly Uri _endpoint; - private readonly string _batchId; internal CreateBatchOperation( - ClientPipeline pipeline, + BatchClient parentClient, Uri endpoint, string batchId, string status, PipelineResponse response) - : base(response) + : base(response) { - _pipeline = pipeline; + _parentClient = parentClient; _endpoint = endpoint; _batchId = batchId; @@ -160,8 +159,8 @@ private static bool GetHasCompleted(string? status) /// The response returned from the service. public virtual async Task GetBatchAsync(RequestOptions? options) { - using PipelineMessage message = CreateRetrieveBatchRequest(_batchId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using PipelineMessage message = _parentClient.CreateRetrieveBatchRequest(_batchId, options); + return ClientResult.FromResponse(await _parentClient.Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } /// @@ -172,8 +171,8 @@ public virtual async Task GetBatchAsync(RequestOptions? options) /// The response returned from the service. public virtual ClientResult GetBatch(RequestOptions? options) { - using PipelineMessage message = CreateRetrieveBatchRequest(_batchId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + using PipelineMessage message = _parentClient.CreateRetrieveBatchRequest(_batchId, options); + return ClientResult.FromResponse(_parentClient.Pipeline.ProcessMessage(message, options)); } /// @@ -184,8 +183,8 @@ public virtual ClientResult GetBatch(RequestOptions? options) /// The response returned from the service. public virtual async Task CancelAsync(RequestOptions? options) { - using PipelineMessage message = CreateCancelBatchRequest(_batchId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using PipelineMessage message = _parentClient.CreateCancelBatchRequest(_batchId, options); + return ClientResult.FromResponse(await _parentClient.Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } /// @@ -196,43 +195,7 @@ public virtual async Task CancelAsync(RequestOptions? options) /// The response returned from the service. public virtual ClientResult Cancel(RequestOptions? options) { - using PipelineMessage message = CreateCancelBatchRequest(_batchId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - internal virtual PipelineMessage CreateRetrieveBatchRequest(string batchId, 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("/batches/", false); - uri.AppendPath(batchId, true); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; + using PipelineMessage message = _parentClient.CreateCancelBatchRequest(_batchId, options); + return ClientResult.FromResponse(_parentClient.Pipeline.ProcessMessage(message, options)); } - - internal virtual PipelineMessage CreateCancelBatchRequest(string batchId, 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("/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; - } - - private static PipelineMessageClassifier? _pipelineMessageClassifier200; - private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); } \ No newline at end of file diff --git a/src/Custom/Batch/Internal/GeneratorStubs.cs b/src/Custom/Batch/Internal/GeneratorStubs.cs index a3675b6f1..233a1f056 100644 --- a/src/Custom/Batch/Internal/GeneratorStubs.cs +++ b/src/Custom/Batch/Internal/GeneratorStubs.cs @@ -2,53 +2,53 @@ namespace OpenAI.Batch; // CUSTOM: Made internal. -[CodeGenModel("CreateBatchRequestCompletionWindow")] +[CodeGenType("CreateBatchRequestCompletionWindow")] internal readonly partial struct InternalBatchCompletionTimeframe { } -[CodeGenModel("BatchErrorsDatum")] +[CodeGenType("BatchErrorsDatum")] internal partial class InternalBatchError { } -[CodeGenModel("BatchErrors")] +[CodeGenType("BatchErrors")] internal partial class InternalBatchErrors { } -[CodeGenModel("BatchErrorsObject")] +[CodeGenType("BatchErrorsObject")] internal readonly partial struct InternalBatchErrorsObject { } -[CodeGenModel("Batch")] +[CodeGenType("Batch")] internal partial class InternalBatchJob { } -[CodeGenModel("BatchObject")] +[CodeGenType("BatchObject")] internal readonly partial struct InternalBatchObject { } -[CodeGenModel("BatchRequestCounts")] +[CodeGenType("BatchRequestCounts")] internal partial class InternalBatchRequestCounts { } -[CodeGenModel("BatchRequestInput")] +[CodeGenType("BatchRequestInput")] internal partial class InternalBatchRequestInput { } -[CodeGenModel("BatchRequestInputMethod")] +[CodeGenType("BatchRequestInputMethod")] internal readonly partial struct InternalBatchRequestInputMethod { } -[CodeGenModel("BatchRequestOutput")] +[CodeGenType("BatchRequestOutput")] internal partial class InternalBatchRequestOutput { } -[CodeGenModel("BatchRequestOutputError")] +[CodeGenType("BatchRequestOutputError1")] internal partial class InternalBatchRequestOutputError { } -[CodeGenModel("BatchRequestOutputResponse")] +[CodeGenType("BatchRequestOutputResponse1")] internal partial class InternalBatchRequestOutputResponse { } -[CodeGenModel("BatchStatus")] +[CodeGenType("BatchStatus")] internal readonly partial struct InternalBatchStatus { } -[CodeGenModel("CreateBatchRequest")] +[CodeGenType("CreateBatchRequest")] internal partial class InternalCreateBatchRequest { } -[CodeGenModel("CreateBatchRequestEndpoint")] +[CodeGenType("CreateBatchRequestEndpoint")] internal readonly partial struct InternalCreateBatchRequestEndpoint { } -[CodeGenModel("ListBatchesResponse")] +[CodeGenType("ListBatchesResponse")] internal partial class InternalListBatchesResponse { } -[CodeGenModel("ListBatchesResponseObject")] +[CodeGenType("ListBatchesResponseObject")] internal readonly partial struct InternalListBatchesResponseObject { } \ No newline at end of file diff --git a/src/Custom/Chat/ChatAudioOptions.cs b/src/Custom/Chat/ChatAudioOptions.cs index 03b4f6a51..d0b7afeaa 100644 --- a/src/Custom/Chat/ChatAudioOptions.cs +++ b/src/Custom/Chat/ChatAudioOptions.cs @@ -11,7 +11,7 @@ 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. /// -[CodeGenModel("CreateChatCompletionRequestAudio")] +[CodeGenType("CreateChatCompletionRequestAudio1")] public partial class ChatAudioOptions { // CUSTOM: Renamed. diff --git a/src/Custom/Chat/ChatClient.cs b/src/Custom/Chat/ChatClient.cs index cff46f3b5..6befdfc5c 100644 --- a/src/Custom/Chat/ChatClient.cs +++ b/src/Custom/Chat/ChatClient.cs @@ -14,8 +14,8 @@ namespace OpenAI.Chat; // - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. // - Suppressed methods that only take the options parameter. /// The service client for OpenAI chat operations. -[CodeGenClient("Chat")] -[CodeGenSuppress("ChatClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[CodeGenType("Chat")] +[CodeGenSuppress("ChatClient", typeof(ClientPipeline), typeof(Uri))] [CodeGenSuppress("CreateChatCompletionAsync", typeof(ChatCompletionOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateChatCompletion", typeof(ChatCompletionOptions), typeof(CancellationToken))] public partial class ChatClient @@ -188,10 +188,10 @@ public virtual AsyncCollectionResult CompleteChat CreateChatCompletionOptions(messages, ref options, stream: true); using BinaryContent content = options; - - async Task sendRequestAsync() => - await CompleteChatAsync(content, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false); - return new InternalAsyncStreamingChatCompletionUpdateCollection(sendRequestAsync, cancellationToken); + return new AsyncSseUpdateCollection( + async () => await CompleteChatAsync(content, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), + StreamingChatCompletionUpdate.DeserializeStreamingChatCompletionUpdate, + cancellationToken); } /// @@ -215,8 +215,10 @@ public virtual CollectionResult CompleteChatStrea CreateChatCompletionOptions(messages, ref options, stream: true); using BinaryContent content = options; - ClientResult sendRequest() => CompleteChat(content, cancellationToken.ToRequestOptions(streaming: true)); - return new InternalStreamingChatCompletionUpdateCollection(sendRequest, cancellationToken); + return new SseUpdateCollection( + () => CompleteChat(content, cancellationToken.ToRequestOptions(streaming: true)), + StreamingChatCompletionUpdate.DeserializeStreamingChatCompletionUpdate, + cancellationToken); } /// diff --git a/src/Custom/Chat/ChatCompletion.cs b/src/Custom/Chat/ChatCompletion.cs index bb57e3c0f..cb0d45451 100644 --- a/src/Custom/Chat/ChatCompletion.cs +++ b/src/Custom/Chat/ChatCompletion.cs @@ -1,10 +1,11 @@ using System; using System.Collections.Generic; +using System.Linq; namespace OpenAI.Chat; /// A chat completion generated by the model. -[CodeGenModel("CreateChatCompletionResponse")] +[CodeGenType("CreateChatCompletionResponse")] public partial class ChatCompletion { private IReadOnlyList _contentTokenLogProbabilities; @@ -87,4 +88,7 @@ public partial class ChatCompletion /// The audio response generated by the model. public ChatOutputAudio OutputAudio => Choices[0].Message.Audio; + + public IReadOnlyList Annotations + => [.. Choices[0].Message.Annotations]; } diff --git a/src/Custom/Chat/ChatCompletionOptions.cs b/src/Custom/Chat/ChatCompletionOptions.cs index f23abf28a..fa02f9f49 100644 --- a/src/Custom/Chat/ChatCompletionOptions.cs +++ b/src/Custom/Chat/ChatCompletionOptions.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat; /// /// Request-level options for chat completion. /// -[CodeGenModel("CreateChatCompletionRequest")] +[CodeGenType("CreateChatCompletionRequest")] [CodeGenSuppress("ChatCompletionOptions", typeof(IEnumerable), typeof(InternalCreateChatCompletionRequestModel?))] [CodeGenSerialization(nameof(Messages), SerializationValueHook = nameof(SerializeMessagesValue))] [CodeGenSerialization(nameof(StopSequences), SerializationValueHook = nameof(SerializeStopSequencesValue), DeserializationValueHook = nameof(DeserializeStopSequencesValue))] @@ -109,7 +109,7 @@ public ChatCompletionOptions() // CUSTOM: Renamed. /// - /// Whether to enable parallel function calling during tool use. + /// Whether to enable parallel function calling during tool use. /// /// /// Assumed true if not otherwise specified. diff --git a/src/Custom/Chat/ChatFinishReason.cs b/src/Custom/Chat/ChatFinishReason.cs index 85690c961..0debf3489 100644 --- a/src/Custom/Chat/ChatFinishReason.cs +++ b/src/Custom/Chat/ChatFinishReason.cs @@ -37,7 +37,7 @@ namespace OpenAI.Chat; /// /// /// -[CodeGenModel("CreateChatCompletionResponseChoiceFinishReason1")] +[CodeGenType("CreateChatCompletionResponseChoiceFinishReason1")] public enum ChatFinishReason { /// diff --git a/src/Custom/Chat/ChatFunction.cs b/src/Custom/Chat/ChatFunction.cs index c3f309063..d66303ccc 100644 --- a/src/Custom/Chat/ChatFunction.cs +++ b/src/Custom/Chat/ChatFunction.cs @@ -6,7 +6,7 @@ namespace OpenAI.Chat; /// Represents the definition of a function that the model may call, as supplied in a chat completion request. /// [Obsolete($"This class is obsolete. Please use {nameof(ChatTool)} instead.")] -[CodeGenModel("ChatCompletionFunctions")] +[CodeGenType("ChatCompletionFunctions")] [CodeGenSuppress("ChatFunction", typeof(string))] public partial class ChatFunction { diff --git a/src/Custom/Chat/ChatFunctionCall.cs b/src/Custom/Chat/ChatFunctionCall.cs index 12ece7882..091a2855f 100644 --- a/src/Custom/Chat/ChatFunctionCall.cs +++ b/src/Custom/Chat/ChatFunctionCall.cs @@ -20,7 +20,7 @@ namespace OpenAI.Chat; /// /// [Obsolete($"This class is obsolete. Please use {nameof(ChatToolCall)} instead.")] -[CodeGenModel("ChatCompletionRequestAssistantMessageFunctionCall")] +[CodeGenType("ChatCompletionRequestAssistantMessageFunctionCall1")] [CodeGenSerialization(nameof(FunctionArguments), SerializationValueHook = nameof(SerializeFunctionArgumentsValue), DeserializationValueHook = nameof(DeserializeFunctionArgumentsValue))] public partial class ChatFunctionCall { @@ -32,7 +32,7 @@ public partial class ChatFunctionCall // CUSTOM: // - Renamed. // - Changed type from string to BinaryData. - /// + /// /// The arguments to call the function with, as generated by the model in JSON format. Note /// that the model does not always generate valid JSON, and may hallucinate parameters not /// defined by your function schema. Validate the arguments in your code before calling your diff --git a/src/Custom/Chat/ChatFunctionChoice.cs b/src/Custom/Chat/ChatFunctionChoice.cs index 248dfb662..836076731 100644 --- a/src/Custom/Chat/ChatFunctionChoice.cs +++ b/src/Custom/Chat/ChatFunctionChoice.cs @@ -7,7 +7,7 @@ namespace OpenAI.Chat; /// Represents a desired manner in which the model should use the functions defined in a chat completion request. /// [Obsolete($"This class is obsolete. Please use {nameof(ChatToolChoice)} instead.")] -[CodeGenModel("ChatCompletionFunctionChoice")] +[CodeGenType("ChatCompletionFunctionChoice")] [CodeGenSuppress("ChatFunctionChoice", typeof(IDictionary))] public partial class ChatFunctionChoice { diff --git a/src/Custom/Chat/ChatImageDetailLevel.cs b/src/Custom/Chat/ChatImageDetailLevel.cs index 5676bc43a..90dcaa295 100644 --- a/src/Custom/Chat/ChatImageDetailLevel.cs +++ b/src/Custom/Chat/ChatImageDetailLevel.cs @@ -4,7 +4,7 @@ namespace OpenAI.Chat; /// The level of detail with which the model should process the image and generate its textual understanding of /// it. Learn more in the vision guide. /// -[CodeGenModel("ChatCompletionRequestMessageContentPartImageImageUrlDetail")] +[CodeGenType("ChatCompletionRequestMessageContentPartImageImageUrlDetail")] public readonly partial struct ChatImageDetailLevel { } diff --git a/src/Custom/Chat/ChatInputAudioFormat.cs b/src/Custom/Chat/ChatInputAudioFormat.cs index cd32981ed..c28d7be5d 100644 --- a/src/Custom/Chat/ChatInputAudioFormat.cs +++ b/src/Custom/Chat/ChatInputAudioFormat.cs @@ -4,7 +4,7 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatCompletionRequestMessageContentPartAudioInputAudioFormat")] +[CodeGenType("ChatCompletionRequestMessageContentPartAudioInputAudioFormat")] public readonly partial struct ChatInputAudioFormat { diff --git a/src/Custom/Chat/ChatInputTokenUsageDetails.cs b/src/Custom/Chat/ChatInputTokenUsageDetails.cs index 9e10f6e32..19eddd67b 100644 --- a/src/Custom/Chat/ChatInputTokenUsageDetails.cs +++ b/src/Custom/Chat/ChatInputTokenUsageDetails.cs @@ -1,7 +1,7 @@ namespace OpenAI.Chat; /// A breakdown of the number of tokens used in the input as reported in . -[CodeGenModel("CompletionUsagePromptTokensDetails")] +[CodeGenType("CompletionUsagePromptTokensDetails")] public partial class ChatInputTokenUsageDetails { // CUSTOM: Renamed. diff --git a/src/Custom/Chat/ChatMessageAnnotation.cs b/src/Custom/Chat/ChatMessageAnnotation.cs new file mode 100644 index 000000000..6ddfcb0a1 --- /dev/null +++ b/src/Custom/Chat/ChatMessageAnnotation.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; + +namespace OpenAI.Chat; + +[CodeGenType("ChatCompletionResponseMessageAnnotation")] +public partial class ChatMessageAnnotation +{ + public int StartIndex => UrlCitation?.StartIndex + ?? 0; + public int EndIndex => UrlCitation?.EndIndex + ?? 0; + public Uri WebResourceUri => UrlCitation?.Url; + public string WebResourceTitle => UrlCitation?.Title; + + [CodeGenMember("UrlCitation")] + internal InternalChatCompletionResponseMessageAnnotationUrlCitation UrlCitation { get; } + + [CodeGenMember("Type")] + internal InternalChatCompletionResponseMessageAnnotationType Type { get; } = "url_citation"; + +} \ No newline at end of file diff --git a/src/Custom/Chat/ChatMessageContent.cs b/src/Custom/Chat/ChatMessageContent.cs index 54868ae32..aa810a8df 100644 --- a/src/Custom/Chat/ChatMessageContent.cs +++ b/src/Custom/Chat/ChatMessageContent.cs @@ -5,7 +5,7 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatMessageContent")] +[CodeGenType("ChatMessageContent")] public partial class ChatMessageContent : Collection { public ChatMessageContent() @@ -28,6 +28,10 @@ public ChatMessageContent(params ChatMessageContentPart[] contentParts) { } + internal ChatMessageContent(IDictionary additionalBinaryDataProperties) + : this() + { } + internal bool IsInnerCollectionDefined() { return !(Items is ChangeTrackingList changeTrackingList && changeTrackingList.IsUndefined); diff --git a/src/Custom/Chat/ChatMessageContentPart.cs b/src/Custom/Chat/ChatMessageContentPart.cs index abcc1aa03..e4b009215 100644 --- a/src/Custom/Chat/ChatMessageContentPart.cs +++ b/src/Custom/Chat/ChatMessageContentPart.cs @@ -25,7 +25,7 @@ namespace OpenAI.Chat; /// /// /// -[CodeGenModel("ChatMessageContentPart")] +[CodeGenType("ChatMessageContentPart")] [CodeGenSuppress("ChatMessageContentPart", typeof(IDictionary))] public partial class ChatMessageContentPart { diff --git a/src/Custom/Chat/ChatMessageRole.cs b/src/Custom/Chat/ChatMessageRole.cs index 53dce4c77..e238e81f0 100644 --- a/src/Custom/Chat/ChatMessageRole.cs +++ b/src/Custom/Chat/ChatMessageRole.cs @@ -54,7 +54,7 @@ namespace OpenAI.Chat; /// /// /// -[CodeGenModel("ChatCompletionRole")] +[CodeGenType("ChatCompletionRole")] public enum ChatMessageRole { /// diff --git a/src/Custom/Chat/ChatOutputAudio.cs b/src/Custom/Chat/ChatOutputAudio.cs index 1c151bc93..7c281cd97 100644 --- a/src/Custom/Chat/ChatOutputAudio.cs +++ b/src/Custom/Chat/ChatOutputAudio.cs @@ -7,7 +7,7 @@ namespace OpenAI.Chat; /// /// Represents the audio output generated by the model as part of a chat completion response. /// -[CodeGenModel("ChatCompletionResponseMessageAudio")] +[CodeGenType("ChatCompletionResponseMessageAudio1")] public partial class ChatOutputAudio { // CUSTOM: Renamed. diff --git a/src/Custom/Chat/ChatOutputAudioFormat.cs b/src/Custom/Chat/ChatOutputAudioFormat.cs index 12cb5e909..51007b9c8 100644 --- a/src/Custom/Chat/ChatOutputAudioFormat.cs +++ b/src/Custom/Chat/ChatOutputAudioFormat.cs @@ -8,7 +8,7 @@ namespace OpenAI.Chat; /// Specifies the audio format the model should use when generating output audio as part of a chat completion /// response. /// -[CodeGenModel("CreateChatCompletionRequestAudioFormat")] +[CodeGenType("CreateChatCompletionRequestAudioFormat")] public readonly partial struct ChatOutputAudioFormat { diff --git a/src/Custom/Chat/ChatOutputAudioReference.cs b/src/Custom/Chat/ChatOutputAudioReference.cs index 2991ca107..2efae4c84 100644 --- a/src/Custom/Chat/ChatOutputAudioReference.cs +++ b/src/Custom/Chat/ChatOutputAudioReference.cs @@ -14,7 +14,7 @@ namespace OpenAI.Chat; /// responses, respectively. The constructor overload can also be /// used to automatically populate the appropriate properties from a instance. /// -[CodeGenModel("ChatCompletionRequestAssistantMessageAudio")] +[CodeGenType("ChatCompletionRequestAssistantMessageAudio1")] public partial class ChatOutputAudioReference { } \ No newline at end of file diff --git a/src/Custom/Chat/ChatOutputAudioVoice.cs b/src/Custom/Chat/ChatOutputAudioVoice.cs index 4d8fc3bd1..5b6902978 100644 --- a/src/Custom/Chat/ChatOutputAudioVoice.cs +++ b/src/Custom/Chat/ChatOutputAudioVoice.cs @@ -7,7 +7,7 @@ namespace OpenAI.Chat; /// /// Specifies the available voices that the model can use when generating output audio as part of a chat completion. /// -[CodeGenModel("CreateChatCompletionRequestAudioVoice")] +[CodeGenType("CreateChatCompletionRequestAudioVoice")] public readonly partial struct ChatOutputAudioVoice { diff --git a/src/Custom/Chat/ChatOutputPrediction.cs b/src/Custom/Chat/ChatOutputPrediction.cs index d355c4d38..a564591af 100644 --- a/src/Custom/Chat/ChatOutputPrediction.cs +++ b/src/Custom/Chat/ChatOutputPrediction.cs @@ -4,7 +4,7 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatOutputPrediction")] +[CodeGenType("ChatOutputPrediction")] public partial class ChatOutputPrediction { public static ChatOutputPrediction CreateStaticContentPrediction(IEnumerable staticContentParts) diff --git a/src/Custom/Chat/ChatOutputTokenUsageDetails.cs b/src/Custom/Chat/ChatOutputTokenUsageDetails.cs index 27bac3698..ea402a2e5 100644 --- a/src/Custom/Chat/ChatOutputTokenUsageDetails.cs +++ b/src/Custom/Chat/ChatOutputTokenUsageDetails.cs @@ -1,11 +1,11 @@ namespace OpenAI.Chat; /// A breakdown of the number of tokens used to generate the output as reported in . -[CodeGenModel("CompletionUsageCompletionTokensDetails")] +[CodeGenType("CompletionUsageCompletionTokensDetails")] public partial class ChatOutputTokenUsageDetails { // CUSTOM: Renamed. - /// The number of tokens consumed internally by the model for the purpose of reasoning. + /// The number of tokens consumed internally by the model for the purpose of reasoning. /// Only applicable to models with reasoning capabilities, such as the OpenAI o1 series. [CodeGenMember("ReasoningTokens")] public int ReasoningTokenCount { get; } diff --git a/src/Custom/Chat/ChatReasoningEffortLevel.cs b/src/Custom/Chat/ChatReasoningEffortLevel.cs index 8f11b7d71..77add09ba 100644 --- a/src/Custom/Chat/ChatReasoningEffortLevel.cs +++ b/src/Custom/Chat/ChatReasoningEffortLevel.cs @@ -4,6 +4,6 @@ namespace OpenAI.Chat; -[CodeGenModel("CreateChatCompletionRequestReasoningEffort")] +[CodeGenType("ReasoningEffort")] public readonly partial struct ChatReasoningEffortLevel {} \ No newline at end of file diff --git a/src/Custom/Chat/ChatResponseFormat.cs b/src/Custom/Chat/ChatResponseFormat.cs index eb1f0f39d..c7cbe9f14 100644 --- a/src/Custom/Chat/ChatResponseFormat.cs +++ b/src/Custom/Chat/ChatResponseFormat.cs @@ -21,7 +21,7 @@ namespace OpenAI.Chat; /// /// /// -[CodeGenModel("ChatResponseFormat")] +[CodeGenType("ChatResponseFormat")] public partial class ChatResponseFormat { /// Creates a new requesting plain text. @@ -86,7 +86,7 @@ public partial class ChatResponseFormat /// in the /// structured outputs guide. /// - /// + /// /// or is null. /// is an empty string, and was expected to be non-empty. public static ChatResponseFormat CreateJsonSchemaFormat(string jsonSchemaFormatName, BinaryData jsonSchema, string jsonSchemaFormatDescription = null, bool? jsonSchemaIsStrict = null) diff --git a/src/Custom/Chat/ChatTokenLogProbabilityDetails.cs b/src/Custom/Chat/ChatTokenLogProbabilityDetails.cs index a7896f567..a241ed79c 100644 --- a/src/Custom/Chat/ChatTokenLogProbabilityDetails.cs +++ b/src/Custom/Chat/ChatTokenLogProbabilityDetails.cs @@ -7,7 +7,7 @@ namespace OpenAI.Chat; /// Represents a single token's log probability information, as requested via /// . /// -[CodeGenModel("ChatCompletionTokenLogprob")] +[CodeGenType("ChatCompletionTokenLogprob")] public partial class ChatTokenLogProbabilityDetails { // CUSTOM: Renamed. diff --git a/src/Custom/Chat/ChatTokenTopLogProbabilityDetails.cs b/src/Custom/Chat/ChatTokenTopLogProbabilityDetails.cs index 3260ce645..586179ca7 100644 --- a/src/Custom/Chat/ChatTokenTopLogProbabilityDetails.cs +++ b/src/Custom/Chat/ChatTokenTopLogProbabilityDetails.cs @@ -8,7 +8,7 @@ namespace OpenAI.Chat; /// and /// . /// -[CodeGenModel("ChatCompletionTokenLogprobTopLogprob")] +[CodeGenType("ChatCompletionTokenLogprobTopLogprob")] public partial class ChatTokenTopLogProbabilityDetails { // CUSTOM: Renamed. diff --git a/src/Custom/Chat/ChatTokenUsage.cs b/src/Custom/Chat/ChatTokenUsage.cs index 9fe7f2893..83f0b4829 100644 --- a/src/Custom/Chat/ChatTokenUsage.cs +++ b/src/Custom/Chat/ChatTokenUsage.cs @@ -3,7 +3,7 @@ namespace OpenAI.Chat; /// /// Represents computed token consumption statistics for a chat completion request. /// -[CodeGenModel("CompletionUsage")] +[CodeGenType("CompletionUsage")] public partial class ChatTokenUsage { // CUSTOM: Renamed. diff --git a/src/Custom/Chat/ChatTool.cs b/src/Custom/Chat/ChatTool.cs index 6cdb2f64b..88081a4a2 100644 --- a/src/Custom/Chat/ChatTool.cs +++ b/src/Custom/Chat/ChatTool.cs @@ -11,7 +11,7 @@ namespace OpenAI.Chat; /// /// /// -[CodeGenModel("ChatCompletionTool")] +[CodeGenType("ChatCompletionTool")] public partial class ChatTool { // CUSTOM: Made internal. @@ -116,7 +116,7 @@ internal ChatTool(InternalFunctionDefinition function) /// about structured outputs in the /// function calling guide. /// - /// + /// public static ChatTool CreateFunctionTool(string functionName, string functionDescription = null, BinaryData functionParameters = null, bool? functionSchemaIsStrict = null) { Argument.AssertNotNull(functionName, nameof(functionName)); diff --git a/src/Custom/Chat/ChatToolCall.cs b/src/Custom/Chat/ChatToolCall.cs index 88df04d8c..2f4b4e115 100644 --- a/src/Custom/Chat/ChatToolCall.cs +++ b/src/Custom/Chat/ChatToolCall.cs @@ -11,7 +11,7 @@ namespace OpenAI.Chat; /// /// /// -[CodeGenModel("ChatCompletionMessageToolCall")] +[CodeGenType("ChatCompletionMessageToolCall")] [CodeGenSuppress("ChatToolCall", typeof(string), typeof(InternalChatCompletionMessageToolCallFunction))] public partial class ChatToolCall { @@ -30,7 +30,7 @@ public partial class ChatToolCall public string FunctionName => Function?.Name; // CUSTOM: Spread. - /// + /// /// The arguments that the model is calling the function with, which are generated by the model in JSON format. /// Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your /// function schema. Validate the arguments in your code before calling your function. diff --git a/src/Custom/Chat/ChatToolCallKind.cs b/src/Custom/Chat/ChatToolCallKind.cs index edf4b5db4..63f702c58 100644 --- a/src/Custom/Chat/ChatToolCallKind.cs +++ b/src/Custom/Chat/ChatToolCallKind.cs @@ -1,6 +1,6 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatCompletionMessageToolCallType")] +[CodeGenType("ChatCompletionMessageToolCallType")] public enum ChatToolCallKind { Function, diff --git a/src/Custom/Chat/ChatToolChoice.cs b/src/Custom/Chat/ChatToolChoice.cs index 2c598de78..6d6a2bc84 100644 --- a/src/Custom/Chat/ChatToolChoice.cs +++ b/src/Custom/Chat/ChatToolChoice.cs @@ -24,7 +24,7 @@ namespace OpenAI.Chat; /// /// /// -[CodeGenModel("ChatCompletionToolChoice")] +[CodeGenType("ChatCompletionToolChoice")] public partial class ChatToolChoice { private readonly bool _predefined; diff --git a/src/Custom/Chat/ChatToolKind.cs b/src/Custom/Chat/ChatToolKind.cs index 7d7f7a7af..3f8cbbe01 100644 --- a/src/Custom/Chat/ChatToolKind.cs +++ b/src/Custom/Chat/ChatToolKind.cs @@ -1,6 +1,6 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatCompletionToolType")] +[CodeGenType("ChatCompletionToolType")] public enum ChatToolKind { Function, diff --git a/src/Custom/Chat/ChatWebSearchOptions.cs b/src/Custom/Chat/ChatWebSearchOptions.cs new file mode 100644 index 000000000..ca6a24bfe --- /dev/null +++ b/src/Custom/Chat/ChatWebSearchOptions.cs @@ -0,0 +1,14 @@ +using OpenAI.Internal; +using System; + +namespace OpenAI.Chat; + +[CodeGenType("CreateChatCompletionRequestWebSearchOptions")] +public partial class ChatWebSearchOptions +{ + [CodeGenMember("UserLocation")] + internal InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 UserLocation { get; set; } + + [CodeGenMember("SearchContextSize")] + internal InternalWebSearchContextSize? SearchContextSize { get; set; } +} \ No newline at end of file diff --git a/src/Custom/Chat/Internal/GeneratorStubs.cs b/src/Custom/Chat/Internal/GeneratorStubs.cs index 3547f3a9a..fd4233785 100644 --- a/src/Custom/Chat/Internal/GeneratorStubs.cs +++ b/src/Custom/Chat/Internal/GeneratorStubs.cs @@ -1,109 +1,135 @@ +using System.Runtime.InteropServices; + namespace OpenAI.Chat; -[CodeGenModel("ChatCompletionFunctionCallOption")] +[CodeGenType("ChatCompletionFunctionCallOption")] internal partial class InternalChatCompletionFunctionCallOption { } -[CodeGenModel("ChatCompletionMessageToolCallChunkType")] +[CodeGenType("ChatCompletionMessageToolCallChunkType")] internal readonly partial struct InternalChatCompletionMessageToolCallChunkType { } -[CodeGenModel("ChatCompletionNamedToolChoice")] +[CodeGenType("ChatCompletionNamedToolChoice")] internal partial class InternalChatCompletionNamedToolChoice { } -[CodeGenModel("ChatCompletionNamedToolChoiceFunction")] +[CodeGenType("ChatCompletionNamedToolChoiceFunction")] internal partial class InternalChatCompletionNamedToolChoiceFunction { } -[CodeGenModel("ChatCompletionNamedToolChoiceType")] +[CodeGenType("ChatCompletionNamedToolChoiceType")] internal readonly partial struct InternalChatCompletionNamedToolChoiceType { } -[CodeGenModel("ChatCompletionRequestMessageContentPartImage")] +[CodeGenType("ChatCompletionRequestMessageContentPartImage")] internal partial class InternalChatCompletionRequestMessageContentPartImage { } -[CodeGenModel("ChatCompletionRequestMessageContentPartImageType")] +[CodeGenType("ChatCompletionRequestMessageContentPartImageType")] internal readonly partial struct InternalChatCompletionRequestMessageContentPartImageType { } -[CodeGenModel("ChatCompletionRequestMessageContentPartText")] +[CodeGenType("ChatCompletionRequestMessageContentPartText")] internal partial class InternalChatCompletionRequestMessageContentPartText { } -[CodeGenModel("ChatCompletionRequestMessageContentPartTextType")] +[CodeGenType("ChatCompletionRequestMessageContentPartTextType")] internal readonly partial struct InternalChatCompletionRequestMessageContentPartTextType { } -[CodeGenModel("ChatCompletionResponseMessageFunctionCall")] +[CodeGenType("ChatCompletionResponseMessageFunctionCall")] internal partial class InternalChatCompletionResponseMessageFunctionCall { } -[CodeGenModel("ChatCompletionResponseMessageRole")] +[CodeGenType("ChatCompletionResponseMessageRole")] internal readonly partial struct InternalChatCompletionResponseMessageRole { } -[CodeGenModel("ChatCompletionStreamOptions")] +[CodeGenType("ChatCompletionStreamOptions")] internal partial class InternalChatCompletionStreamOptions { } -[CodeGenModel("ChatCompletionStreamResponseDeltaRole2")] +[CodeGenType("ChatCompletionStreamResponseDeltaRole3")] internal readonly partial struct InternalChatCompletionStreamResponseDeltaRole { } -[CodeGenModel("CreateChatCompletionFunctionResponse")] +[CodeGenType("CreateChatCompletionFunctionResponse")] internal partial class InternalCreateChatCompletionFunctionResponse { } -[CodeGenModel("CreateChatCompletionFunctionResponseChoice")] +[CodeGenType("CreateChatCompletionFunctionResponseChoice")] internal partial class InternalCreateChatCompletionFunctionResponseChoice { } -[CodeGenModel("CreateChatCompletionFunctionResponseChoiceFinishReason")] +[CodeGenType("CreateChatCompletionFunctionResponseChoiceFinishReason")] internal readonly partial struct InternalCreateChatCompletionFunctionResponseChoiceFinishReason { } -[CodeGenModel("CreateChatCompletionFunctionResponseObject")] +[CodeGenType("CreateChatCompletionFunctionResponseObject")] internal readonly partial struct InternalCreateChatCompletionFunctionResponseObject { } -[CodeGenModel("ChatCompletionRequestMessageContentPartRefusal")] +[CodeGenType("ChatCompletionRequestMessageContentPartRefusal")] internal partial class InternalChatCompletionRequestMessageContentPartRefusal { } -[CodeGenModel("ChatCompletionRequestMessageContentPartRefusalType")] +[CodeGenType("ChatCompletionRequestMessageContentPartRefusalType")] internal readonly partial struct InternalChatCompletionRequestMessageContentPartRefusalType { } -[CodeGenModel("CreateChatCompletionRequestModel")] +[CodeGenType("CreateChatCompletionRequestModel")] internal readonly partial struct InternalCreateChatCompletionRequestModel { } -[CodeGenModel("CreateChatCompletionRequestServiceTier")] +[CodeGenType("CreateChatCompletionRequestServiceTier")] internal readonly partial struct InternalCreateChatCompletionRequestServiceTier { } -[CodeGenModel("CreateChatCompletionRequestToolChoice")] +[CodeGenType("CreateChatCompletionRequestToolChoice")] internal readonly partial struct InternalCreateChatCompletionRequestToolChoice { } -[CodeGenModel("CreateChatCompletionResponseChoice")] +[CodeGenType("CreateChatCompletionResponseChoice")] internal partial class InternalCreateChatCompletionResponseChoice { } -[CodeGenModel("CreateChatCompletionResponseChoiceLogprobs")] +[CodeGenType("CreateChatCompletionResponseChoiceLogprobs1")] internal partial class InternalCreateChatCompletionResponseChoiceLogprobs { } -[CodeGenModel("CreateChatCompletionResponseObject")] +[CodeGenType("CreateChatCompletionResponseObject")] internal readonly partial struct InternalCreateChatCompletionResponseObject { } -[CodeGenModel("CreateChatCompletionResponseServiceTier")] +[CodeGenType("CreateChatCompletionResponseServiceTier")] internal readonly partial struct InternalCreateChatCompletionResponseServiceTier { } -[CodeGenModel("CreateChatCompletionStreamResponseChoiceFinishReason")] +[CodeGenType("CreateChatCompletionStreamResponseChoiceFinishReason")] internal readonly partial struct InternalCreateChatCompletionStreamResponseChoiceFinishReason { } -[CodeGenModel("CreateChatCompletionStreamResponseChoiceLogprobs")] +[CodeGenType("CreateChatCompletionStreamResponseChoiceLogprobs1")] internal partial class InternalCreateChatCompletionStreamResponseChoiceLogprobs { } -[CodeGenModel("CreateChatCompletionStreamResponseObject")] +[CodeGenType("CreateChatCompletionStreamResponseObject")] internal readonly partial struct InternalCreateChatCompletionStreamResponseObject { } -[CodeGenModel("CreateChatCompletionStreamResponseServiceTier")] +[CodeGenType("CreateChatCompletionStreamResponseServiceTier")] internal readonly partial struct InternalCreateChatCompletionStreamResponseServiceTier { } -[CodeGenModel("CreateChatCompletionStreamResponseUsage")] +[CodeGenType("CreateChatCompletionStreamResponseUsage1")] internal partial class InternalCreateChatCompletionStreamResponseUsage { } -[CodeGenModel("CreateChatCompletionRequestModality")] +[CodeGenType("CreateChatCompletionRequestModality")] internal readonly partial struct InternalCreateChatCompletionRequestModality { } -[CodeGenModel("ChatCompletionRequestMessageContentPartAudioType")] +[CodeGenType("ChatCompletionRequestMessageContentPartAudioType")] internal readonly partial struct InternalChatCompletionRequestMessageContentPartAudioType { } -[CodeGenModel("ChatCompletionRequestMessageContentPartAudio")] +[CodeGenType("ChatCompletionRequestMessageContentPartAudio")] internal partial class InternalChatCompletionRequestMessageContentPartAudio { } -[CodeGenModel("ChatCompletionRequestMessageContentPartAudioInputAudio")] +[CodeGenType("ChatCompletionRequestMessageContentPartAudioInputAudio")] internal partial class InternalChatCompletionRequestMessageContentPartAudioInputAudio { } -[CodeGenModel("UnknownChatOutputPrediction")] -internal partial class InternalUnknownChatOutputPrediction { } \ No newline at end of file +[CodeGenType("UnknownChatOutputPrediction")] +internal partial class InternalUnknownChatOutputPrediction { } + +[CodeGenType("ChatCompletionRequestMessageContentPartFileType")] +internal readonly partial struct InternalChatCompletionRequestMessageContentPartFileType { } + +[CodeGenType("CreateChatCompletionRequestWebSearchOptionsUserLocation1Type")] +internal readonly partial struct InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type { } + +[CodeGenType("ChatCompletionResponseMessageAnnotationType")] +internal readonly partial struct InternalChatCompletionResponseMessageAnnotationType { } + +[CodeGenType("ChatCompletionRequestMessageContentPartFile")] +internal partial class InternalChatCompletionRequestMessageContentPartFile { } + +[CodeGenType("ChatCompletionRequestMessageContentPartFileFile")] +internal partial class InternalChatCompletionRequestMessageContentPartFileFile { } + +[CodeGenType("CreateChatCompletionRequestWebSearchOptionsUserLocation1")] +internal partial class InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 { } + +[CodeGenType("ChatCompletionResponseMessageAnnotationUrlCitation")] +internal partial class InternalChatCompletionResponseMessageAnnotationUrlCitation { } + +[CodeGenType("CreateChatCompletionStreamResponseChoiceFinishReason1")] +internal readonly partial struct InternalCreateChatCompletionStreamResponseChoiceFinishReason1 { } diff --git a/src/Custom/Chat/Internal/InternalChatCompletionMessageToolCallFunction.cs b/src/Custom/Chat/Internal/InternalChatCompletionMessageToolCallFunction.cs index 3820ad9b8..ed0cb41c3 100644 --- a/src/Custom/Chat/Internal/InternalChatCompletionMessageToolCallFunction.cs +++ b/src/Custom/Chat/Internal/InternalChatCompletionMessageToolCallFunction.cs @@ -2,7 +2,7 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatCompletionMessageToolCallFunction")] +[CodeGenType("ChatCompletionMessageToolCallFunction")] [CodeGenSerialization(nameof(Arguments), SerializationValueHook = nameof(SerializeArgumentsValue), DeserializationValueHook = nameof(DeserializeArgumentsValue))] internal partial class InternalChatCompletionMessageToolCallFunction { diff --git a/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs b/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs index ab2f56ab1..13d33edd8 100644 --- a/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs +++ b/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs @@ -4,7 +4,7 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatCompletionRequestMessageContentPartImageImageUrl")] +[CodeGenType("ChatCompletionRequestMessageContentPartImageImageUrl")] [CodeGenSuppress("InternalChatCompletionRequestMessageContentPartImageImageUrl", typeof(string))] internal partial class InternalChatCompletionRequestMessageContentPartImageImageUrl { diff --git a/src/Custom/Chat/Internal/InternalChatCompletionResponseMessage.cs b/src/Custom/Chat/Internal/InternalChatCompletionResponseMessage.cs index 607a63c74..373c0f99d 100644 --- a/src/Custom/Chat/Internal/InternalChatCompletionResponseMessage.cs +++ b/src/Custom/Chat/Internal/InternalChatCompletionResponseMessage.cs @@ -3,7 +3,7 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatCompletionResponseMessage")] +[CodeGenType("ChatCompletionResponseMessage")] [CodeGenSuppress("InternalChatCompletionResponseMessage", typeof(IEnumerable))] internal partial class InternalChatCompletionResponseMessage { diff --git a/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.cs b/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.cs index 1b7c58d68..1f9759860 100644 --- a/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.cs +++ b/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.cs @@ -2,7 +2,7 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatCompletionStreamResponseDelta")] +[CodeGenType("ChatCompletionStreamResponseDelta")] [CodeGenSuppress("InternalChatCompletionStreamResponseDelta")] internal partial class InternalChatCompletionStreamResponseDelta { diff --git a/src/Custom/Chat/Internal/InternalChatOutputPredictionContent.cs b/src/Custom/Chat/Internal/InternalChatOutputPredictionContent.cs index a3d643a9b..53eb69157 100644 --- a/src/Custom/Chat/Internal/InternalChatOutputPredictionContent.cs +++ b/src/Custom/Chat/Internal/InternalChatOutputPredictionContent.cs @@ -6,7 +6,7 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatOutputPredictionContent")] +[CodeGenType("ChatOutputPredictionContent")] internal partial class InternalChatOutputPredictionContent { // CUSTOM: Assign type to a collection of content parts diff --git a/src/Custom/Chat/Internal/InternalChatOutputPredictionKind.cs b/src/Custom/Chat/Internal/InternalChatOutputPredictionKind.cs index c0ee32bb1..7b567d2b6 100644 --- a/src/Custom/Chat/Internal/InternalChatOutputPredictionKind.cs +++ b/src/Custom/Chat/Internal/InternalChatOutputPredictionKind.cs @@ -4,7 +4,7 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatOutputPredictionType")] +[CodeGenType("ChatOutputPredictionType")] internal readonly partial struct InternalChatOutputPredictionKind { // CUSTOM: Rename for clarity. diff --git a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonObject.cs b/src/Custom/Chat/Internal/InternalChatResponseFormatJsonObject.cs index f161ae7a8..a04c80e25 100644 --- a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonObject.cs +++ b/src/Custom/Chat/Internal/InternalChatResponseFormatJsonObject.cs @@ -1,6 +1,6 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatResponseFormatJsonObject")] +[CodeGenType("ChatResponseFormatJsonObject")] internal partial class InternalChatResponseFormatJsonObject { } \ No newline at end of file diff --git a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonSchema.cs b/src/Custom/Chat/Internal/InternalChatResponseFormatJsonSchema.cs index cd9e63b5a..deb15ac4c 100644 --- a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonSchema.cs +++ b/src/Custom/Chat/Internal/InternalChatResponseFormatJsonSchema.cs @@ -5,7 +5,7 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatResponseFormatJsonSchema")] +[CodeGenType("ChatResponseFormatJsonSchema")] internal partial class InternalChatResponseFormatJsonSchema { } \ No newline at end of file diff --git a/src/Custom/Chat/Internal/InternalChatResponseFormatText.cs b/src/Custom/Chat/Internal/InternalChatResponseFormatText.cs index 3df5a8bf5..0b4a58c1c 100644 --- a/src/Custom/Chat/Internal/InternalChatResponseFormatText.cs +++ b/src/Custom/Chat/Internal/InternalChatResponseFormatText.cs @@ -1,6 +1,6 @@ namespace OpenAI.Chat; -[CodeGenModel("ChatResponseFormatText")] +[CodeGenType("ChatResponseFormatText")] internal partial class InternalChatResponseFormatText { } diff --git a/src/Custom/Chat/Internal/InternalUnknownChatMessage.cs b/src/Custom/Chat/Internal/InternalUnknownChatMessage.cs index cb046b82e..ea5fe1b6e 100644 --- a/src/Custom/Chat/Internal/InternalUnknownChatMessage.cs +++ b/src/Custom/Chat/Internal/InternalUnknownChatMessage.cs @@ -1,6 +1,6 @@ namespace OpenAI.Chat; -[CodeGenModel("UnknownChatCompletionRequestMessage")] +[CodeGenType("UnknownChatCompletionRequestMessage")] internal partial class InternalUnknownChatMessage : ChatMessage { diff --git a/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.cs b/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.cs index b869078fc..64d220fc9 100644 --- a/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.cs +++ b/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.cs @@ -1,6 +1,6 @@ namespace OpenAI.Chat; -[CodeGenModel("UnknownChatResponseFormat")] +[CodeGenType("UnknownChatResponseFormat")] 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 99d83eec3..da669844d 100644 --- a/src/Custom/Chat/Messages/AssistantChatMessage.cs +++ b/src/Custom/Chat/Messages/AssistantChatMessage.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat; /// messages are originated by the model on responses, instances typically /// represent chat history or example interactions to guide model behavior. /// -[CodeGenModel("ChatCompletionRequestAssistantMessage")] +[CodeGenType("ChatCompletionRequestAssistantMessage")] public partial class AssistantChatMessage : ChatMessage { // CUSTOM: Made internal. @@ -88,7 +88,7 @@ public AssistantChatMessage(ChatFunctionCall functionCall) /// Creates a new instance of that represents a prior response from the model /// that included audio with a correlation ID. /// - /// The audio reference with an id, produced by the model. + /// The audio reference with an id, produced by the model. public AssistantChatMessage(ChatOutputAudioReference outputAudioReference) { Argument.AssertNotNull(outputAudioReference, nameof(outputAudioReference)); @@ -102,7 +102,7 @@ public AssistantChatMessage(ChatOutputAudioReference outputAudioReference) /// /// /// This constructor will copy the content, tool_calls, and function_call from a chat - /// completion response into a new assistant role request message. + /// completion response into a new assistant role request message. /// /// /// The from which the conversation history request message should be created. diff --git a/src/Custom/Chat/Messages/ChatMessage.cs b/src/Custom/Chat/Messages/ChatMessage.cs index 08221dd2d..207a55c17 100644 --- a/src/Custom/Chat/Messages/ChatMessage.cs +++ b/src/Custom/Chat/Messages/ChatMessage.cs @@ -52,7 +52,7 @@ namespace OpenAI.Chat; /// /// /// -[CodeGenModel("ChatCompletionRequestMessage")] +[CodeGenType("ChatCompletionRequestMessage")] public partial class ChatMessage { /// diff --git a/src/Custom/Chat/Messages/DeveloperChatMessage.cs b/src/Custom/Chat/Messages/DeveloperChatMessage.cs index e21ae9c01..81da6810b 100644 --- a/src/Custom/Chat/Messages/DeveloperChatMessage.cs +++ b/src/Custom/Chat/Messages/DeveloperChatMessage.cs @@ -8,7 +8,7 @@ namespace OpenAI.Chat; /// 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. /// -[CodeGenModel("ChatCompletionRequestDeveloperMessage")] +[CodeGenType("ChatCompletionRequestDeveloperMessage")] [CodeGenSuppress("DeveloperChatMessage", typeof(ChatMessageContent))] public partial class DeveloperChatMessage : ChatMessage { diff --git a/src/Custom/Chat/Messages/FunctionChatMessage.cs b/src/Custom/Chat/Messages/FunctionChatMessage.cs index 54d98fdc6..cc9a79fd5 100644 --- a/src/Custom/Chat/Messages/FunctionChatMessage.cs +++ b/src/Custom/Chat/Messages/FunctionChatMessage.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat; /// assistant response message. /// [Obsolete($"This class is obsolete. Please use {nameof(ToolChatMessage)} instead.")] -[CodeGenModel("ChatCompletionRequestFunctionMessage")] +[CodeGenType("ChatCompletionRequestFunctionMessage")] [CodeGenSuppress("FunctionChatMessage", typeof(string))] [CodeGenSuppress("FunctionChatMessage", typeof(ChatMessageContent), typeof(string))] public partial class FunctionChatMessage : ChatMessage diff --git a/src/Custom/Chat/Messages/SystemChatMessage.cs b/src/Custom/Chat/Messages/SystemChatMessage.cs index 946295bd1..8b3906487 100644 --- a/src/Custom/Chat/Messages/SystemChatMessage.cs +++ b/src/Custom/Chat/Messages/SystemChatMessage.cs @@ -8,7 +8,7 @@ namespace OpenAI.Chat; /// 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. /// -[CodeGenModel("ChatCompletionRequestSystemMessage")] +[CodeGenType("ChatCompletionRequestSystemMessage")] [CodeGenSuppress("SystemChatMessage", typeof(ChatMessageContent))] public partial class SystemChatMessage : ChatMessage { diff --git a/src/Custom/Chat/Messages/ToolChatMessage.cs b/src/Custom/Chat/Messages/ToolChatMessage.cs index 16925d08c..78acec671 100644 --- a/src/Custom/Chat/Messages/ToolChatMessage.cs +++ b/src/Custom/Chat/Messages/ToolChatMessage.cs @@ -19,7 +19,7 @@ namespace OpenAI.Chat; /// /// /// -[CodeGenModel("ChatCompletionRequestToolMessage")] +[CodeGenType("ChatCompletionRequestToolMessage")] [CodeGenSuppress("ToolChatMessage", typeof(ChatMessageContent), typeof(string))] [CodeGenSuppress("ToolChatMessage", typeof(string))] public partial class ToolChatMessage : ChatMessage diff --git a/src/Custom/Chat/Messages/UserChatMessage.cs b/src/Custom/Chat/Messages/UserChatMessage.cs index e2c97ca16..4d6ffb0ec 100644 --- a/src/Custom/Chat/Messages/UserChatMessage.cs +++ b/src/Custom/Chat/Messages/UserChatMessage.cs @@ -8,7 +8,7 @@ namespace OpenAI.Chat; /// information originating from the caller and serves as a prompt for the model to complete. User messages may result /// in either direct assistant message responses or in calls to supplied tools or functions. /// -[CodeGenModel("ChatCompletionRequestUserMessage")] +[CodeGenType("ChatCompletionRequestUserMessage")] [CodeGenSuppress("UserChatMessage", typeof(ChatMessageContent))] public partial class UserChatMessage : ChatMessage { diff --git a/src/Custom/Chat/OpenAIChatModelFactory.cs b/src/Custom/Chat/OpenAIChatModelFactory.cs index 84c27a756..fd8a127ba 100644 --- a/src/Custom/Chat/OpenAIChatModelFactory.cs +++ b/src/Custom/Chat/OpenAIChatModelFactory.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Linq; +using System.Security.Cryptography.X509Certificates; namespace OpenAI.Chat; @@ -57,16 +58,18 @@ public static ChatCompletion ChatCompletion( string model = null, string systemFingerprint = null, ChatTokenUsage usage = default, - ChatOutputAudio outputAudio = default) + ChatOutputAudio outputAudio = default, + IEnumerable messageAnnotations = default) { content ??= new ChatMessageContent(); toolCalls ??= new List(); contentTokenLogProbabilities ??= new List(); refusalTokenLogProbabilities ??= new List(); - InternalChatCompletionResponseMessage message = new InternalChatCompletionResponseMessage( + InternalChatCompletionResponseMessage message = new( refusal, toolCalls.ToList(), + messageAnnotations.ToList(), outputAudio, role, content, @@ -99,6 +102,27 @@ public static ChatCompletion ChatCompletion( additionalBinaryDataProperties: null); } + /// + /// Creates a new instance of for mocks and testing. + /// + /// + /// + /// + /// + /// + public static ChatMessageAnnotation ChatMessageAnnotation( + int startIndex = default, + int endIndex = default, + Uri webResourceUri = default, + string webResourceTitle = default) + { + return new ChatMessageAnnotation( + new InternalChatCompletionResponseMessageAnnotationUrlCitation( + endIndex, + startIndex, + webResourceUri, + webResourceTitle)); + } /// Initializes a new instance of . /// A new instance for mocking. diff --git a/src/Custom/Chat/Streaming/InternalChatCompletionMessageToolCallChunkFunction.cs b/src/Custom/Chat/Streaming/InternalChatCompletionMessageToolCallChunkFunction.cs index a8cb6ba76..82917aad0 100644 --- a/src/Custom/Chat/Streaming/InternalChatCompletionMessageToolCallChunkFunction.cs +++ b/src/Custom/Chat/Streaming/InternalChatCompletionMessageToolCallChunkFunction.cs @@ -3,7 +3,7 @@ namespace OpenAI.Chat; // CUSTOM: Renamed. -[CodeGenModel("ChatCompletionMessageToolCallChunkFunction")] +[CodeGenType("ChatCompletionMessageToolCallChunkFunction")] [CodeGenSerialization(nameof(Arguments), SerializationValueHook = nameof(SerializeArgumentsValue), DeserializationValueHook = nameof(DeserializeArgumentsValue))] internal partial class InternalChatCompletionMessageToolCallChunkFunction { diff --git a/src/Custom/Chat/Streaming/InternalCreateChatCompletionStreamResponseChoice.cs b/src/Custom/Chat/Streaming/InternalCreateChatCompletionStreamResponseChoice.cs index 9e3a45c5e..a7fff414e 100644 --- a/src/Custom/Chat/Streaming/InternalCreateChatCompletionStreamResponseChoice.cs +++ b/src/Custom/Chat/Streaming/InternalCreateChatCompletionStreamResponseChoice.cs @@ -1,6 +1,6 @@ namespace OpenAI.Chat; -[CodeGenModel("CreateChatCompletionStreamResponseChoice")] +[CodeGenType("CreateChatCompletionStreamResponseChoice")] internal partial class InternalCreateChatCompletionStreamResponseChoice { // CUSTOM: Changed type from string. diff --git a/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs b/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs index 84d5472ff..de5b90374 100644 --- a/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs +++ b/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs @@ -4,7 +4,7 @@ namespace OpenAI.Chat; /// An incremental update corresponding to a streaming chat completion generated by the model. -[CodeGenModel("CreateChatCompletionStreamResponse")] +[CodeGenType("CreateChatCompletionStreamResponse")] public partial class StreamingChatCompletionUpdate { private ChatMessageContent _contentUpdate; diff --git a/src/Custom/Chat/Streaming/StreamingChatFunctionCallUpdate.cs b/src/Custom/Chat/Streaming/StreamingChatFunctionCallUpdate.cs index 7c89be491..7f07a666c 100644 --- a/src/Custom/Chat/Streaming/StreamingChatFunctionCallUpdate.cs +++ b/src/Custom/Chat/Streaming/StreamingChatFunctionCallUpdate.cs @@ -3,7 +3,7 @@ namespace OpenAI.Chat; [Obsolete($"This class is obsolete. Please use {nameof(StreamingChatToolCallUpdate)} instead.")] -[CodeGenModel("ChatCompletionStreamResponseDeltaFunctionCall")] +[CodeGenType("ChatCompletionStreamResponseDeltaFunctionCall")] [CodeGenSerialization(nameof(FunctionArgumentsUpdate), SerializationValueHook = nameof(SerializeFunctionArgumentsUpdateValue), DeserializationValueHook = nameof(DeserializeFunctionArgumentsUpdateValue))] public partial class StreamingChatFunctionCallUpdate { diff --git a/src/Custom/Chat/Streaming/StreamingChatOutputAudioUpdate.cs b/src/Custom/Chat/Streaming/StreamingChatOutputAudioUpdate.cs index ef1058f99..e5cb9c8c7 100644 --- a/src/Custom/Chat/Streaming/StreamingChatOutputAudioUpdate.cs +++ b/src/Custom/Chat/Streaming/StreamingChatOutputAudioUpdate.cs @@ -5,7 +5,7 @@ namespace OpenAI.Chat; /// /// Represents an audio update in a streaming chat response. /// -[CodeGenModel("ChatCompletionMessageAudioChunk")] +[CodeGenType("ChatCompletionMessageAudioChunk")] public partial class StreamingChatOutputAudioUpdate { // CUSTOM: Renamed for clarity of incremental data availability while streaming. diff --git a/src/Custom/Chat/Streaming/StreamingChatToolCallUpdate.cs b/src/Custom/Chat/Streaming/StreamingChatToolCallUpdate.cs index 0256ac302..d5effde61 100644 --- a/src/Custom/Chat/Streaming/StreamingChatToolCallUpdate.cs +++ b/src/Custom/Chat/Streaming/StreamingChatToolCallUpdate.cs @@ -3,7 +3,7 @@ namespace OpenAI.Chat; using System; /// A streaming update representing part of a tool call made by the model. -[CodeGenModel("ChatCompletionMessageToolCallChunk")] +[CodeGenType("ChatCompletionMessageToolCallChunk")] [CodeGenSuppress("StreamingChatToolCallUpdate", typeof(int))] public partial class StreamingChatToolCallUpdate { @@ -33,7 +33,7 @@ public partial class StreamingChatToolCallUpdate public string FunctionName => Function?.Name; // CUSTOM: Spread. - /// + /// /// The update to the arguments that the model is calling the function with, which are generated by the model /// in JSON format. As part of a streaming response, the arguments are chunked and streamed across streaming /// updates, and must therefore be accumulated in order to reconstruct them. Note that the model does not diff --git a/src/Custom/Assistants/FileSearchRanker.cs b/src/Custom/Common/FileSearchRanker.cs similarity index 75% rename from src/Custom/Assistants/FileSearchRanker.cs rename to src/Custom/Common/FileSearchRanker.cs index a0a7caf1c..a635f462c 100644 --- a/src/Custom/Assistants/FileSearchRanker.cs +++ b/src/Custom/Common/FileSearchRanker.cs @@ -3,7 +3,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenModel("FileSearchRankingOptionsRanker")] +[CodeGenType("FileSearchRanker")] public readonly partial struct FileSearchRanker { } diff --git a/src/Custom/Common/Internal/GeneratorStubs.cs b/src/Custom/Common/Internal/GeneratorStubs.cs index a6172b6ac..5f90238ba 100644 --- a/src/Custom/Common/Internal/GeneratorStubs.cs +++ b/src/Custom/Common/Internal/GeneratorStubs.cs @@ -1,19 +1,26 @@ namespace OpenAI.Internal; -[CodeGenModel("OmniTypedResponseFormat")] +[CodeGenType("OmniTypedResponseFormat")] internal partial class InternalOmniTypedResponseFormat { } -[CodeGenModel("ResponseFormatJsonObject")] +[CodeGenType("ResponseFormatJsonObject")] internal partial class InternalResponseFormatJsonObject { } -[CodeGenModel("ResponseFormatJsonSchema")] +[CodeGenType("ResponseFormatJsonSchema")] internal partial class InternalResponseFormatJsonSchema { } -[CodeGenModel("ResponseFormatJsonSchemaSchema")] +[CodeGenType("ResponseFormatJsonSchemaSchema")] internal partial class InternalResponseFormatJsonSchemaSchema { } -[CodeGenModel("ResponseFormatText")] +[CodeGenType("ResponseFormatText")] internal partial class InternalResponseFormatText { } -[CodeGenModel("UnknownOmniTypedResponseFormat")] +[CodeGenType("UnknownOmniTypedResponseFormat")] internal partial class InternalUnknownOmniTypedResponseFormat { } + +[CodeGenType("WebSearchLocation")] +internal partial class InternalWebSearchLocation { } + +[CodeGenType("WebSearchContextSize")] +internal readonly partial struct InternalWebSearchContextSize { } + diff --git a/src/Custom/Common/Internal/InternalResponseFormatJsonSchemaJsonSchema.cs b/src/Custom/Common/Internal/InternalResponseFormatJsonSchemaJsonSchema.cs index 452c7c078..713bd853f 100644 --- a/src/Custom/Common/Internal/InternalResponseFormatJsonSchemaJsonSchema.cs +++ b/src/Custom/Common/Internal/InternalResponseFormatJsonSchemaJsonSchema.cs @@ -2,7 +2,7 @@ namespace OpenAI.Internal; -[CodeGenModel("ResponseFormatJsonSchemaJsonSchema")] +[CodeGenType("ResponseFormatJsonSchemaJsonSchema")] internal partial class InternalResponseFormatJsonSchemaJsonSchema { [CodeGenMember("Schema")] diff --git a/src/Custom/Embeddings/EmbeddingClient.cs b/src/Custom/Embeddings/EmbeddingClient.cs index 2386d0078..359ce4aef 100644 --- a/src/Custom/Embeddings/EmbeddingClient.cs +++ b/src/Custom/Embeddings/EmbeddingClient.cs @@ -15,8 +15,8 @@ namespace OpenAI.Embeddings; // - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. // - Suppressed methods that only take the options parameter. /// The service client for OpenAI embedding operations. -[CodeGenClient("Embeddings")] -[CodeGenSuppress("EmbeddingClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[CodeGenType("Embeddings")] +[CodeGenSuppress("EmbeddingClient", typeof(ClientPipeline), typeof(Uri))] [CodeGenSuppress("CreateEmbeddingAsync", typeof(EmbeddingGenerationOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateEmbedding", typeof(EmbeddingGenerationOptions), typeof(CancellationToken))] public partial class EmbeddingClient diff --git a/src/Custom/Embeddings/EmbeddingGenerationOptions.cs b/src/Custom/Embeddings/EmbeddingGenerationOptions.cs index ba546cbaa..8d9853f16 100644 --- a/src/Custom/Embeddings/EmbeddingGenerationOptions.cs +++ b/src/Custom/Embeddings/EmbeddingGenerationOptions.cs @@ -2,7 +2,7 @@ namespace OpenAI.Embeddings; -[CodeGenModel("CreateEmbeddingRequest")] +[CodeGenType("CreateEmbeddingRequest")] [CodeGenSuppress("EmbeddingGenerationOptions", typeof(BinaryData), typeof(InternalCreateEmbeddingRequestModel))] public partial class EmbeddingGenerationOptions { diff --git a/src/Custom/Embeddings/EmbeddingTokenUsage.cs b/src/Custom/Embeddings/EmbeddingTokenUsage.cs index cdf1d8a48..388312e5c 100644 --- a/src/Custom/Embeddings/EmbeddingTokenUsage.cs +++ b/src/Custom/Embeddings/EmbeddingTokenUsage.cs @@ -1,6 +1,6 @@ namespace OpenAI.Embeddings; -[CodeGenModel("CreateEmbeddingResponseUsage")] +[CodeGenType("CreateEmbeddingResponseUsage")] public partial class EmbeddingTokenUsage { // CUSTOM: Renamed. diff --git a/src/Custom/Embeddings/Internal/GeneratorStubs.cs b/src/Custom/Embeddings/Internal/GeneratorStubs.cs index 0b0502e87..9928a1805 100644 --- a/src/Custom/Embeddings/Internal/GeneratorStubs.cs +++ b/src/Custom/Embeddings/Internal/GeneratorStubs.cs @@ -2,14 +2,14 @@ namespace OpenAI.Embeddings; // CUSTOM: Made internal. -[CodeGenModel("CreateEmbeddingRequestEncodingFormat")] +[CodeGenType("CreateEmbeddingRequestEncodingFormat")] internal readonly partial struct InternalCreateEmbeddingRequestEncodingFormat { } -[CodeGenModel("CreateEmbeddingRequestModel")] +[CodeGenType("CreateEmbeddingRequestModel")] internal readonly partial struct InternalCreateEmbeddingRequestModel { } -[CodeGenModel("CreateEmbeddingResponseObject")] +[CodeGenType("CreateEmbeddingResponseObject")] internal readonly partial struct InternalCreateEmbeddingResponseObject { } -[CodeGenModel("EmbeddingObject")] +[CodeGenType("EmbeddingObject")] internal readonly partial struct InternalEmbeddingObject { } \ No newline at end of file diff --git a/src/Custom/Embeddings/OpenAIEmbedding.cs b/src/Custom/Embeddings/OpenAIEmbedding.cs index e27164e63..ac644c843 100644 --- a/src/Custom/Embeddings/OpenAIEmbedding.cs +++ b/src/Custom/Embeddings/OpenAIEmbedding.cs @@ -10,7 +10,7 @@ namespace OpenAI.Embeddings; /// /// Represents an embedding vector returned by embedding endpoint. /// -[CodeGenModel("Embedding")] +[CodeGenType("Embedding")] [CodeGenSuppress("OpenAIEmbedding", typeof(int), typeof(BinaryData))] public partial class OpenAIEmbedding { diff --git a/src/Custom/Embeddings/OpenAIEmbeddingCollection.Serialization.cs b/src/Custom/Embeddings/OpenAIEmbeddingCollection.Serialization.cs index dd25cd2a3..c295154c0 100644 --- a/src/Custom/Embeddings/OpenAIEmbeddingCollection.Serialization.cs +++ b/src/Custom/Embeddings/OpenAIEmbeddingCollection.Serialization.cs @@ -30,7 +30,7 @@ internal static void SerializeOpenAIEmbeddingCollection(OpenAIEmbeddingCollectio writer.WriteStringValue(instance.Object.ToString()); writer.WritePropertyName("usage"u8); writer.WriteObjectValue(instance.Usage, options); - writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); + writer.WriteSerializedAdditionalRawData(instance._additionalBinaryDataProperties, options); writer.WriteEndObject(); } diff --git a/src/Custom/Embeddings/OpenAIEmbeddingCollection.cs b/src/Custom/Embeddings/OpenAIEmbeddingCollection.cs index 212807087..b7118d779 100644 --- a/src/Custom/Embeddings/OpenAIEmbeddingCollection.cs +++ b/src/Custom/Embeddings/OpenAIEmbeddingCollection.cs @@ -4,7 +4,7 @@ namespace OpenAI.Embeddings; -[CodeGenModel("CreateEmbeddingResponse")] +[CodeGenType("CreateEmbeddingResponse")] [CodeGenSuppress("Data")] [CodeGenSuppress(nameof(OpenAIEmbeddingCollection))] [CodeGenSuppress(nameof(OpenAIEmbeddingCollection), typeof(string), typeof(EmbeddingTokenUsage))] @@ -46,7 +46,7 @@ internal OpenAIEmbeddingCollection(IReadOnlyList data, string m Model = model; Object = @object; Usage = usage; - SerializedAdditionalRawData = serializedAdditionalRawData; + _additionalBinaryDataProperties = serializedAdditionalRawData; } // CUSTOM: Set the inherited Items property via the base constructor in favor of the suppressed Data property. diff --git a/src/Custom/Files/FileDeletionResult.cs b/src/Custom/Files/FileDeletionResult.cs index e29c72d2a..d3b059532 100644 --- a/src/Custom/Files/FileDeletionResult.cs +++ b/src/Custom/Files/FileDeletionResult.cs @@ -1,6 +1,6 @@ namespace OpenAI.Files; -[CodeGenModel("DeleteFileResponse")] +[CodeGenType("DeleteFileResponse")] public partial class FileDeletionResult { // CUSTOM: Renamed. diff --git a/src/Custom/Files/FilePurpose.Serialization.cs b/src/Custom/Files/FilePurpose.Serialization.cs new file mode 100644 index 000000000..bdc07f3af --- /dev/null +++ b/src/Custom/Files/FilePurpose.Serialization.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Files +{ + internal static partial class FilePurposeExtensions + { + public static string ToSerialString(this FilePurpose value) => value switch + { + FilePurpose.Assistants => "assistants", + FilePurpose.AssistantsOutput => "assistants_output", + FilePurpose.Batch => "batch", + FilePurpose.BatchOutput => "batch_output", + FilePurpose.FineTune => "fine-tune", + FilePurpose.FineTuneResults => "fine-tune-results", + FilePurpose.Vision => "vision", + FilePurpose.UserData => "user_data", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FilePurpose value.") + }; + } +} diff --git a/src/Custom/Files/FilePurpose.cs b/src/Custom/Files/FilePurpose.cs index a532bb855..bbe6e66f8 100644 --- a/src/Custom/Files/FilePurpose.cs +++ b/src/Custom/Files/FilePurpose.cs @@ -1,6 +1,6 @@ namespace OpenAI.Files; -[CodeGenModel("OpenAIFilePurpose")] +[CodeGenType("OpenAIFilePurpose")] public enum FilePurpose { Assistants, @@ -16,4 +16,6 @@ public enum FilePurpose FineTuneResults, Vision, + + UserData, } \ No newline at end of file diff --git a/src/Custom/Files/FileStatus.cs b/src/Custom/Files/FileStatus.cs index 4582490bf..fd20baa0f 100644 --- a/src/Custom/Files/FileStatus.cs +++ b/src/Custom/Files/FileStatus.cs @@ -6,7 +6,7 @@ namespace OpenAI.Files; [Obsolete($"This struct 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.")] -[CodeGenModel("OpenAIFileStatus")] +[CodeGenType("OpenAIFileStatus")] public enum FileStatus { Uploaded, diff --git a/src/Custom/Files/FileUploadPurpose.Serialization.cs b/src/Custom/Files/FileUploadPurpose.Serialization.cs new file mode 100644 index 000000000..cf4c65706 --- /dev/null +++ b/src/Custom/Files/FileUploadPurpose.Serialization.cs @@ -0,0 +1,48 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Files +{ + internal static partial class FilePurposeExtensions + { + public static FilePurpose ToFilePurpose(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "assistants")) + { + return FilePurpose.Assistants; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "assistants_output")) + { + return FilePurpose.AssistantsOutput; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "batch")) + { + return FilePurpose.Batch; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "batch_output")) + { + return FilePurpose.BatchOutput; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "fine-tune")) + { + return FilePurpose.FineTune; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "fine-tune-results")) + { + return FilePurpose.FineTuneResults; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "vision")) + { + return FilePurpose.Vision; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "user_data")) + { + return FilePurpose.UserData; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FilePurpose value."); + } + } +} diff --git a/src/Custom/Files/FileUploadPurpose.cs b/src/Custom/Files/FileUploadPurpose.cs index 2f3e9d8ca..ca5f6cdda 100644 --- a/src/Custom/Files/FileUploadPurpose.cs +++ b/src/Custom/Files/FileUploadPurpose.cs @@ -1,6 +1,9 @@ namespace OpenAI.Files; -[CodeGenModel("CreateFileRequestPurpose")] +[CodeGenType("CreateFileRequestPurpose")] public readonly partial struct FileUploadPurpose { + // CUSTOM: Renamed. + [CodeGenMember("Evals")] + public static FileUploadPurpose Evaluations { get; } = new("evals"); } \ No newline at end of file diff --git a/src/Custom/Files/Internal/GeneratorStubs.cs b/src/Custom/Files/Internal/GeneratorStubs.cs index 509a21a93..8a12f29f0 100644 --- a/src/Custom/Files/Internal/GeneratorStubs.cs +++ b/src/Custom/Files/Internal/GeneratorStubs.cs @@ -1,18 +1,18 @@ namespace OpenAI.Files; -[CodeGenModel("DeleteFileResponseObject")] +[CodeGenType("DeleteFileResponseObject")] internal readonly partial struct InternalDeleteFileResponseObject { } -[CodeGenModel("OpenAIFileObject")] +[CodeGenType("OpenAIFileObject")] internal readonly partial struct InternalOpenAIFileObject { } -[CodeGenModel("AddUploadPartRequest")] internal partial class InternalAddUploadPartRequest { } -[CodeGenModel("CompleteUploadRequest")] internal partial class InternalCompleteUploadRequest { } -[CodeGenModel("CreateUploadRequest")] internal partial class InternalCreateUploadRequest { } -[CodeGenModel("CreateUploadRequestPurpose")] internal readonly partial struct InternalCreateUploadRequestPurpose { } -[CodeGenModel("ListFilesResponseObject")] internal readonly partial struct InternalListFilesResponseObject { } -[CodeGenModel("Upload")] internal partial class InternalUpload { } -[CodeGenModel("UploadObject")] internal readonly partial struct InternalUploadObject { } -[CodeGenModel("UploadPart")] internal partial class InternalUploadPart { } -[CodeGenModel("UploadPartObject")] internal readonly partial struct InternalUploadPartObject { } -[CodeGenModel("UploadStatus")] internal readonly partial struct InternalUploadStatus { } +[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("UploadObject")] internal readonly partial struct InternalUploadObject { } +[CodeGenType("UploadPart")] internal partial class InternalUploadPart { } +[CodeGenType("UploadPartObject")] internal readonly partial struct InternalUploadPartObject { } +[CodeGenType("UploadStatus")] internal readonly partial struct InternalUploadStatus { } diff --git a/src/Custom/Files/Internal/InternalFileUploadOptions.cs b/src/Custom/Files/Internal/InternalFileUploadOptions.cs index feec447c3..a91166e35 100644 --- a/src/Custom/Files/Internal/InternalFileUploadOptions.cs +++ b/src/Custom/Files/Internal/InternalFileUploadOptions.cs @@ -2,7 +2,7 @@ namespace OpenAI.Files; -[CodeGenModel("CreateFileRequest")] +[CodeGenType("CreateFileRequest")] [CodeGenSuppress("InternalFileUploadOptions", typeof(Stream), typeof(FileUploadPurpose))] internal partial class InternalFileUploadOptions { @@ -29,9 +29,9 @@ public InternalFileUploadOptions() { } - internal MultipartFormDataBinaryContent ToMultipartContent(Stream file, string filename) + internal MultiPartFormDataBinaryContent ToMultipartContent(Stream file, string filename) { - MultipartFormDataBinaryContent content = new(); + MultiPartFormDataBinaryContent content = new(); content.Add(file, "file", filename); diff --git a/src/Custom/Files/Internal/InternalUploadsClient.cs b/src/Custom/Files/Internal/InternalUploadsClient.cs index cc828239e..f9999eee4 100644 --- a/src/Custom/Files/Internal/InternalUploadsClient.cs +++ b/src/Custom/Files/Internal/InternalUploadsClient.cs @@ -4,7 +4,7 @@ namespace OpenAI.Files; -[CodeGenClient("Uploads")] +[CodeGenType("Uploads")] [CodeGenSuppress("InternalUploadsClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] internal partial class InternalUploadsClient { diff --git a/src/Custom/Files/OpenAIFile.cs b/src/Custom/Files/OpenAIFile.cs index 6ac471424..488246b05 100644 --- a/src/Custom/Files/OpenAIFile.cs +++ b/src/Custom/Files/OpenAIFile.cs @@ -2,7 +2,7 @@ namespace OpenAI.Files; -[CodeGenModel("OpenAIFile")] +[CodeGenType("OpenAIFile")] public partial class OpenAIFile { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. diff --git a/src/Custom/Files/OpenAIFileClient.cs b/src/Custom/Files/OpenAIFileClient.cs index 2b50ac4d2..90e8f6ffd 100644 --- a/src/Custom/Files/OpenAIFileClient.cs +++ b/src/Custom/Files/OpenAIFileClient.cs @@ -11,8 +11,8 @@ namespace OpenAI.Files; // - Renamed. // - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. /// The service client for OpenAI file operations. -[CodeGenClient("Files")] -[CodeGenSuppress("OpenAIFileClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[CodeGenType("Files")] +[CodeGenSuppress("OpenAIFileClient", typeof(ClientPipeline), typeof(Uri))] [CodeGenSuppress("ListFilesAsync", typeof(string), typeof(CancellationToken))] [CodeGenSuppress("ListFiles", typeof(string), typeof(CancellationToken))] [CodeGenSuppress("RetrieveFileAsync", typeof(string), typeof(CancellationToken))] @@ -96,7 +96,7 @@ public virtual async Task> UploadFileAsync(Stream file, Purpose = purpose }; - using MultipartFormDataBinaryContent content = options.ToMultipartContent(file, filename); + 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()); } @@ -123,7 +123,7 @@ public virtual ClientResult UploadFile(Stream file, string filename, Purpose = purpose }; - using MultipartFormDataBinaryContent content = options.ToMultipartContent(file, filename); + using MultiPartFormDataBinaryContent content = options.ToMultipartContent(file, filename); ClientResult result = UploadFile(content, content.ContentType, cancellationToken.ToRequestOptions()); return ClientResult.FromValue((OpenAIFile)result, result.GetRawResponse()); } diff --git a/src/Custom/Files/OpenAIFileCollection.cs b/src/Custom/Files/OpenAIFileCollection.cs index 4693bb44d..07ab6a5ca 100644 --- a/src/Custom/Files/OpenAIFileCollection.cs +++ b/src/Custom/Files/OpenAIFileCollection.cs @@ -4,7 +4,7 @@ namespace OpenAI.Files; -[CodeGenModel("ListFilesResponse")] +[CodeGenType("ListFilesResponse")] [CodeGenSuppress("Data")] [CodeGenSuppress(nameof(OpenAIFileCollection))] [CodeGenSuppress(nameof(OpenAIFileCollection), typeof(string), typeof(string), typeof(bool))] @@ -12,9 +12,9 @@ namespace OpenAI.Files; public partial class OpenAIFileCollection : ReadOnlyCollection { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. - [CodeGenMember("Object")] + [CodeGenMember("Object")] private InternalListFilesResponseObject Object { get; } = InternalListFilesResponseObject.List; - + // CUSTOM: Internalizing pending stanardized pagination representation for the list operation. [CodeGenMember("FirstId")] internal string FirstId { get; } diff --git a/src/Custom/Files/OpenAIFilesModelFactory.cs b/src/Custom/Files/OpenAIFilesModelFactory.cs index 78242157d..a470cb920 100644 --- a/src/Custom/Files/OpenAIFilesModelFactory.cs +++ b/src/Custom/Files/OpenAIFilesModelFactory.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; namespace OpenAI.Files; @@ -18,19 +19,30 @@ public static FileDeletionResult FileDeletionResult(string fileId = null, bool d additionalBinaryDataProperties: null); } - /// Initializes a new instance of . - /// A new instance for mocking. - 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) + [EditorBrowsable(EditorBrowsableState.Never)] + public static OpenAIFile OpenAIFileInfo(string id, int? sizeInBytes, DateTimeOffset createdAt, string filename, FilePurpose purpose, FileStatus status, string statusDetails) => + OpenAIFileInfo( + id: id, + sizeInBytes: sizeInBytes, + createdAt: createdAt, + filename: filename, + purpose: purpose, + status: status, + 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) { return new OpenAIFile( - id, - createdAt, - filename, - purpose, + id: id, + createdAt: createdAt, + expiresAt: expiresAt, + filename: filename, + purpose: purpose, @object: InternalOpenAIFileObject.File, - sizeInBytes, - status, - statusDetails, + sizeInBytes: sizeInBytes, + status: status, + statusDetails: statusDetails, additionalBinaryDataProperties: null); } diff --git a/src/Custom/FineTuning/FineTuningClient.cs b/src/Custom/FineTuning/FineTuningClient.cs index 5c9d78c15..4b6a3a0bc 100644 --- a/src/Custom/FineTuning/FineTuningClient.cs +++ b/src/Custom/FineTuning/FineTuningClient.cs @@ -12,8 +12,8 @@ namespace OpenAI.FineTuning; // - Suppressed convenience methods for now. /// The service client for OpenAI fine-tuning operations. [Experimental("OPENAI001")] -[CodeGenClient("FineTuning")] -[CodeGenSuppress("FineTuningClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[CodeGenType("FineTuning")] +[CodeGenSuppress("FineTuningClient", typeof(ClientPipeline), typeof(Uri))] [CodeGenSuppress("CreateFineTuningJobAsync", typeof(FineTuningOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateFineTuningJob", typeof(FineTuningOptions), typeof(CancellationToken))] [CodeGenSuppress("ListPaginatedFineTuningJobsAsync", typeof(string), typeof(int?), typeof(CancellationToken))] diff --git a/src/Custom/FineTuning/Internal/GeneratorStubs.cs b/src/Custom/FineTuning/Internal/GeneratorStubs.cs index 117370cc5..b04a10520 100644 --- a/src/Custom/FineTuning/Internal/GeneratorStubs.cs +++ b/src/Custom/FineTuning/Internal/GeneratorStubs.cs @@ -1,3 +1,4 @@ +using OpenAI.Chat; using System; using System.Collections.Generic; using System.Runtime.InteropServices; @@ -6,100 +7,104 @@ namespace OpenAI.FineTuning; // CUSTOM: Made internal. -[CodeGenModel("FineTuneChatCompletionRequestAssistantMessage")] -internal partial class InternalFineTuneChatCompletionRequestAssistantMessage { } +[CodeGenType("FineTuneChatCompletionRequestAssistantMessage")] +internal partial class InternalFineTuneChatCompletionRequestAssistantMessage +{ + [CodeGenMember("Content")] + public ChatMessageContent Content { get; set; } +} -[CodeGenModel("FinetuneChatRequestInput")] +[CodeGenType("FinetuneChatRequestInput")] internal partial class InternalFinetuneChatRequestInput { } -[CodeGenModel("FinetuneCompletionRequestInput")] +[CodeGenType("FinetuneCompletionRequestInput")] internal partial class InternalFinetuneCompletionRequestInput { } -[CodeGenModel("FineTuningIntegration")] +[CodeGenType("FineTuningIntegration")] internal partial class InternalFineTuningIntegration { } -[CodeGenModel("FineTuningIntegrationType")] +[CodeGenType("FineTuningIntegrationType")] internal readonly partial struct InternalFineTuningIntegrationType { } -[CodeGenModel("FineTuningIntegrationWandb")] +[CodeGenType("FineTuningIntegrationWandb")] internal partial class InternalFineTuningIntegrationWandb { } -[CodeGenModel("CreateFineTuningJobRequestWandbIntegrationWandb")] +[CodeGenType("CreateFineTuningJobRequestWandbIntegrationWandb")] internal partial class InternalCreateFineTuningJobRequestWandbIntegrationWandb { [CodeGenMember("Project")] public string Project { get; set; } } -[CodeGenModel("FineTuningJobObject")] +[CodeGenType("FineTuningJobObject")] internal readonly partial struct InternalFineTuningJobObject { } -[CodeGenModel("FineTuningJobCheckpoint")] +[CodeGenType("FineTuningJobCheckpoint")] internal partial class InternalFineTuningJobCheckpoint { } -[CodeGenModel("FineTuningJobCheckpointMetrics")] +[CodeGenType("FineTuningJobCheckpointMetrics")] internal partial class InternalFineTuningJobCheckpointMetrics { } -[CodeGenModel("FineTuningJobCheckpointObject")] +[CodeGenType("FineTuningJobCheckpointObject")] internal readonly partial struct InternalFineTuningJobCheckpointObject { } -[CodeGenModel("ListFineTuningJobCheckpointsResponse")] +[CodeGenType("ListFineTuningJobCheckpointsResponse")] internal partial class InternalListFineTuningJobCheckpointsResponse { } -[CodeGenModel("ListFineTuningJobCheckpointsResponseObject")] +[CodeGenType("ListFineTuningJobCheckpointsResponseObject")] internal readonly partial struct InternalListFineTuningJobCheckpointsResponseObject { } -[CodeGenModel("ListFineTuningJobEventsResponse")] +[CodeGenType("ListFineTuningJobEventsResponse")] internal partial class InternalListFineTuningJobEventsResponse { } -[CodeGenModel("ListPaginatedFineTuningJobsResponse")] +[CodeGenType("ListPaginatedFineTuningJobsResponse")] internal partial class InternalListPaginatedFineTuningJobsResponse { } -[CodeGenModel("ListPaginatedFineTuningJobsResponseObject")] +[CodeGenType("ListPaginatedFineTuningJobsResponseObject")] internal readonly partial struct InternalListPaginatedFineTuningJobsResponseObject { } -[CodeGenModel("FineTuningIntegrationWandbWandb")] +[CodeGenType("FineTuningIntegrationWandbWandb")] internal partial class FineTuningIntegrationWandbWandb { } -[CodeGenModel("FineTuningJobHyperparametersBatchSizeChoiceEnum")] +[CodeGenType("FineTuningJobHyperparametersBatchSizeChoiceEnum")] internal readonly partial struct FineTuningJobHyperparametersBatchSizeChoiceEnum { } -[CodeGenModel("FineTuningJobHyperparametersLearningRateMultiplierChoiceEnum")] +[CodeGenType("FineTuningJobHyperparametersLearningRateMultiplierChoiceEnum")] internal readonly partial struct FineTuningJobHyperparametersLearningRateMultiplierChoiceEnum { } -[CodeGenModel("FineTuningJobHyperparametersNEpochsChoiceEnum")] +[CodeGenType("FineTuningJobHyperparametersNEpochsChoiceEnum")] internal readonly partial struct FineTuningJobHyperparametersNEpochsChoiceEnum { } -[CodeGenModel("UnknownCreateFineTuningJobRequestIntegration")] +[CodeGenType("UnknownCreateFineTuningJobRequestIntegration")] internal partial class UnknownCreateFineTuningJobRequestIntegration { } -[CodeGenModel("UnknownFineTuningIntegration")] +[CodeGenType("UnknownFineTuningIntegration")] internal partial class UnknownFineTuningIntegration { } -[CodeGenModel("FineTuningJobEventObject")] +[CodeGenType("FineTuningJobEventObject")] internal readonly partial struct InternalFineTuningJobEventObject { } -[CodeGenModel("ListFineTuningJobEventsResponseObject")] +[CodeGenType("ListFineTuningJobEventsResponseObject")] internal readonly partial struct InternalListFineTuningJobEventsResponseObject { } -[CodeGenModel("CreateFineTuningJobRequestModel")] +[CodeGenType("CreateFineTuningJobRequestModel")] internal readonly partial struct InternalCreateFineTuningJobRequestModel { } // Future public types follow -[CodeGenModel("CreateFineTuningJobRequestIntegration")] +[CodeGenType("CreateFineTuningJobRequestIntegration")] internal partial class FineTuningIntegration { } -[CodeGenModel("FineTuningJob")] +[CodeGenType("FineTuningJob")] internal partial class FineTuningJob { } -[CodeGenModel("FineTuningJobError")] +[CodeGenType("FineTuningJobError1")] internal partial class FineTuningJobError { } -[CodeGenModel("FineTuningJobEvent")] +[CodeGenType("FineTuningJobEvent")] internal partial class FineTuningJobEvent { } -[CodeGenModel("FineTuningJobEventLevel")] +[CodeGenType("FineTuningJobEventLevel")] internal enum FineTuningJobEventLevel { Info, @@ -107,7 +112,7 @@ internal enum FineTuningJobEventLevel Error } -[CodeGenModel("FineTuningJobHyperparameters")] +[CodeGenType("FineTuningJobHyperparameters")] [StructLayout(LayoutKind.Auto)] internal readonly partial struct FineTuningJobHyperparameters { @@ -116,52 +121,59 @@ internal readonly partial struct FineTuningJobHyperparameters public BinaryData LearningRateMultiplier { get; } } -[CodeGenModel("FineTuningJobStatus")] +[CodeGenType("FineTuningJobStatus")] internal readonly partial struct FineTuningJobStatus { } -[CodeGenModel("CreateFineTuningJobRequest")] +[CodeGenType("CreateFineTuningJobRequest")] internal partial class FineTuningOptions { } -[CodeGenModel("CreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum")] +[CodeGenType("CreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum")] internal readonly partial struct HyperparameterBatchSize { } -[CodeGenModel("CreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum")] +[CodeGenType("CreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum")] internal readonly partial struct HyperparameterCycleCount { } -[CodeGenModel("CreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum")] +[CodeGenType("CreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum")] internal readonly partial struct HyperparameterLearningRate { } -[CodeGenModel("CreateFineTuningJobRequestHyperparameters")] +[CodeGenType("CreateFineTuningJobRequestHyperparameters")] internal partial class HyperparameterOptions { } -[CodeGenModel("CreateFineTuningJobRequestWandbIntegration")] +[CodeGenType("CreateFineTuningJobRequestWandbIntegration")] internal partial class WeightsAndBiasesIntegration { } // TODO: not yet integrated -[CodeGenModel("FineTuneChatRequestInput")] +[CodeGenType("FineTuneChatRequestInput")] internal partial class InternalTodoFineTuneChatRequestInput { } -[CodeGenModel("FineTuneCompletionRequestInput")] +[CodeGenType("FineTuneCompletionRequestInput")] internal partial class InternalTodoFineTuneCompletionRequestInput { } -[CodeGenModel("FineTuneDPOMethod")] +[CodeGenType("FineTuneDPOMethod")] internal partial class InternalTodoFineTuneDPOMethod { } -[CodeGenModel("FineTuneDPOMethodHyperparameters")] +[CodeGenType("FineTuneDPOMethodHyperparameters")] internal partial class InternalTodoFineTuneDPOMethodHyperparameters { } -[CodeGenModel("FineTuneMethod")] +[CodeGenType("FineTuneMethod")] internal partial class InternalTodoFineTuneMethod { } -[CodeGenModel("FineTuneMethodType")] +[CodeGenType("FineTuneMethodType")] internal readonly partial struct InternalTodoFineTuneMethodType { } -[CodeGenModel("FineTuneSupervisedMethod")] +[CodeGenType("FineTuneSupervisedMethod")] internal partial class InternalTodoFineTuneSupervisedMethod { } -[CodeGenModel("FineTuneSupervisedMethodHyperparameters")] +[CodeGenType("FineTuneSupervisedMethodHyperparameters")] internal partial class InternalFineTuneSupervisedMethodHyperparameters { } -[CodeGenModel("FineTuningJobEventType")] -internal readonly partial struct InternalFineTuningJobEventType { } \ No newline at end of file +[CodeGenType("FineTuningJobEventType")] +internal readonly partial struct InternalFineTuningJobEventType { } + +[CodeGenType("FineTuneChatCompletionRequestAssistantMessageWeight")] +internal readonly partial struct InternalFineTuneChatCompletionRequestAssistantMessageWeight { } + +[CodeGenType("FineTuneChatCompletionRequestAssistantMessageRole")] +internal readonly partial struct InternalFineTuneChatCompletionRequestAssistantMessageRole { } + diff --git a/src/Custom/Images/GeneratedImage.cs b/src/Custom/Images/GeneratedImage.cs index 5c8158c76..086320a51 100644 --- a/src/Custom/Images/GeneratedImage.cs +++ b/src/Custom/Images/GeneratedImage.cs @@ -5,7 +5,7 @@ namespace OpenAI.Images; /// /// Represents the result data for an image generation request. /// -[CodeGenModel("Image")] +[CodeGenType("Image")] public partial class GeneratedImage { // CUSTOM: diff --git a/src/Custom/Images/GeneratedImageCollection.cs b/src/Custom/Images/GeneratedImageCollection.cs index 4679345ae..e4932d3ef 100644 --- a/src/Custom/Images/GeneratedImageCollection.cs +++ b/src/Custom/Images/GeneratedImageCollection.cs @@ -7,7 +7,7 @@ namespace OpenAI.Images; /// /// Represents an image generation response payload that contains information for multiple generated images. /// -[CodeGenModel("ImagesResponse")] +[CodeGenType("ImagesResponse")] [CodeGenSuppress("Data")] [CodeGenSuppress("Created")] [CodeGenSuppress(nameof(GeneratedImageCollection))] diff --git a/src/Custom/Images/GeneratedImageFormat.cs b/src/Custom/Images/GeneratedImageFormat.cs index 499354405..6c8355c25 100644 --- a/src/Custom/Images/GeneratedImageFormat.cs +++ b/src/Custom/Images/GeneratedImageFormat.cs @@ -2,7 +2,7 @@ namespace OpenAI.Images; // CUSTOM: Renamed. /// The format in which the generated images are returned by the service. -[CodeGenModel("CreateImageRequestResponseFormat")] +[CodeGenType("CreateImageRequestResponseFormat")] public readonly partial struct GeneratedImageFormat { // CUSTOM: Renamed. diff --git a/src/Custom/Images/GeneratedImageQuality.cs b/src/Custom/Images/GeneratedImageQuality.cs index b769e599b..b68ef4870 100644 --- a/src/Custom/Images/GeneratedImageQuality.cs +++ b/src/Custom/Images/GeneratedImageQuality.cs @@ -1,11 +1,11 @@ namespace OpenAI.Images; // CUSTOM: Renamed. -/// +/// /// The quality of the image that will be generated. creates images with finer details and /// greater consistency across the image. /// -[CodeGenModel("CreateImageRequestQuality")] +[CodeGenType("CreateImageRequestQuality")] public readonly partial struct GeneratedImageQuality { [CodeGenMember("Hd")] diff --git a/src/Custom/Images/GeneratedImageSize.cs b/src/Custom/Images/GeneratedImageSize.cs index f2a9050f6..ddf7b143d 100644 --- a/src/Custom/Images/GeneratedImageSize.cs +++ b/src/Custom/Images/GeneratedImageSize.cs @@ -4,7 +4,7 @@ namespace OpenAI.Images; // CUSTOM: Added custom struct in favor of the generated extensible enum. /// The size of the image that will be generated. -[CodeGenModel("CreateImageRequestSize")] +[CodeGenType("CreateImageRequestSize")] [CodeGenSuppress("GeneratedImageSize", typeof(string))] // CUSTOM: remove the implicit operator [CodeGenSuppress("", typeof(string))] diff --git a/src/Custom/Images/GeneratedImageStyle.cs b/src/Custom/Images/GeneratedImageStyle.cs index 60a53c958..a83817d1c 100644 --- a/src/Custom/Images/GeneratedImageStyle.cs +++ b/src/Custom/Images/GeneratedImageStyle.cs @@ -6,7 +6,7 @@ namespace OpenAI.Images; /// hyper-real and dramatic images. causes the model to produce more natural, less hyper-real /// looking images. /// -[CodeGenModel("CreateImageRequestStyle")] +[CodeGenType("CreateImageRequestStyle")] public readonly partial struct GeneratedImageStyle { } \ No newline at end of file diff --git a/src/Custom/Images/ImageClient.cs b/src/Custom/Images/ImageClient.cs index 7eda78f4f..15a623653 100644 --- a/src/Custom/Images/ImageClient.cs +++ b/src/Custom/Images/ImageClient.cs @@ -13,8 +13,8 @@ namespace OpenAI.Images; // - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. // - Suppressed methods that only take the options parameter. /// The service client for OpenAI image operations. -[CodeGenClient("Images")] -[CodeGenSuppress("ImageClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[CodeGenType("Images")] +[CodeGenSuppress("ImageClient", typeof(ClientPipeline), typeof(Uri))] [CodeGenSuppress("CreateImageAsync", typeof(ImageGenerationOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateImage", typeof(ImageGenerationOptions), typeof(CancellationToken))] public partial class ImageClient @@ -191,7 +191,7 @@ public virtual async Task> GenerateImageEditAsync(S options ??= new(); CreateImageEditOptions(image, imageFilename, prompt, null, null, null, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, null, null); + 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()); } @@ -220,7 +220,7 @@ public virtual ClientResult GenerateImageEdit(Stream image, stri options ??= new(); CreateImageEditOptions(image, imageFilename, prompt, null, null, null, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, null, null); + 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()); } @@ -297,7 +297,7 @@ public virtual async Task> GenerateImageEditAsync(S options ??= new(); CreateImageEditOptions(image, imageFilename, prompt, mask, maskFilename, null, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, mask, maskFilename); + 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()); } @@ -334,7 +334,7 @@ public virtual ClientResult GenerateImageEdit(Stream image, stri options ??= new(); CreateImageEditOptions(image, imageFilename, prompt, mask, maskFilename, null, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, mask, maskFilename); + 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()); } @@ -420,7 +420,7 @@ public virtual async Task> GenerateImageE options ??= new(); CreateImageEditOptions(image, imageFilename, prompt, null, null, imageCount, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, null, null); + 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()); } @@ -450,7 +450,7 @@ public virtual ClientResult GenerateImageEdits(Stream options ??= new(); CreateImageEditOptions(image, imageFilename, prompt, null, null, imageCount, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, null, null); + using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, null, null); ClientResult result = GenerateImageEdits(content, content.ContentType, cancellationToken.ToRequestOptions()); return ClientResult.FromValue((GeneratedImageCollection)result, result.GetRawResponse()); } @@ -530,7 +530,7 @@ public virtual async Task> GenerateImageE options ??= new(); CreateImageEditOptions(image, imageFilename, prompt, mask, maskFilename, imageCount, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, mask, maskFilename); + 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()); } @@ -568,7 +568,7 @@ public virtual ClientResult GenerateImageEdits(Stream options ??= new(); CreateImageEditOptions(image, imageFilename, prompt, mask, maskFilename, imageCount, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, mask, maskFilename); + using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, mask, maskFilename); ClientResult result = GenerateImageEdits(content, content.ContentType, cancellationToken.ToRequestOptions()); return ClientResult.FromValue((GeneratedImageCollection)result, result.GetRawResponse()); } @@ -654,7 +654,7 @@ public virtual async Task> GenerateImageVariationAs options ??= new(); CreateImageVariationOptions(image, imageFilename, null, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename); + 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()); } @@ -678,7 +678,7 @@ public virtual ClientResult GenerateImageVariation(Stream image, options ??= new(); CreateImageVariationOptions(image, imageFilename, null, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename); + using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename); ClientResult result = GenerateImageVariations(content, content.ContentType, cancellationToken.ToRequestOptions()); return ClientResult.FromValue(((GeneratedImageCollection)result).FirstOrDefault(), result.GetRawResponse()); } @@ -739,7 +739,7 @@ public virtual async Task> GenerateImageV options ??= new(); CreateImageVariationOptions(image, imageFilename, imageCount, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename); + 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()); } @@ -764,7 +764,7 @@ public virtual ClientResult GenerateImageVariations(St options ??= new(); CreateImageVariationOptions(image, imageFilename, imageCount, ref options); - using MultipartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename); + using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename); ClientResult result = GenerateImageVariations(content, content.ContentType, cancellationToken.ToRequestOptions()); return ClientResult.FromValue((GeneratedImageCollection)result, result.GetRawResponse()); } diff --git a/src/Custom/Images/ImageEditOptions.cs b/src/Custom/Images/ImageEditOptions.cs index 62126899e..984d2a714 100644 --- a/src/Custom/Images/ImageEditOptions.cs +++ b/src/Custom/Images/ImageEditOptions.cs @@ -6,7 +6,7 @@ namespace OpenAI.Images; /// /// Represents additional options available to control the behavior of an image generation operation. /// -[CodeGenModel("CreateImageEditRequest")] +[CodeGenType("CreateImageEditRequest")] [CodeGenSuppress("ImageEditOptions", typeof(BinaryData), typeof(string))] public partial class ImageEditOptions { @@ -91,9 +91,9 @@ public ImageEditOptions() [CodeGenMember("User")] public string EndUserId { get; set; } - internal MultipartFormDataBinaryContent ToMultipartContent(Stream image, string imageFilename, Stream mask, string maskFilename) + internal MultiPartFormDataBinaryContent ToMultipartContent(Stream image, string imageFilename, Stream mask, string maskFilename) { - MultipartFormDataBinaryContent content = new(); + MultiPartFormDataBinaryContent content = new(); content.Add(image, "image", imageFilename); content.Add(Prompt, "prompt"); diff --git a/src/Custom/Images/ImageGenerationOptions.cs b/src/Custom/Images/ImageGenerationOptions.cs index 688e7e701..b53184561 100644 --- a/src/Custom/Images/ImageGenerationOptions.cs +++ b/src/Custom/Images/ImageGenerationOptions.cs @@ -3,7 +3,7 @@ namespace OpenAI.Images; /// /// Represents additional options available to control the behavior of an image generation operation. /// -[CodeGenModel("CreateImageRequest")] +[CodeGenType("CreateImageRequest")] [CodeGenSuppress("ImageGenerationOptions", typeof(string))] public partial class ImageGenerationOptions { diff --git a/src/Custom/Images/ImageVariationOptions.cs b/src/Custom/Images/ImageVariationOptions.cs index 43d6269e3..fbab2bacf 100644 --- a/src/Custom/Images/ImageVariationOptions.cs +++ b/src/Custom/Images/ImageVariationOptions.cs @@ -6,7 +6,7 @@ namespace OpenAI.Images; /// /// Represents additional options available to control the behavior of an image generation operation. /// -[CodeGenModel("CreateImageVariationRequest")] +[CodeGenType("CreateImageVariationRequest")] [CodeGenSuppress("ImageVariationOptions", typeof(BinaryData))] public partial class ImageVariationOptions { @@ -64,9 +64,9 @@ public ImageVariationOptions() [CodeGenMember("User")] public string EndUserId { get; set; } - internal MultipartFormDataBinaryContent ToMultipartContent(Stream image, string imageFilename) + internal MultiPartFormDataBinaryContent ToMultipartContent(Stream image, string imageFilename) { - MultipartFormDataBinaryContent content = new(); + MultiPartFormDataBinaryContent content = new(); content.Add(image, "image", imageFilename); content.Add(Model.Value.ToString(), "model"); diff --git a/src/Custom/Images/Internal/GeneratorStubs.cs b/src/Custom/Images/Internal/GeneratorStubs.cs index 3e85bb899..d6d618deb 100644 --- a/src/Custom/Images/Internal/GeneratorStubs.cs +++ b/src/Custom/Images/Internal/GeneratorStubs.cs @@ -2,23 +2,23 @@ namespace OpenAI.Images; // CUSTOM: Made internal. -[CodeGenModel("CreateImageEditRequestModel")] +[CodeGenType("CreateImageEditRequestModel")] internal readonly partial struct InternalCreateImageEditRequestModel { } -[CodeGenModel("CreateImageEditRequestResponseFormat")] +[CodeGenType("CreateImageEditRequestResponseFormat")] internal readonly partial struct InternalCreateImageEditRequestResponseFormat { } -[CodeGenModel("CreateImageEditRequestSize")] +[CodeGenType("CreateImageEditRequestSize")] internal readonly partial struct InternalCreateImageEditRequestSize { } -[CodeGenModel("CreateImageRequestModel")] +[CodeGenType("CreateImageRequestModel")] internal readonly partial struct InternalCreateImageRequestModel { } -[CodeGenModel("CreateImageVariationRequestModel")] +[CodeGenType("CreateImageVariationRequestModel")] internal readonly partial struct InternalCreateImageVariationRequestModel { } -[CodeGenModel("CreateImageVariationRequestResponseFormat")] +[CodeGenType("CreateImageVariationRequestResponseFormat")] internal readonly partial struct InternalCreateImageVariationRequestResponseFormat { } -[CodeGenModel("CreateImageVariationRequestSize")] +[CodeGenType("CreateImageVariationRequestSize")] internal readonly partial struct InternalCreateImageVariationRequestSize { } diff --git a/src/Custom/Internal/AcceptHeaderValue.cs b/src/Custom/Internal/AcceptHeaderValue.cs new file mode 100644 index 000000000..4feb80dd5 --- /dev/null +++ b/src/Custom/Internal/AcceptHeaderValue.cs @@ -0,0 +1,4 @@ +namespace OpenAI; + +[CodeGenType("CreateResponseRequestAccept")] +internal readonly partial struct AcceptHeaderValue { } diff --git a/src/Custom/Internal/InternalFunctionDefinition.cs b/src/Custom/Internal/InternalFunctionDefinition.cs index 7c4dafb6c..b23914be7 100644 --- a/src/Custom/Internal/InternalFunctionDefinition.cs +++ b/src/Custom/Internal/InternalFunctionDefinition.cs @@ -2,7 +2,7 @@ namespace OpenAI; -[CodeGenModel("FunctionObject")] +[CodeGenType("FunctionObject")] internal partial class InternalFunctionDefinition { /// diff --git a/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs b/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs index 43682d982..322153c56 100644 --- a/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs +++ b/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs @@ -2,23 +2,23 @@ namespace OpenAI.LegacyCompletions; // CUSTOM: Made internal. -[CodeGenModel("CreateCompletionRequest")] +[CodeGenType("CreateCompletionRequest")] internal partial class InternalCreateCompletionRequest { } -[CodeGenModel("CreateCompletionRequestModel")] +[CodeGenType("CreateCompletionRequestModel")] internal readonly partial struct InternalCreateCompletionRequestModel { } -[CodeGenModel("CreateCompletionResponse")] +[CodeGenType("CreateCompletionResponse")] internal partial class InternalCreateCompletionResponse { } -[CodeGenModel("CreateCompletionResponseChoice")] +[CodeGenType("CreateCompletionResponseChoice")] internal partial class InternalCreateCompletionResponseChoice { } -[CodeGenModel("CreateCompletionResponseChoiceFinishReason")] +[CodeGenType("CreateCompletionResponseChoiceFinishReason")] internal readonly partial struct InternalCreateCompletionResponseChoiceFinishReason { } -[CodeGenModel("CreateCompletionResponseChoiceLogprobs")] +[CodeGenType("CreateCompletionResponseChoiceLogprobs1")] internal partial class InternalCreateCompletionResponseChoiceLogprobs { } -[CodeGenModel("CreateCompletionResponseObject")] +[CodeGenType("CreateCompletionResponseObject")] internal readonly partial struct InternalCreateCompletionResponseObject { } \ No newline at end of file diff --git a/src/Custom/LegacyCompletions/Internal/LegacyCompletionClient.cs b/src/Custom/LegacyCompletions/Internal/LegacyCompletionClient.cs index 11491662e..a45fca3b0 100644 --- a/src/Custom/LegacyCompletions/Internal/LegacyCompletionClient.cs +++ b/src/Custom/LegacyCompletions/Internal/LegacyCompletionClient.cs @@ -9,8 +9,8 @@ namespace OpenAI.LegacyCompletions; // - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. // - Suppressed methods that only take the options parameter. /// The service client for OpenAI legacy completion operations. -[CodeGenClient("Completions")] -[CodeGenSuppress("LegacyCompletionClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[CodeGenType("Completions")] +[CodeGenSuppress("LegacyCompletionClient", typeof(ClientPipeline), typeof(Uri))] internal partial class LegacyCompletionClient { private readonly string _model; diff --git a/src/Custom/Models/Internal/GeneratorStubs.cs b/src/Custom/Models/Internal/GeneratorStubs.cs index 6210e27bf..0c1ab3a84 100644 --- a/src/Custom/Models/Internal/GeneratorStubs.cs +++ b/src/Custom/Models/Internal/GeneratorStubs.cs @@ -1,11 +1,11 @@ namespace OpenAI.Models; -[CodeGenModel("DeleteModelResponseObject")] +[CodeGenType("DeleteModelResponseObject")] internal readonly partial struct InternalDeleteModelResponseObject { } -[CodeGenModel("ListModelsResponseObject")] +[CodeGenType("ListModelsResponseObject")] internal readonly partial struct InternalListModelsResponseObject { } -[CodeGenModel("ModelObject")] +[CodeGenType("ModelObject")] internal readonly partial struct InternalModelObject { } diff --git a/src/Custom/Models/ModelDeletionResult.cs b/src/Custom/Models/ModelDeletionResult.cs index 4aa61f657..928337931 100644 --- a/src/Custom/Models/ModelDeletionResult.cs +++ b/src/Custom/Models/ModelDeletionResult.cs @@ -1,6 +1,6 @@ namespace OpenAI.Models; -[CodeGenModel("DeleteModelResponse")] +[CodeGenType("DeleteModelResponse")] public partial class ModelDeletionResult { // CUSTOM: Renamed. diff --git a/src/Custom/Models/OpenAIModel.cs b/src/Custom/Models/OpenAIModel.cs index a66b41dc9..66526ee71 100644 --- a/src/Custom/Models/OpenAIModel.cs +++ b/src/Custom/Models/OpenAIModel.cs @@ -5,7 +5,7 @@ namespace OpenAI.Models; /// /// Represents information about a single available model entry. /// -[CodeGenModel("Model")] +[CodeGenType("Model")] public partial class OpenAIModel { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. diff --git a/src/Custom/Models/OpenAIModelClient.cs b/src/Custom/Models/OpenAIModelClient.cs index 9cce4d38e..ea808b072 100644 --- a/src/Custom/Models/OpenAIModelClient.cs +++ b/src/Custom/Models/OpenAIModelClient.cs @@ -11,8 +11,8 @@ namespace OpenAI.Models; // - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. // - Renamed convenience methods. /// The service client for OpenAI model operations. -[CodeGenClient("ModelsOps")] -[CodeGenSuppress("OpenAIModelClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[CodeGenType("Models")] +[CodeGenSuppress("OpenAIModelClient", typeof(ClientPipeline), typeof(Uri))] [CodeGenSuppress("ListModelsAsync", typeof(CancellationToken))] [CodeGenSuppress("ListModels", typeof(CancellationToken))] [CodeGenSuppress("RetrieveModelAsync", typeof(string), typeof(CancellationToken))] diff --git a/src/Custom/Models/OpenAIModelCollection.cs b/src/Custom/Models/OpenAIModelCollection.cs index a3f179dc4..8203ee07c 100644 --- a/src/Custom/Models/OpenAIModelCollection.cs +++ b/src/Custom/Models/OpenAIModelCollection.cs @@ -8,7 +8,7 @@ namespace OpenAI.Models; /// /// Represents a collection of entries for available models. /// -[CodeGenModel("ListModelsResponse")] +[CodeGenType("ListModelsResponse")] [CodeGenSuppress("Data")] [CodeGenSuppress(nameof(OpenAIModelCollection))] [CodeGenSuppress(nameof(OpenAIModelCollection), typeof(InternalListModelsResponseObject), typeof(IDictionary))] diff --git a/src/Custom/Moderations/Internal/GeneratorStubs.cs b/src/Custom/Moderations/Internal/GeneratorStubs.cs index ab9f19b35..bc6c8b967 100644 --- a/src/Custom/Moderations/Internal/GeneratorStubs.cs +++ b/src/Custom/Moderations/Internal/GeneratorStubs.cs @@ -1,25 +1,25 @@ namespace OpenAI.Moderations; -[CodeGenModel("CreateModerationRequestModel")] +[CodeGenType("CreateModerationRequestModel")] internal readonly partial struct InternalCreateModerationRequestModel { } -[CodeGenModel("CreateModerationRequestInput2")] +[CodeGenType("CreateModerationRequestInput2")] internal partial class InternalCreateModerationRequestInput2 { } -[CodeGenModel("CreateModerationRequestInput2Type")] +[CodeGenType("CreateModerationRequestInput2Type")] internal readonly partial struct InternalCreateModerationRequestInput2Type { } -[CodeGenModel("CreateModerationRequestInput3")] +[CodeGenType("CreateModerationRequestInput3")] internal partial class InternalCreateModerationRequestInput3 { } -[CodeGenModel("CreateModerationRequestInput3Type")] +[CodeGenType("CreateModerationRequestInput3Type")] internal readonly partial struct InternalCreateModerationRequestInput3Type { } -[CodeGenModel("CreateModerationRequestInputImageUrl")] +[CodeGenType("CreateModerationRequestInputImageUrl")] internal partial class InternalCreateModerationRequestInputImageUrl { } -[CodeGenModel("CreateModerationResponseResultCategories")] +[CodeGenType("CreateModerationResponseResultCategories")] internal partial class InternalModerationCategories { } -[CodeGenModel("CreateModerationResponseResultCategoryScores")] +[CodeGenType("CreateModerationResponseResultCategoryScores")] internal partial class InternalModerationCategoryScores { } diff --git a/src/Custom/Moderations/Internal/InternalCreateModerationResponseResultCategoryAppliedInputTypes.cs b/src/Custom/Moderations/Internal/InternalCreateModerationResponseResultCategoryAppliedInputTypes.cs index a01ee12fa..c6a950d8a 100644 --- a/src/Custom/Moderations/Internal/InternalCreateModerationResponseResultCategoryAppliedInputTypes.cs +++ b/src/Custom/Moderations/Internal/InternalCreateModerationResponseResultCategoryAppliedInputTypes.cs @@ -4,7 +4,7 @@ namespace OpenAI.Moderations; -[CodeGenModel("CreateModerationResponseResultCategoryAppliedInputTypes")] +[CodeGenType("CreateModerationResponseResultCategoryAppliedInputTypes")] internal partial class InternalCreateModerationResponseResultCategoryAppliedInputTypes { // CUSTOM: normalize to List for internal representation diff --git a/src/Custom/Moderations/ModerationApplicableInputKinds.cs b/src/Custom/Moderations/ModerationApplicableInputKinds.cs index e12c0ab25..39752a41a 100644 --- a/src/Custom/Moderations/ModerationApplicableInputKinds.cs +++ b/src/Custom/Moderations/ModerationApplicableInputKinds.cs @@ -4,7 +4,7 @@ namespace OpenAI.Moderations; /// The kinds of inputs that is applicable to. [Flags] -[CodeGenModel("ModerationAppliedInputType")] +[CodeGenType("ModerationAppliedInputType")] internal enum ModerationApplicableInputKinds : int { None = 0, diff --git a/src/Custom/Moderations/ModerationClient.cs b/src/Custom/Moderations/ModerationClient.cs index eb38878d3..586217329 100644 --- a/src/Custom/Moderations/ModerationClient.cs +++ b/src/Custom/Moderations/ModerationClient.cs @@ -15,8 +15,8 @@ namespace OpenAI.Moderations; // - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. // - Suppressed methods that only take the options parameter. /// The service client for OpenAI moderation operations. -[CodeGenClient("Moderations")] -[CodeGenSuppress("ModerationClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[CodeGenType("Moderations")] +[CodeGenSuppress("ModerationClient", typeof(ClientPipeline), typeof(Uri))] [CodeGenSuppress("CreateModerationAsync", typeof(ModerationOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateModeration", typeof(ModerationOptions), typeof(CancellationToken))] public partial class ModerationClient diff --git a/src/Custom/Moderations/ModerationOptions.cs b/src/Custom/Moderations/ModerationOptions.cs index b88459dd8..f503da981 100644 --- a/src/Custom/Moderations/ModerationOptions.cs +++ b/src/Custom/Moderations/ModerationOptions.cs @@ -3,7 +3,7 @@ namespace OpenAI.Moderations; -[CodeGenModel("CreateModerationRequest")] +[CodeGenType("CreateModerationRequest")] [CodeGenSuppress("ModerationOptions", typeof(BinaryData))] internal partial class ModerationOptions { diff --git a/src/Custom/Moderations/ModerationResult.cs b/src/Custom/Moderations/ModerationResult.cs index 3a4694cb5..b2d6b49c6 100644 --- a/src/Custom/Moderations/ModerationResult.cs +++ b/src/Custom/Moderations/ModerationResult.cs @@ -5,7 +5,7 @@ namespace OpenAI.Moderations; // CUSTOM: // - Removes the redundant classes `ModerationCategories` and `ModerationCategoryScores` and moves their properties into this type. -[CodeGenModel("CreateModerationResponseResult")] +[CodeGenType("CreateModerationResponseResult")] [CodeGenSuppress("Categories")] [CodeGenSuppress("CategoryScores")] [CodeGenSuppress("CategoryAppliedInputTypes")] diff --git a/src/Custom/Moderations/ModerationResultCollection.cs b/src/Custom/Moderations/ModerationResultCollection.cs index e21362f71..bc01cfcc2 100644 --- a/src/Custom/Moderations/ModerationResultCollection.cs +++ b/src/Custom/Moderations/ModerationResultCollection.cs @@ -4,7 +4,7 @@ namespace OpenAI.Moderations; -[CodeGenModel("CreateModerationResponse")] +[CodeGenType("CreateModerationResponse")] [CodeGenSuppress("Results")] [CodeGenSuppress(nameof(ModerationResultCollection))] [CodeGenSuppress(nameof(ModerationResultCollection), typeof(string), typeof(string))] diff --git a/src/Custom/OpenAIClient.cs b/src/Custom/OpenAIClient.cs index 33b152ece..2e7e0498d 100644 --- a/src/Custom/OpenAIClient.cs +++ b/src/Custom/OpenAIClient.cs @@ -9,6 +9,7 @@ using OpenAI.Models; using OpenAI.Moderations; using OpenAI.RealtimeConversation; +using OpenAI.Responses; using OpenAI.VectorStores; using System; using System.ClientModel; @@ -25,7 +26,7 @@ namespace OpenAI; /// 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. /// -[CodeGenModel("OpenAIClient")] +[CodeGenType("OpenAIClient")] [CodeGenSuppress("OpenAIClient", typeof(ApiKeyCredential))] [CodeGenSuppress("OpenAIClient", typeof(Uri), typeof(ApiKeyCredential), typeof(OpenAIClientOptions))] [CodeGenSuppress("_cachedAssistantClient")] @@ -44,6 +45,7 @@ namespace OpenAI; [CodeGenSuppress("_cachedOpenAIModelClient")] [CodeGenSuppress("_cachedModerationClient")] [CodeGenSuppress("_cachedRealtimeConversationClient")] +[CodeGenSuppress("_cachedResponsesClient")] [CodeGenSuppress("_cachedVectorStoreClient")] [CodeGenSuppress("GetAssistantClient")] [CodeGenSuppress("GetAudioClient")] @@ -61,15 +63,14 @@ namespace OpenAI; [CodeGenSuppress("GetModelClient")] [CodeGenSuppress("GetModerationClient")] [CodeGenSuppress("GetRealtimeConversationClient")] +[CodeGenSuppress("GetResponsesClient")] [CodeGenSuppress("GetVectorStoreClient")] public partial class OpenAIClient { private const string OpenAIV1Endpoint = "https://api.openai.com/v1"; - private const string OpenAIBetaHeaderValue = "assistants=v2"; private static class KnownHeaderNames { - public const string OpenAIBeta = "OpenAI-Beta"; public const string OpenAIOrganization = "OpenAI-Organization"; public const string OpenAIProject = "OpenAI-Project"; public const string UserAgent = "User-Agent"; @@ -241,6 +242,17 @@ protected internal OpenAIClient(ClientPipeline pipeline, OpenAIClientOptions opt /// 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. @@ -261,7 +273,6 @@ internal static ClientPipeline CreatePipeline(ApiKeyCredential credential, OpenA return ClientPipeline.Create( options, perCallPolicies: [ - CreateAddBetaFeatureHeaderPolicy(), CreateAddCustomHeadersPolicy(options), ], perTryPolicies: [ @@ -276,17 +287,6 @@ internal static Uri GetEndpoint(OpenAIClientOptions options = null) return options?.Endpoint ?? new(OpenAIV1Endpoint); } - private static PipelinePolicy CreateAddBetaFeatureHeaderPolicy() - { - return new GenericActionPipelinePolicy((message) => - { - if (message?.Request?.Headers?.TryGetValue(KnownHeaderNames.OpenAIBeta, out string _) == false) - { - message.Request.Headers.Set(KnownHeaderNames.OpenAIBeta, OpenAIBetaHeaderValue); - } - }); - } - private static PipelinePolicy CreateAddCustomHeadersPolicy(OpenAIClientOptions options = null) { TelemetryDetails telemetryDetails = new(typeof(OpenAIClientOptions).Assembly, options?.UserAgentApplicationId); diff --git a/src/Custom/OpenAIClientOptions.cs b/src/Custom/OpenAIClientOptions.cs index 0f5b67fce..585882f74 100644 --- a/src/Custom/OpenAIClientOptions.cs +++ b/src/Custom/OpenAIClientOptions.cs @@ -4,7 +4,7 @@ namespace OpenAI; /// The options to configure the client. -[CodeGenModel("OpenAIClientOptions")] +[CodeGenType("OpenAIClientOptions")] public partial class OpenAIClientOptions : ClientPipelineOptions { private Uri _endpoint; diff --git a/src/Custom/OpenAIError.cs b/src/Custom/OpenAIError.cs index 3199b5290..7bdc7c596 100644 --- a/src/Custom/OpenAIError.cs +++ b/src/Custom/OpenAIError.cs @@ -10,7 +10,7 @@ namespace OpenAI.Internal; // - 'FromResponse' added for convenience with parent type // - 'ToExceptionMessage' added for encapsulated message formatting -[CodeGenModel("Error")] +[CodeGenType("Error")] internal partial class OpenAIError { internal static OpenAIError TryCreateFromResponse(PipelineResponse response) @@ -49,5 +49,5 @@ public string ToExceptionMessage(int httpStatus) // Custom: // - Renamed -[CodeGenModel("ErrorResponse")] +[CodeGenType("ErrorResponse")] internal partial class OpenAIErrorResponse { } diff --git a/src/Custom/OpenAIModelFactory.cs b/src/Custom/OpenAIModelFactory.cs index 48ad6dd20..dcbb06252 100644 --- a/src/Custom/OpenAIModelFactory.cs +++ b/src/Custom/OpenAIModelFactory.cs @@ -1,6 +1,6 @@ namespace OpenAI; -[CodeGenModel("OpenAIModelFactory")] +[CodeGenType("OpenAIModelFactory")] internal static partial class OpenAIModelFactory { } diff --git a/src/Custom/RealtimeConversation/ConversationContentPart.cs b/src/Custom/RealtimeConversation/ConversationContentPart.cs index 0648a83cd..1c8934fba 100644 --- a/src/Custom/RealtimeConversation/ConversationContentPart.cs +++ b/src/Custom/RealtimeConversation/ConversationContentPart.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeContentPart")] +[CodeGenType("RealtimeContentPart")] public partial class ConversationContentPart { public string Text => diff --git a/src/Custom/RealtimeConversation/ConversationContentPartKind.cs b/src/Custom/RealtimeConversation/ConversationContentPartKind.cs index 75adf721b..c87462431 100644 --- a/src/Custom/RealtimeConversation/ConversationContentPartKind.cs +++ b/src/Custom/RealtimeConversation/ConversationContentPartKind.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeContentPartType")] +[CodeGenType("RealtimeContentPartType")] public readonly partial struct ConversationContentPartKind { [CodeGenMember("Audio")] diff --git a/src/Custom/RealtimeConversation/ConversationFunctionTool.cs b/src/Custom/RealtimeConversation/ConversationFunctionTool.cs index dcb2621ee..c095c5484 100644 --- a/src/Custom/RealtimeConversation/ConversationFunctionTool.cs +++ b/src/Custom/RealtimeConversation/ConversationFunctionTool.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeFunctionTool")] +[CodeGenType("RealtimeFunctionTool")] public partial class ConversationFunctionTool : ConversationTool { [CodeGenMember("Name")] diff --git a/src/Custom/RealtimeConversation/ConversationIncompleteReason.cs b/src/Custom/RealtimeConversation/ConversationIncompleteReason.cs index bb2b76df0..3913ca477 100644 --- a/src/Custom/RealtimeConversation/ConversationIncompleteReason.cs +++ b/src/Custom/RealtimeConversation/ConversationIncompleteReason.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeResponseStatusDetailsReason")] +[CodeGenType("RealtimeResponseStatusDetailsReason")] public readonly partial struct ConversationIncompleteReason { } \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ConversationInputTokenUsageDetails.cs b/src/Custom/RealtimeConversation/ConversationInputTokenUsageDetails.cs index 713ca5b8d..a3c38f534 100644 --- a/src/Custom/RealtimeConversation/ConversationInputTokenUsageDetails.cs +++ b/src/Custom/RealtimeConversation/ConversationInputTokenUsageDetails.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeResponseUsageInputTokenDetails")] +[CodeGenType("RealtimeResponseUsageInputTokenDetails")] public partial class ConversationInputTokenUsageDetails { // CUSTOM: Remove output model optionality, make 'Count' names consistent with Chat diff --git a/src/Custom/RealtimeConversation/ConversationItem.cs b/src/Custom/RealtimeConversation/ConversationItem.cs index 96bc20804..bf6e8791c 100644 --- a/src/Custom/RealtimeConversation/ConversationItem.cs +++ b/src/Custom/RealtimeConversation/ConversationItem.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeConversationRequestItem")] +[CodeGenType("RealtimeConversationRequestItem")] public partial class ConversationItem { public string FunctionCallId => (this as InternalRealtimeRequestFunctionCallItem)?.CallId; diff --git a/src/Custom/RealtimeConversation/ConversationOutputTokenUsageDetails.cs b/src/Custom/RealtimeConversation/ConversationOutputTokenUsageDetails.cs index ba1c36561..fb346e199 100644 --- a/src/Custom/RealtimeConversation/ConversationOutputTokenUsageDetails.cs +++ b/src/Custom/RealtimeConversation/ConversationOutputTokenUsageDetails.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeResponseUsageOutputTokenDetails")] +[CodeGenType("RealtimeResponseUsageOutputTokenDetails")] public partial class ConversationOutputTokenUsageDetails { // CUSTOM: Remove output model optionality, make 'Count' names consistent with Chat diff --git a/src/Custom/RealtimeConversation/ConversationRateLimitDetailsItem.cs b/src/Custom/RealtimeConversation/ConversationRateLimitDetailsItem.cs index 7f8fa721c..dd4f1786b 100644 --- a/src/Custom/RealtimeConversation/ConversationRateLimitDetailsItem.cs +++ b/src/Custom/RealtimeConversation/ConversationRateLimitDetailsItem.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventRateLimitsUpdatedRateLimitsItem")] +[CodeGenType("RealtimeServerEventRateLimitsUpdatedRateLimitsItem")] public partial class ConversationRateLimitDetailsItem { [CodeGenMember("Limit")] diff --git a/src/Custom/RealtimeConversation/ConversationResponseOptions.cs b/src/Custom/RealtimeConversation/ConversationResponseOptions.cs index 6060d1721..5c25f651b 100644 --- a/src/Custom/RealtimeConversation/ConversationResponseOptions.cs +++ b/src/Custom/RealtimeConversation/ConversationResponseOptions.cs @@ -8,7 +8,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeResponseCreateParams")] +[CodeGenType("RealtimeResponseCreateParams")] public partial class ConversationResponseOptions { [CodeGenMember("Conversation")] diff --git a/src/Custom/RealtimeConversation/ConversationSessionOptions.cs b/src/Custom/RealtimeConversation/ConversationSessionOptions.cs index 5a0bd2be2..3dab08b6d 100644 --- a/src/Custom/RealtimeConversation/ConversationSessionOptions.cs +++ b/src/Custom/RealtimeConversation/ConversationSessionOptions.cs @@ -6,7 +6,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeRequestSession")] +[CodeGenType("RealtimeRequestSession")] public partial class ConversationSessionOptions { [CodeGenMember("Model")] diff --git a/src/Custom/RealtimeConversation/ConversationStatusDetails.cs b/src/Custom/RealtimeConversation/ConversationStatusDetails.cs index 346eebd12..7198a07df 100644 --- a/src/Custom/RealtimeConversation/ConversationStatusDetails.cs +++ b/src/Custom/RealtimeConversation/ConversationStatusDetails.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeResponseStatusDetails")] +[CodeGenType("RealtimeResponseStatusDetails")] public partial class ConversationStatusDetails { [CodeGenMember("Type")] diff --git a/src/Custom/RealtimeConversation/ConversationTool.cs b/src/Custom/RealtimeConversation/ConversationTool.cs index be18996df..59e5e4a41 100644 --- a/src/Custom/RealtimeConversation/ConversationTool.cs +++ b/src/Custom/RealtimeConversation/ConversationTool.cs @@ -4,7 +4,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeTool")] +[CodeGenType("RealtimeTool")] public abstract partial class ConversationTool { [CodeGenMember("Type")] diff --git a/src/Custom/RealtimeConversation/ConversationToolChoiceKind.cs b/src/Custom/RealtimeConversation/ConversationToolChoiceKind.cs index 25a9a43c3..1a82a3f4f 100644 --- a/src/Custom/RealtimeConversation/ConversationToolChoiceKind.cs +++ b/src/Custom/RealtimeConversation/ConversationToolChoiceKind.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeToolChoiceLiteral")] +[CodeGenType("RealtimeToolChoiceLiteral")] public enum ConversationToolChoiceKind { Unknown, diff --git a/src/Custom/RealtimeConversation/ConversationTurnDetectionKind.cs b/src/Custom/RealtimeConversation/ConversationTurnDetectionKind.cs index 6b0bcf117..c0fc90686 100644 --- a/src/Custom/RealtimeConversation/ConversationTurnDetectionKind.cs +++ b/src/Custom/RealtimeConversation/ConversationTurnDetectionKind.cs @@ -4,7 +4,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeTurnDetectionType")] +[CodeGenType("RealtimeTurnDetectionType")] public enum ConversationTurnDetectionKind { [CodeGenMember("ServerVad")] diff --git a/src/Custom/RealtimeConversation/ConversationTurnDetectionOptions.cs b/src/Custom/RealtimeConversation/ConversationTurnDetectionOptions.cs index e8ebe583d..e40b689f1 100644 --- a/src/Custom/RealtimeConversation/ConversationTurnDetectionOptions.cs +++ b/src/Custom/RealtimeConversation/ConversationTurnDetectionOptions.cs @@ -4,7 +4,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeTurnDetection")] +[CodeGenType("RealtimeTurnDetection")] public partial class ConversationTurnDetectionOptions { [CodeGenMember("Kind")] diff --git a/src/Custom/RealtimeConversation/GeneratorStubs.cs b/src/Custom/RealtimeConversation/GeneratorStubs.cs index 3e3cfce8e..fe542184a 100644 --- a/src/Custom/RealtimeConversation/GeneratorStubs.cs +++ b/src/Custom/RealtimeConversation/GeneratorStubs.cs @@ -2,12 +2,12 @@ namespace OpenAI.RealtimeConversation; -[Experimental("OPENAI002")][CodeGenModel("RealtimeAudioFormat")] public readonly partial struct ConversationAudioFormat { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeAudioInputTranscriptionModel")] public readonly partial struct ConversationTranscriptionModel { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeAudioInputTranscriptionSettings")] public partial class ConversationInputTranscriptionOptions { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeItemStatus")] public readonly partial struct ConversationItemStatus { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeMessageRole")] public readonly partial struct ConversationMessageRole { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseStatus")] public readonly partial struct ConversationStatus { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseUsage")] public partial class ConversationTokenUsage { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeToolType")] public readonly partial struct ConversationToolKind { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeVoice")] public readonly partial struct ConversationVoice { } +[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 index d26ba5e9a..5861b03f5 100644 --- a/src/Custom/RealtimeConversation/Internal/GeneratorStubs.cs +++ b/src/Custom/RealtimeConversation/Internal/GeneratorStubs.cs @@ -2,49 +2,49 @@ namespace OpenAI.RealtimeConversation; -[Experimental("OPENAI002")][CodeGenModel("RealtimeClientEvent")] internal partial class InternalRealtimeClientEvent { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeClientEventConversationItemCreate")] internal partial class InternalRealtimeClientEventConversationItemCreate { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeClientEventConversationItemDelete")] internal partial class InternalRealtimeClientEventConversationItemDelete { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeClientEventConversationItemTruncate")] internal partial class InternalRealtimeClientEventConversationItemTruncate { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeClientEventInputAudioBufferAppend")] internal partial class InternalRealtimeClientEventInputAudioBufferAppend { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeClientEventInputAudioBufferClear")] internal partial class InternalRealtimeClientEventInputAudioBufferClear { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeClientEventInputAudioBufferCommit")] internal partial class InternalRealtimeClientEventInputAudioBufferCommit { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeClientEventResponseCancel")] internal partial class InternalRealtimeClientEventResponseCancel { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeClientEventSessionUpdate")] internal partial class InternalRealtimeClientEventSessionUpdate { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeClientEventType")] internal readonly partial struct InternalRealtimeClientEventType { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeConversationResponseItemObject")] internal readonly partial struct InternalRealtimeConversationResponseItemObject { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeItemType")] internal readonly partial struct InternalRealtimeItemType { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeModality")] internal readonly partial struct InternalRealtimeRequestSessionModality { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeRequestAudioContentPart")] internal partial class InternalRealtimeRequestAudioContentPart { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeRequestFunctionCallItem")] internal partial class InternalRealtimeRequestFunctionCallItem { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeRequestFunctionCallOutputItem")] internal partial class InternalRealtimeRequestFunctionCallOutputItem { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeRequestMessageItem")] internal partial class InternalRealtimeRequestMessageItem { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeRequestSessionModel")] internal readonly partial struct InternalRealtimeRequestSessionModel { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeRequestTextContentPart")] internal partial class InternalRealtimeRequestTextContentPart { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseAudioContentPart")] internal partial class InternalRealtimeResponseAudioContentPart { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseFunctionCallItem")] internal partial class InternalRealtimeResponseFunctionCallItem { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseFunctionCallOutputItem")] internal partial class InternalRealtimeResponseFunctionCallOutputItem { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseModality")] internal readonly partial struct InternalRealtimeResponseModality { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseObject")] internal readonly partial struct InternalRealtimeResponseObject { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseOutputAudioFormat")] internal readonly partial struct InternalRealtimeResponseOutputAudioFormat { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseSessionObject")] internal readonly partial struct InternalRealtimeResponseSessionObject { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseStatusDetailsError")] internal partial class InternalRealtimeResponseStatusDetailsError { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseStatusDetailsType")] internal readonly partial struct InternalRealtimeResponseStatusDetailsType { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseTextContentPart")] internal partial class InternalRealtimeResponseTextContentPart { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeResponseVoice")] internal readonly partial struct InternalRealtimeResponseVoice { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeServerEventConversationCreated")] internal partial class InternalRealtimeServerEventConversationCreated { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeServerEventConversationCreatedConversation")] internal partial class InternalRealtimeServerEventConversationCreatedConversation { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeServerEventConversationItemInputAudioTranscriptionFailedError")] internal partial class InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeServerEventErrorError")] internal partial class InternalRealtimeServerEventErrorError { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeToolChoiceFunctionObject")] internal partial class InternalRealtimeToolChoiceFunctionObject { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeToolChoiceFunctionObjectFunction")] internal partial class InternalRealtimeToolChoiceFunctionObjectFunction { } -[Experimental("OPENAI002")][CodeGenModel("RealtimeToolChoiceObject")] internal partial class InternalRealtimeToolChoiceObject { } -[Experimental("OPENAI002")][CodeGenModel("UnknownRealtimeClientEvent")] internal partial class UnknownRealtimeClientEvent { } -[Experimental("OPENAI002")][CodeGenModel("UnknownRealtimeContentPart")] internal partial class UnknownRealtimeContentPart { } -[Experimental("OPENAI002")][CodeGenModel("UnknownRealtimeConversationRequestItem")] internal partial class UnknownRealtimeRequestItem { } -[Experimental("OPENAI002")][CodeGenModel("UnknownRealtimeConversationResponseItem")] internal partial class UnknownRealtimeResponseItem { } -[Experimental("OPENAI002")][CodeGenModel("UnknownRealtimeRequestMessageItem")] internal partial class UnknownRealtimeRequestMessageItem { } -[Experimental("OPENAI002")][CodeGenModel("UnknownRealtimeServerEvent")] internal partial class UnknownRealtimeServerEvent { } -[Experimental("OPENAI002")][CodeGenModel("UnknownRealtimeTool")] internal partial class UnknownRealtimeTool { } -[Experimental("OPENAI002")][CodeGenModel("UnknownRealtimeToolChoiceObject")] internal partial class UnknownRealtimeToolChoiceObject { } -[Experimental("OPENAI002")][CodeGenModel("UnknownRealtimeTurnDetection")] internal partial class UnknownRealtimeTurnDetection { } +[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/InternalRealtimeClientEventResponseCreate.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeClientEventResponseCreate.cs index 8524b830f..78b63893a 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeClientEventResponseCreate.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeClientEventResponseCreate.cs @@ -7,7 +7,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeClientEventResponseCreate")] +[CodeGenType("RealtimeClientEventResponseCreate")] internal partial class InternalRealtimeClientEventResponseCreate { } diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestAssistantMessageItem.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestAssistantMessageItem.cs index ec50f9923..575e0b567 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestAssistantMessageItem.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestAssistantMessageItem.cs @@ -4,7 +4,7 @@ namespace OpenAI.RealtimeConversation; -[CodeGenModel("RealtimeRequestAssistantMessageItem")] +[CodeGenType("RealtimeRequestAssistantMessageItem")] [Experimental("OPENAI002")] internal partial class InternalRealtimeRequestAssistantMessageItem { diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestSystemMessageItem.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestSystemMessageItem.cs index b44385e44..85aead774 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestSystemMessageItem.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestSystemMessageItem.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeRequestSystemMessageItem")] +[CodeGenType("RealtimeRequestSystemMessageItem")] internal partial class InternalRealtimeRequestSystemMessageItem { [CodeGenMember("Content")] diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestUserMessageItem.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestUserMessageItem.cs index bb457b6fd..166e5ceb6 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestUserMessageItem.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestUserMessageItem.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeRequestUserMessageItem")] +[CodeGenType("RealtimeRequestUserMessageItem")] internal partial class InternalRealtimeRequestUserMessageItem { [CodeGenMember("Content")] diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponse.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponse.cs index bb6d9f175..b04fef20b 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponse.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponse.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeResponse")] +[CodeGenType("RealtimeResponse")] internal partial class InternalRealtimeResponse { [CodeGenMember("Output")] diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseItem.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseItem.cs index 6dd2e9143..48956fe42 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseItem.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseItem.cs @@ -4,7 +4,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeConversationResponseItem")] +[CodeGenType("RealtimeConversationResponseItem")] internal partial class InternalRealtimeConversationResponseItem { public string ResponseId diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseMessageItem.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseMessageItem.cs index 25dc0c539..bdbf5c3e2 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseMessageItem.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseMessageItem.cs @@ -4,7 +4,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeResponseMessageItem")] +[CodeGenType("RealtimeResponseMessageItem")] internal partial class InternalRealtimeResponseMessageItem { // CUSTOM: Use the available strong type for roles. diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseSession.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseSession.cs index 4450188ef..47ed82615 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseSession.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseSession.cs @@ -7,7 +7,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeResponseSession")] +[CodeGenType("RealtimeResponseSession")] internal partial class InternalRealtimeResponseSession { [CodeGenMember("MaxResponseOutputTokens")] diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioDelta.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioDelta.cs index 734e4388a..55a39446d 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioDelta.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioDelta.cs @@ -14,6 +14,6 @@ namespace OpenAI.RealtimeConversation; /// an audio content part. This and other related delta events append audio data into the associated content part. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseAudioDelta")] +[CodeGenType("RealtimeServerEventResponseAudioDelta")] internal partial class InternalRealtimeServerEventResponseAudioDelta { } diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs index f55388fac..161de4e31 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs @@ -11,6 +11,6 @@ namespace OpenAI.RealtimeConversation; /// an output audio content part of a conversation item. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseAudioTranscriptDelta")] +[CodeGenType("RealtimeServerEventResponseAudioTranscriptDelta")] internal partial class InternalRealtimeServerEventResponseAudioTranscriptDelta { } diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartAdded.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartAdded.cs index c576fc459..863014fe3 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartAdded.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartAdded.cs @@ -12,7 +12,7 @@ namespace OpenAI.RealtimeConversation; /// command (response.content_part.done). /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseContentPartAdded")] +[CodeGenType("RealtimeServerEventResponseContentPartAdded")] internal partial class InternalRealtimeServerEventResponseContentPartAdded { [CodeGenMember("Part")] diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartDone.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartDone.cs index 167698f34..a453a2096 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartDone.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartDone.cs @@ -12,7 +12,7 @@ namespace OpenAI.RealtimeConversation; /// ). /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseContentPartDone")] +[CodeGenType("RealtimeServerEventResponseContentPartDone")] internal partial class InternalRealtimeServerEventResponseContentPartDone { [CodeGenMember("Part")] diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs index 712967a6d..ae2ca0b70 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs @@ -21,6 +21,6 @@ namespace OpenAI.RealtimeConversation; /// use of a compatible, incremental parser. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseFunctionCallArgumentsDelta")] +[CodeGenType("RealtimeServerEventResponseFunctionCallArgumentsDelta")] internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDelta { } diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs index cbddbf1d4..886b38a3c 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs @@ -13,6 +13,6 @@ namespace OpenAI.RealtimeConversation; /// function call arguments and is typically interpreted as a JSON document with parameterization matching the /// associated function definition. /// -[CodeGenModel("RealtimeServerEventResponseFunctionCallArgumentsDone")] +[CodeGenType("RealtimeServerEventResponseFunctionCallArgumentsDone")] internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDone { } diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseTextDelta.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseTextDelta.cs index e28a8629f..81f4225b9 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseTextDelta.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseTextDelta.cs @@ -14,6 +14,6 @@ namespace OpenAI.RealtimeConversation; /// a text content part. This and other related delta events append text data into the associated content part. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseTextDelta")] +[CodeGenType("RealtimeServerEventResponseTextDelta")] internal partial class InternalRealtimeServerEventResponseTextDelta { } diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerVadTurnDetection.Serialization.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerVadTurnDetection.Serialization.cs index 98aeaa1b1..f80db65eb 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerVadTurnDetection.Serialization.cs +++ b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerVadTurnDetection.Serialization.cs @@ -7,7 +7,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerVadTurnDetection")] +[CodeGenType("RealtimeServerVadTurnDetection")] [CodeGenSerialization(nameof(PrefixPaddingMs), DeserializationValueHook = nameof(DeserializeMillisecondDuration), SerializationValueHook = nameof(SerializePrefixPaddingMs))] [CodeGenSerialization(nameof(SilenceDurationMs), DeserializationValueHook = nameof(DeserializeMillisecondDuration), SerializationValueHook = nameof(SerializeSilenceDurationMs))] internal partial class InternalRealtimeServerVadTurnDetection diff --git a/src/Custom/RealtimeConversation/RealtimeConversationClient.cs b/src/Custom/RealtimeConversation/RealtimeConversationClient.cs index 09a97f55f..bace07dea 100644 --- a/src/Custom/RealtimeConversation/RealtimeConversationClient.cs +++ b/src/Custom/RealtimeConversation/RealtimeConversationClient.cs @@ -8,7 +8,7 @@ namespace OpenAI.RealtimeConversation; -[CodeGenClient("Realtime")] +[CodeGenType("Realtime")] [CodeGenSuppress("StartRealtimeSessionAsync", typeof(IEnumerable), typeof(CancellationToken))] [CodeGenSuppress("StartRealtimeSessionAsync", typeof(BinaryContent), typeof(RequestOptions))] [CodeGenSuppress("StartRealtimeSession", typeof(IEnumerable), typeof(CancellationToken))] diff --git a/src/Custom/RealtimeConversation/ResponseConversationSelection.cs b/src/Custom/RealtimeConversation/ResponseConversationSelection.cs index b2f77da72..1f0c306bc 100644 --- a/src/Custom/RealtimeConversation/ResponseConversationSelection.cs +++ b/src/Custom/RealtimeConversation/ResponseConversationSelection.cs @@ -8,7 +8,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeResponseCreateParamsConversation")] +[CodeGenType("RealtimeResponseCreateParamsConversation")] public readonly partial struct ResponseConversationSelection { } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationErrorUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationErrorUpdate.cs index 4ee9b0383..f080866c4 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationErrorUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationErrorUpdate.cs @@ -11,7 +11,7 @@ namespace OpenAI.RealtimeConversation; /// processing a request command or generating another response command. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventError")] +[CodeGenType("RealtimeServerEventError")] public partial class ConversationErrorUpdate { [CodeGenMember("Error")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioClearedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioClearedUpdate.cs index df2aee87b..c653fd500 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioClearedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioClearedUpdate.cs @@ -13,6 +13,6 @@ namespace OpenAI.RealtimeConversation; /// purging the user audio input buffer. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventInputAudioBufferCleared")] +[CodeGenType("RealtimeServerEventInputAudioBufferCleared")] public partial class ConversationInputAudioClearedUpdate { } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioCommittedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioCommittedUpdate.cs index bb9478f06..45f951b6b 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioCommittedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioCommittedUpdate.cs @@ -13,6 +13,6 @@ namespace OpenAI.RealtimeConversation; /// completed submission of the user audio input buffer. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventInputAudioBufferCommitted")] +[CodeGenType("RealtimeServerEventInputAudioBufferCommitted")] public partial class ConversationInputAudioCommittedUpdate { } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechFinishedUpdate.cs index ca2c65105..008fafef5 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechFinishedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechFinishedUpdate.cs @@ -13,7 +13,7 @@ namespace OpenAI.RealtimeConversation; /// when the end of speech is detected. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventInputAudioBufferSpeechStopped")] +[CodeGenType("RealtimeServerEventInputAudioBufferSpeechStopped")] public partial class ConversationInputSpeechFinishedUpdate { [CodeGenMember("AudioEndMs")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechStartedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechStartedUpdate.cs index d08e69217..20f90ee44 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechStartedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechStartedUpdate.cs @@ -14,7 +14,7 @@ namespace OpenAI.RealtimeConversation; /// speech is detected. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventInputAudioBufferSpeechStarted")] +[CodeGenType("RealtimeServerEventInputAudioBufferSpeechStarted")] public partial class ConversationInputSpeechStartedUpdate { [CodeGenMember("AudioStartMs")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFailedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFailedUpdate.cs index 583341c43..bd18e4113 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFailedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFailedUpdate.cs @@ -13,7 +13,7 @@ namespace OpenAI.RealtimeConversation; /// settings. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventConversationItemInputAudioTranscriptionFailed")] +[CodeGenType("RealtimeServerEventConversationItemInputAudioTranscriptionFailed")] public partial class ConversationInputTranscriptionFailedUpdate { [CodeGenMember("Error")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFinishedUpdate.cs index 00a13bacb..f3024b4b3 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFinishedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFinishedUpdate.cs @@ -12,6 +12,6 @@ namespace OpenAI.RealtimeConversation; /// audio input buffer. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventConversationItemInputAudioTranscriptionCompleted")] +[CodeGenType("RealtimeServerEventConversationItemInputAudioTranscriptionCompleted")] public partial class ConversationInputTranscriptionFinishedUpdate { } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemCreatedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemCreatedUpdate.cs index ca5600641..cb355ba23 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemCreatedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemCreatedUpdate.cs @@ -13,7 +13,7 @@ namespace OpenAI.RealtimeConversation; /// (response.output_item.done). /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventConversationItemCreated")] +[CodeGenType("RealtimeServerEventConversationItemCreated")] public partial class ConversationItemCreatedUpdate { [CodeGenMember("Item")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemDeletedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemDeletedUpdate.cs index 62a406b5e..4d403e61e 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemDeletedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemDeletedUpdate.cs @@ -12,6 +12,6 @@ namespace OpenAI.RealtimeConversation; /// (). /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventConversationItemDeleted")] +[CodeGenType("RealtimeServerEventConversationItemDeleted")] public partial class ConversationItemDeletedUpdate { } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioFinishedUpdate.cs index dbfcf96cf..815b84b98 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioFinishedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioFinishedUpdate.cs @@ -15,6 +15,6 @@ namespace OpenAI.RealtimeConversation; /// has completed and the associated content part will soon be completed. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseAudioDone")] +[CodeGenType("RealtimeServerEventResponseAudioDone")] public partial class ConversationItemStreamingAudioFinishedUpdate { } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs index 1a889ca15..97c8a6669 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs @@ -12,6 +12,6 @@ namespace OpenAI.RealtimeConversation; /// received. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseAudioTranscriptDone")] +[CodeGenType("RealtimeServerEventResponseAudioTranscriptDone")] public partial class ConversationItemStreamingAudioTranscriptionFinishedUpdate { } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingFinishedUpdate.cs index 4f68f7d95..1112b4c86 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingFinishedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingFinishedUpdate.cs @@ -11,7 +11,7 @@ namespace OpenAI.RealtimeConversation; /// ). /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseOutputItemDone")] +[CodeGenType("RealtimeServerEventResponseOutputItemDone")] public partial class ConversationItemStreamingFinishedUpdate { [CodeGenMember("Item")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingStartedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingStartedUpdate.cs index a5ce8974e..573336a01 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingStartedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingStartedUpdate.cs @@ -10,7 +10,7 @@ namespace OpenAI.RealtimeConversation; /// commands and paired with an ending response.output_item.done update. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseOutputItemAdded")] +[CodeGenType("RealtimeServerEventResponseOutputItemAdded")] public partial class ConversationItemStreamingStartedUpdate { [CodeGenMember("Item")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingTextFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingTextFinishedUpdate.cs index 83de35b2f..4d0cf4fef 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingTextFinishedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingTextFinishedUpdate.cs @@ -15,6 +15,6 @@ namespace OpenAI.RealtimeConversation; /// has completed and the associated content part will soon be completed. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseTextDone")] +[CodeGenType("RealtimeServerEventResponseTextDone")] public partial class ConversationItemStreamingTextFinishedUpdate { } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemTruncatedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemTruncatedUpdate.cs index 942771cf2..34308ded0 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemTruncatedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemTruncatedUpdate.cs @@ -12,6 +12,6 @@ namespace OpenAI.RealtimeConversation; /// (). /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventConversationItemTruncated")] +[CodeGenType("RealtimeServerEventConversationItemTruncated")] public partial class ConversationItemTruncatedUpdate { } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationRateLimitsUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationRateLimitsUpdate.cs index 01119164f..8feadc090 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationRateLimitsUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationRateLimitsUpdate.cs @@ -10,7 +10,7 @@ namespace OpenAI.RealtimeConversation; /// the most recent information about configured rate limits. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventRateLimitsUpdated")] +[CodeGenType("RealtimeServerEventRateLimitsUpdated")] public partial class ConversationRateLimitsUpdate { public ConversationRateLimitDetailsItem TokenDetails diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseFinishedUpdate.cs index df314a7aa..3bcab28c5 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseFinishedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseFinishedUpdate.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation; /// completed and no further content part or item information will be transmitted. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseDone")] +[CodeGenType("RealtimeServerEventResponseDone")] public partial class ConversationResponseFinishedUpdate { [CodeGenMember("Response")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseStartedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseStartedUpdate.cs index 43ba27e8c..65d868a65 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseStartedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseStartedUpdate.cs @@ -11,7 +11,7 @@ namespace OpenAI.RealtimeConversation; /// (). /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventResponseCreated")] +[CodeGenType("RealtimeServerEventResponseCreated")] public partial class ConversationResponseStartedUpdate { [CodeGenMember("Response")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionConfiguredUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionConfiguredUpdate.cs index 4de52d8c3..89d909ecd 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionConfiguredUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionConfiguredUpdate.cs @@ -12,7 +12,7 @@ namespace OpenAI.RealtimeConversation; /// until the next response; shared session configuration, such as input audio format, will apply immediately. /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventSessionUpdated")] +[CodeGenType("RealtimeServerEventSessionUpdated")] public partial class ConversationSessionConfiguredUpdate { [CodeGenMember("Session")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionStartedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionStartedUpdate.cs index 317cac277..7ca5c9b82 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionStartedUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionStartedUpdate.cs @@ -12,7 +12,7 @@ namespace OpenAI.RealtimeConversation; /// (). /// [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventSessionCreated")] +[CodeGenType("RealtimeServerEventSessionCreated")] public partial class ConversationSessionStartedUpdate { [CodeGenMember("Session")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdate.cs index dd47e04b6..c5477af09 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdate.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdate.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEvent")] +[CodeGenType("RealtimeServerEvent")] public partial class ConversationUpdate { [CodeGenMember("Kind")] diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdateKind.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdateKind.cs index d8da3878d..df404d3de 100644 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdateKind.cs +++ b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdateKind.cs @@ -5,7 +5,7 @@ namespace OpenAI.RealtimeConversation; [Experimental("OPENAI002")] -[CodeGenModel("RealtimeServerEventType")] +[CodeGenType("RealtimeServerEventType")] public enum ConversationUpdateKind { /// diff --git a/src/Custom/Responses/Internal/GeneratorStubs.cs b/src/Custom/Responses/Internal/GeneratorStubs.cs new file mode 100644 index 000000000..bdfc4b11e --- /dev/null +++ b/src/Custom/Responses/Internal/GeneratorStubs.cs @@ -0,0 +1,45 @@ +namespace OpenAI.Responses; + +[CodeGenType("CreateResponsesRequestModel")] internal readonly partial struct InternalCreateResponsesRequestModel { } +[CodeGenType("ResponsesComputerCallClickAction")] internal partial class InternalResponsesComputerCallClickAction { } +[CodeGenType("ResponsesComputerCallDoubleClickAction")] internal partial class InternalResponsesComputerCallDoubleClickAction { } +[CodeGenType("ResponsesComputerCallDragAction")] internal partial class InternalResponsesComputerCallDragAction { } +[CodeGenType("ResponsesComputerCallKeyPressAction")] internal partial class InternalResponsesComputerCallKeyPressAction { } +[CodeGenType("ResponsesComputerCallMoveAction")] internal partial class InternalResponsesComputerCallMoveAction { } +[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("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("ResponsesResponseObject")] internal readonly partial struct InternalCreateResponsesResponseObject { } +[CodeGenType("ResponsesToolType")] internal readonly partial struct InternalResponsesToolType { } +[CodeGenType("ResponsesWebSearchTool")] internal partial class InternalResponsesWebSearchTool { } +[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("ResponsesTextFormatType")] internal readonly partial struct InternalResponsesTextFormatType { } +[CodeGenType("ResponsesToolChoiceOption")] internal readonly partial struct InternalResponsesToolChoiceOption { } +[CodeGenType("ResponsesToolChoiceObjectType")] internal readonly partial struct InternalResponsesToolChoiceObjectType { } +[CodeGenType("ResponsesTextFormatText")] internal partial class InternalResponsesTextFormatText { } +[CodeGenType("ResponsesTextFormatJsonObject")] internal partial class InternalResponsesTextFormatJsonObject { } +[CodeGenType("ResponsesTextFormatJsonSchema")] internal partial class InternalResponsesTextFormatJsonSchema { } +[CodeGenType("ResponsesToolChoiceObject")] internal partial class InternalResponsesToolChoiceObject { } +[CodeGenType("ResponsesToolChoiceObjectFileSearch")] internal partial class InternalResponsesToolChoiceObjectFileSearch { } +[CodeGenType("ResponsesToolChoiceObjectWebSearch")] internal partial class InternalResponsesToolChoiceObjectWebSearch { } +[CodeGenType("ResponsesToolChoiceObjectFunction")] internal partial class InternalResponsesToolChoiceObjectFunction { } +[CodeGenType("ResponsesToolChoiceObjectComputer")] internal partial class InternalResponsesToolChoiceObjectComputer { } +[CodeGenType("ResponsesComputerCallOutputItemOutputType")] internal readonly partial struct InternalResponsesComputerCallOutputItemOutputType { } +[CodeGenType("ResponsesComputerCallDragActionPath")] internal partial class InternalResponsesComputerCallDragActionPath { } +[CodeGenType("ResponsesComputerCallOutputItemScreenshot")] internal partial class InternalResponsesComputerCallOutputItemScreenshot { } +[CodeGenType("DeleteResponseResponseObject")] internal readonly partial struct InternalDeleteResponseResponseObject { } +[CodeGenType("ResponsesWebSearchApproximateLocation")] internal partial class InternalResponsesWebSearchApproximateLocation { } +[CodeGenType("ResponsesReasoningItemSummaryElement")] internal partial class InternalResponsesReasoningItemSummaryElement { } +[CodeGenType("ResponsesReasoningItemSummaryType")] internal readonly partial struct InternalResponsesReasoningItemSummaryType { } +[CodeGenType("ResponsesReasoningItemSummaryElementSummaryText")] internal partial class InternalResponsesReasoningItemSummaryElementSummaryText { } diff --git a/src/Custom/Responses/Internal/InternalCreateResponsesRequestIncludable.cs b/src/Custom/Responses/Internal/InternalCreateResponsesRequestIncludable.cs new file mode 100644 index 000000000..35d06d68f --- /dev/null +++ b/src/Custom/Responses/Internal/InternalCreateResponsesRequestIncludable.cs @@ -0,0 +1,14 @@ +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/InternalResponsesComputerCallOutputItem.cs b/src/Custom/Responses/Internal/InternalResponsesComputerCallOutputItem.cs new file mode 100644 index 000000000..67fc241b9 --- /dev/null +++ b/src/Custom/Responses/Internal/InternalResponsesComputerCallOutputItem.cs @@ -0,0 +1,26 @@ +//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 new file mode 100644 index 000000000..bc3bcc5aa --- /dev/null +++ b/src/Custom/Responses/Internal/InternalResponsesInputFileContentPart.cs @@ -0,0 +1,13 @@ +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 new file mode 100644 index 000000000..fde30099b --- /dev/null +++ b/src/Custom/Responses/Internal/InternalResponsesInputImageContentPart.cs @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..89565e241 --- /dev/null +++ b/src/Custom/Responses/Internal/InternalResponsesInputTextContentPart.cs @@ -0,0 +1,9 @@ +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 new file mode 100644 index 000000000..74a2c213c --- /dev/null +++ b/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationFileCitation.cs @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..f55ea0d3b --- /dev/null +++ b/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationFilePath.cs @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..3842bbb1b --- /dev/null +++ b/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationUrlCitation.cs @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..ddaf0506d --- /dev/null +++ b/src/Custom/Responses/Internal/InternalResponsesOutputRefusalContentPart.cs @@ -0,0 +1,8 @@ +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 new file mode 100644 index 000000000..bdd5d3f49 --- /dev/null +++ b/src/Custom/Responses/Internal/InternalResponsesOutputTextContentPart.cs @@ -0,0 +1,9 @@ +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/InternalUnknownResponseTextFormat.cs b/src/Custom/Responses/Internal/InternalUnknownResponseTextFormat.cs new file mode 100644 index 000000000..4434cf9ea --- /dev/null +++ b/src/Custom/Responses/Internal/InternalUnknownResponseTextFormat.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("UnknownResponsesTextFormat")] +internal partial class InternalUnknownResponsesTextFormat +{ +} diff --git a/src/Custom/Responses/Items/ComputerCallAction.cs b/src/Custom/Responses/Items/ComputerCallAction.cs new file mode 100644 index 000000000..2ea96b08b --- /dev/null +++ b/src/Custom/Responses/Items/ComputerCallAction.cs @@ -0,0 +1,134 @@ +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; + +namespace OpenAI.Responses; + +[CodeGenType("ResponsesComputerCallItemAction")] +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), + _ => null + }; + public ComputerCallActionMouseButton? ClickMouseButton => (this as InternalResponsesComputerCallClickAction)?.Button; + + // CUSTOM: Exposed double-click action properties. + public Point? DoubleClickCoordinates => this switch + { + InternalResponsesComputerCallDoubleClickAction 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(); + + // CUSTOM: Exposed key press action properties. + public IList KeyPressKeyCodes => (this as InternalResponsesComputerCallKeyPressAction)?.Keys; + + // CUSTOM: Exposed move action properties. + public Point? MoveCoordinates => this switch + { + InternalResponsesComputerCallMoveAction 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), + _ => null + }; + public int? ScrollHorizontalOffset => (this as InternalResponsesComputerCallScrollAction)?.ScrollX; + public int? ScrollVerticalOffset => (this as InternalResponsesComputerCallScrollAction)?.ScrollY; + + // CUSTOM: Exposed type action properties. + public string TypeText => (this as InternalResponsesComputerCallTypeAction)?.Text; + + public static ComputerCallAction CreateClickAction(Point clickCoordinates, ComputerCallActionMouseButton clickMouseButton) + { + return new InternalResponsesComputerCallClickAction( + kind: ComputerCallActionKind.Click, + additionalBinaryDataProperties: null, + button: clickMouseButton, + x: clickCoordinates.X, + y: clickCoordinates.Y); + } + + public static ComputerCallAction CreateDoubleClickAction(Point doubleClickCoordinates, ComputerCallActionMouseButton doubleClickMouseButton) + { + return new InternalResponsesComputerCallDoubleClickAction( + kind: ComputerCallActionKind.DoubleClick, + additionalBinaryDataProperties: null, + x: doubleClickCoordinates.X, + y: doubleClickCoordinates.Y); + } + + public static ComputerCallAction CreateDragAction(IList dragPath) + { + return new InternalResponsesComputerCallDragAction( + kind: ComputerCallActionKind.Drag, + additionalBinaryDataProperties: null, + path: dragPath.Select(item => new InternalResponsesComputerCallDragActionPath(item.X, item.Y)).ToList()); + } + + public static ComputerCallAction CreateKeyPressAction(IList keyCodes) + { + return new InternalResponsesComputerCallKeyPressAction( + kind: ComputerCallActionKind.KeyPress, + additionalBinaryDataProperties: null, + keys: keyCodes); + } + + public static ComputerCallAction CreateMoveAction(Point moveCoordinates) + { + return new InternalResponsesComputerCallMoveAction( + kind: ComputerCallActionKind.Move, + additionalBinaryDataProperties: null, + x: moveCoordinates.X, + y: moveCoordinates.Y); + } + + public static ComputerCallAction CreateScreenshotAction() + { + return new InternalResponsesComputerCallScreenshotAction( + kind: ComputerCallActionKind.Screenshot, + additionalBinaryDataProperties: null); + } + + public static ComputerCallAction CreateScrollAction(Point scrollCoordinates, int horizontalOffset, int verticalOffset) + { + return new InternalResponsesComputerCallScrollAction( + kind: ComputerCallActionKind.Scroll, + additionalBinaryDataProperties: null, + x: scrollCoordinates.X, + y: scrollCoordinates.Y, + scrollX: horizontalOffset, + scrollY: verticalOffset); + } + + public static ComputerCallAction CreateTypeAction(string typeText) + { + return new InternalResponsesComputerCallTypeAction( + kind: ComputerCallActionKind.Type, + additionalBinaryDataProperties: null, + text: typeText); + } + + public static ComputerCallAction CreateWaitAction() + { + return new InternalResponsesComputerCallWaitAction( + kind: ComputerCallActionKind.Wait, + additionalBinaryDataProperties: null); + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/ComputerCallActionKind.cs b/src/Custom/Responses/Items/ComputerCallActionKind.cs new file mode 100644 index 000000000..256b057c9 --- /dev/null +++ b/src/Custom/Responses/Items/ComputerCallActionKind.cs @@ -0,0 +1,24 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesComputerCallActionType")] +public enum ComputerCallActionKind +{ + Click, + + DoubleClick, + + Drag, + + [CodeGenMember("Keypress")] + KeyPress, + + Move, + + Screenshot, + + Scroll, + + Type, + + Wait +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/ComputerCallActionMouseButton.cs b/src/Custom/Responses/Items/ComputerCallActionMouseButton.cs new file mode 100644 index 000000000..f0f62e2e9 --- /dev/null +++ b/src/Custom/Responses/Items/ComputerCallActionMouseButton.cs @@ -0,0 +1,11 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesComputerCallClickButtonType")] +public enum ComputerCallActionMouseButton +{ + Left, + Right, + Wheel, + Back, + Forward +} diff --git a/src/Custom/Responses/Items/ComputerCallOutputResponseItem.cs b/src/Custom/Responses/Items/ComputerCallOutputResponseItem.cs new file mode 100644 index 000000000..7bca786ca --- /dev/null +++ b/src/Custom/Responses/Items/ComputerCallOutputResponseItem.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesComputerCallOutputItem")] +public partial class ComputerCallOutputResponseItem +{ +} diff --git a/src/Custom/Responses/Items/ComputerCallOutputStatus.cs b/src/Custom/Responses/Items/ComputerCallOutputStatus.cs new file mode 100644 index 000000000..2ddf8715b --- /dev/null +++ b/src/Custom/Responses/Items/ComputerCallOutputStatus.cs @@ -0,0 +1,10 @@ +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesComputerCallOutputItemStatus")] +public enum ComputerCallOutputStatus +{ + InProgress, + Completed, + Incomplete +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/ComputerCallResponseItem.cs b/src/Custom/Responses/Items/ComputerCallResponseItem.cs new file mode 100644 index 000000000..bb60b2109 --- /dev/null +++ b/src/Custom/Responses/Items/ComputerCallResponseItem.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Renamed. +// - Suppressed constructor in favor of custom constructor with required `id` parameter. +[CodeGenType("ResponsesComputerCallItem")] +[CodeGenSuppress(nameof(ComputerCallResponseItem), typeof(string), typeof(ComputerCallAction), typeof(IEnumerable))] +public partial class ComputerCallResponseItem +{ + public ComputerCallResponseItem(string id, string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks) : base(InternalResponsesItemType.ComputerCall, id) + { + Argument.AssertNotNull(id, nameof(id)); + Argument.AssertNotNull(callId, nameof(callId)); + Argument.AssertNotNull(action, nameof(action)); + Argument.AssertNotNull(pendingSafetyChecks, nameof(pendingSafetyChecks)); + + CallId = callId; + Action = action; + PendingSafetyChecks = pendingSafetyChecks.ToList(); + } +} diff --git a/src/Custom/Responses/Items/ComputerCallSafetyCheck.cs b/src/Custom/Responses/Items/ComputerCallSafetyCheck.cs new file mode 100644 index 000000000..69bc886d3 --- /dev/null +++ b/src/Custom/Responses/Items/ComputerCallSafetyCheck.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesComputerCallItemSafetyCheck")] +public partial class ComputerCallSafetyCheck +{ +} diff --git a/src/Custom/Responses/Items/ComputerCallStatus.cs b/src/Custom/Responses/Items/ComputerCallStatus.cs new file mode 100644 index 000000000..6271fa5de --- /dev/null +++ b/src/Custom/Responses/Items/ComputerCallStatus.cs @@ -0,0 +1,10 @@ +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesComputerCallItemStatus")] +public enum ComputerCallStatus +{ + InProgress, + Completed, + Incomplete +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/ComputerOutput.cs b/src/Custom/Responses/Items/ComputerOutput.cs new file mode 100644 index 000000000..3d1d43d32 --- /dev/null +++ b/src/Custom/Responses/Items/ComputerOutput.cs @@ -0,0 +1,41 @@ +using System; + +namespace OpenAI.Responses; + +[CodeGenType("ResponsesComputerCallOutputItemOutput")] +public partial class ComputerOutput +{ + public static ComputerOutput CreateScreenshotOutput(Uri screenshotImageUri) + { + Argument.AssertNotNull(screenshotImageUri, nameof(screenshotImageUri)); + + return new InternalResponsesComputerCallOutputItemScreenshot() + { + ImageUrl = screenshotImageUri.AbsoluteUri, + }; + } + + public static ComputerOutput CreateScreenshotOutput(string screenshotImageFileId) + { + Argument.AssertNotNull(screenshotImageFileId, nameof(screenshotImageFileId)); + + return new InternalResponsesComputerCallOutputItemScreenshot() + { + FileId = screenshotImageFileId, + }; + } + + public static ComputerOutput CreateScreenshotOutput(BinaryData screenshotImageBytes, string screenshotImageBytesMediaType) + { + Argument.AssertNotNull(screenshotImageBytes, nameof(screenshotImageBytes)); + Argument.AssertNotNull(screenshotImageBytesMediaType, nameof(screenshotImageBytesMediaType)); + + string base64EncodedData = Convert.ToBase64String(screenshotImageBytes.ToArray()); + string dataUri = $"data:{screenshotImageBytesMediaType};base64,{base64EncodedData}"; + + return new InternalResponsesComputerCallOutputItemScreenshot() + { + ImageUrl = dataUri, + }; + } +} diff --git a/src/Custom/Responses/Items/FileSearchCallResponseItem.cs b/src/Custom/Responses/Items/FileSearchCallResponseItem.cs new file mode 100644 index 000000000..dc2420b69 --- /dev/null +++ b/src/Custom/Responses/Items/FileSearchCallResponseItem.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Renamed. +// - Suppressed constructor in favor of custom constructor with required `id` parameter. +[CodeGenType("ResponsesFileSearchCallItem")] +[CodeGenSuppress(nameof(FileSearchCallResponseItem), typeof(IEnumerable), typeof(IEnumerable))] +public partial class FileSearchCallResponseItem +{ + public FileSearchCallResponseItem(string id, IEnumerable queries, IEnumerable results) : base(InternalResponsesItemType.FileSearchCall, id) + { + Argument.AssertNotNull(id, nameof(id)); + Argument.AssertNotNull(queries, nameof(queries)); + + Queries = queries.ToList(); + Results = results?.ToList(); + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/FileSearchCallResult.cs b/src/Custom/Responses/Items/FileSearchCallResult.cs new file mode 100644 index 000000000..e83191a39 --- /dev/null +++ b/src/Custom/Responses/Items/FileSearchCallResult.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesFileSearchCallItemResult")] +public partial class FileSearchCallResult +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/FileSearchCallStatus.cs b/src/Custom/Responses/Items/FileSearchCallStatus.cs new file mode 100644 index 000000000..3fac9a41d --- /dev/null +++ b/src/Custom/Responses/Items/FileSearchCallStatus.cs @@ -0,0 +1,12 @@ +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesFileSearchCallItemStatus")] +public enum FileSearchCallStatus +{ + InProgress, + Searching, + Completed, + Incomplete, + Failed +} diff --git a/src/Custom/Responses/Items/FunctionCallOutputResponseItem.cs b/src/Custom/Responses/Items/FunctionCallOutputResponseItem.cs new file mode 100644 index 000000000..03aebe9c5 --- /dev/null +++ b/src/Custom/Responses/Items/FunctionCallOutputResponseItem.cs @@ -0,0 +1,9 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesFunctionCallOutput")] +public partial class FunctionCallOutputResponseItem +{ + // CUSTOM: Renamed. + [CodeGenMember("Output")] + public string FunctionOutput { get; set; } +} diff --git a/src/Custom/Responses/Items/FunctionCallOutputStatus.cs b/src/Custom/Responses/Items/FunctionCallOutputStatus.cs new file mode 100644 index 000000000..e1f96d0e9 --- /dev/null +++ b/src/Custom/Responses/Items/FunctionCallOutputStatus.cs @@ -0,0 +1,10 @@ +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesFunctionCallOutputStatus")] +public enum FunctionCallOutputStatus +{ + InProgress, + Completed, + Incomplete +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/FunctionCallResponseItem.cs b/src/Custom/Responses/Items/FunctionCallResponseItem.cs new file mode 100644 index 000000000..e0e7fd662 --- /dev/null +++ b/src/Custom/Responses/Items/FunctionCallResponseItem.cs @@ -0,0 +1,33 @@ +using System; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Renamed. +// - Suppressed constructor in favor of custom constructor with required `id` parameter. +[CodeGenType("ResponsesFunctionCallItem")] +[CodeGenSuppress(nameof(FunctionCallResponseItem), typeof(string), typeof(string), typeof(BinaryData))] +public partial class FunctionCallResponseItem +{ + public FunctionCallResponseItem(string id, string callId, string functionName, BinaryData functionArguments) : base(InternalResponsesItemType.FunctionCall, id) + { + Argument.AssertNotNull(id, nameof(id)); + Argument.AssertNotNull(callId, nameof(callId)); + Argument.AssertNotNull(functionName, nameof(functionName)); + Argument.AssertNotNull(functionArguments, nameof(functionArguments)); + + CallId = callId; + FunctionName = functionName; + FunctionArguments = functionArguments; + } + + // CUSTOM: Renamed. + [CodeGenMember("Name")] + public string FunctionName { get; set; } + + // CUSTOM: + // - Renamed. + // - Changed type from string to BinaryData. + [CodeGenMember("Arguments")] + public BinaryData FunctionArguments { get; set; } +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/FunctionCallStatus.cs b/src/Custom/Responses/Items/FunctionCallStatus.cs new file mode 100644 index 000000000..63e2b5c00 --- /dev/null +++ b/src/Custom/Responses/Items/FunctionCallStatus.cs @@ -0,0 +1,10 @@ +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesFunctionCallItemStatus")] +public enum FunctionCallStatus +{ + InProgress, + Completed, + Incomplete +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs new file mode 100644 index 000000000..a45fe9f88 --- /dev/null +++ b/src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +[CodeGenType("ResponsesAssistantMessage")] +[CodeGenSuppress(nameof(InternalResponsesAssistantMessage), typeof(IEnumerable))] +internal partial class InternalResponsesAssistantMessage +{ + // CUSTOM: Use generalized content type. + [CodeGenMember("Content")] + public IList InternalContent { get; } + + public InternalResponsesAssistantMessage(IEnumerable internalContent) : base(MessageRole.Assistant) + { + Argument.AssertNotNull(internalContent, nameof(internalContent)); + InternalContent = internalContent.ToList(); + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs new file mode 100644 index 000000000..0f54a5b28 --- /dev/null +++ b/src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +[CodeGenType("ResponsesDeveloperMessage")] +[CodeGenSuppress(nameof(InternalResponsesDeveloperMessage), typeof(IEnumerable))] +internal partial class InternalResponsesDeveloperMessage +{ + // CUSTOM: Use generalized content type. + [CodeGenMember("Content")] + public IList InternalContent { get; } + + public InternalResponsesDeveloperMessage(IEnumerable internalContent) : base(MessageRole.Developer) + { + Argument.AssertNotNull(internalContent, nameof(internalContent)); + InternalContent = internalContent.ToList(); + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs new file mode 100644 index 000000000..ae3eba5cb --- /dev/null +++ b/src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +[CodeGenType("ResponsesSystemMessage")] +[CodeGenSuppress(nameof(InternalResponsesSystemMessage), typeof(IEnumerable))] +internal partial class InternalResponsesSystemMessage +{ + // CUSTOM: Use generalized content type. + [CodeGenMember("Content")] + public IList InternalContent { get; } + + public InternalResponsesSystemMessage(IEnumerable internalContent) : base(MessageRole.System) + { + Argument.AssertNotNull(internalContent, nameof(internalContent)); + InternalContent = internalContent.ToList(); + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs new file mode 100644 index 000000000..f3e2a4516 --- /dev/null +++ b/src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +[CodeGenType("ResponsesUserMessage")] +[CodeGenSuppress(nameof(InternalResponsesUserMessage), typeof(IEnumerable))] +internal partial class InternalResponsesUserMessage +{ + // CUSTOM: Use generalized content type. + [CodeGenMember("Content")] + public IList InternalContent { get; } + + public InternalResponsesUserMessage(IEnumerable internalContent) : base(MessageRole.User) + { + Argument.AssertNotNull(internalContent, nameof(internalContent)); + InternalContent = internalContent.ToList(); + } + +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/MessageResponseItem.cs b/src/Custom/Responses/Items/MessageResponseItem.cs new file mode 100644 index 000000000..62c4e9a6b --- /dev/null +++ b/src/Custom/Responses/Items/MessageResponseItem.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +namespace OpenAI.Responses; + +[CodeGenType("ResponsesMessage")] +[CodeGenSuppress("ResponsesMessage", typeof(MessageRole))] +public partial class MessageResponseItem +{ + // CUSTOM: Made public. + [CodeGenMember("Role")] + public MessageRole Role { get; } + + // CUSTOM: Recombined content from derived types. + public IList Content + => (this as InternalResponsesUserMessage)?.InternalContent + ?? (this as InternalResponsesDeveloperMessage)?.InternalContent + ?? (this as InternalResponsesSystemMessage)?.InternalContent + ?? (this as InternalResponsesAssistantMessage)?.InternalContent; +} diff --git a/src/Custom/Responses/Items/MessageRole.cs b/src/Custom/Responses/Items/MessageRole.cs new file mode 100644 index 000000000..d23375db0 --- /dev/null +++ b/src/Custom/Responses/Items/MessageRole.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesMessageRole")] +public readonly partial struct MessageRole +{ +} diff --git a/src/Custom/Responses/Items/MessageStatus.cs b/src/Custom/Responses/Items/MessageStatus.cs new file mode 100644 index 000000000..c5fd9ec87 --- /dev/null +++ b/src/Custom/Responses/Items/MessageStatus.cs @@ -0,0 +1,10 @@ +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesMessageStatus")] +public enum MessageStatus +{ + InProgress, + Completed, + Incomplete +} diff --git a/src/Custom/Responses/Items/ReasoningResponseItem.cs b/src/Custom/Responses/Items/ReasoningResponseItem.cs new file mode 100644 index 000000000..07921b9b4 --- /dev/null +++ b/src/Custom/Responses/Items/ReasoningResponseItem.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Renamed. +// - Suppressed constructor in favor of custom constructor with required `id` parameter. +[CodeGenType("ResponsesReasoningItem")] +[CodeGenSuppress(nameof(ReasoningResponseItem), typeof(IEnumerable))] +public partial class ReasoningResponseItem +{ + public ReasoningResponseItem(string id, IEnumerable summaryTextParts) : base(InternalResponsesItemType.Reasoning, id) + { + Argument.AssertNotNull(id, nameof(id)); + Argument.AssertNotNull(summaryTextParts, nameof(summaryTextParts)); + + Summary ??= []; + foreach (string summaryTextPart in summaryTextParts) + { + Summary.Add(new InternalResponsesReasoningItemSummaryElementSummaryText(summaryTextPart)); + } + } + + // CUSTOM: Made internal for simplified public reprojection + [CodeGenMember("Summary")] + internal IList Summary { get; } + + public IReadOnlyList SummaryTextParts + => Summary? + .Select(summaryElement => summaryElement as InternalResponsesReasoningItemSummaryElementSummaryText)? + .Select(summaryTextElement => summaryTextElement.Text)? + .ToList() + ?? []; +} diff --git a/src/Custom/Responses/Items/ReasoningStatus.cs b/src/Custom/Responses/Items/ReasoningStatus.cs new file mode 100644 index 000000000..93d7f077c --- /dev/null +++ b/src/Custom/Responses/Items/ReasoningStatus.cs @@ -0,0 +1,10 @@ +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesReasoningItemStatus")] +public enum ReasoningStatus +{ + InProgress, + Completed, + Incomplete +} \ No newline at end of file diff --git a/src/Custom/Responses/Items/ReferenceResponseItem.cs b/src/Custom/Responses/Items/ReferenceResponseItem.cs new file mode 100644 index 000000000..fa891500f --- /dev/null +++ b/src/Custom/Responses/Items/ReferenceResponseItem.cs @@ -0,0 +1,13 @@ +namespace OpenAI.Responses; + +// CUSTOM: +// - Renamed. +// - Suppressed constructor in favor of custom constructor with required `id` parameter. +[CodeGenType("ResponsesItemReferenceItem")] +[CodeGenSuppress(nameof(ReferenceResponseItem))] +public partial class ReferenceResponseItem +{ + public ReferenceResponseItem(string id) : base(InternalResponsesItemType.ItemReference, id) + { + } +} diff --git a/src/Custom/Responses/Items/ResponseItem.cs b/src/Custom/Responses/Items/ResponseItem.cs new file mode 100644 index 000000000..bffac68e3 --- /dev/null +++ b/src/Custom/Responses/Items/ResponseItem.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; + +[CodeGenType("ResponsesItem")] +public partial class ResponseItem +{ + // CUSTOM: Added custom constructor to be able to set the ID for those items where it is required. + private protected ResponseItem(InternalResponsesItemType @type, string id) + { + Type = @type; + Id = id; + } + + public static MessageResponseItem CreateUserMessageItem(string content) + { + Argument.AssertNotNull(content, nameof(content)); + + return new InternalResponsesSystemMessage( + type: InternalResponsesItemType.Message, + id: null, + additionalBinaryDataProperties: null, + status: null, + MessageRole.User, + internalContent: [ResponseContentPart.CreateInputTextPart(content)]); + } + + public static MessageResponseItem CreateUserMessageItem(IEnumerable contentParts) + { + Argument.AssertNotNullOrEmpty(contentParts, nameof(contentParts)); + + return new InternalResponsesSystemMessage( + type: InternalResponsesItemType.Message, + id: null, + additionalBinaryDataProperties: null, + status: null, + MessageRole.User, + internalContent: [.. contentParts]); + } + + public static MessageResponseItem CreateDeveloperMessageItem(string content) + { + Argument.AssertNotNull(content, nameof(content)); + + return new InternalResponsesSystemMessage( + type: InternalResponsesItemType.Message, + id: null, + additionalBinaryDataProperties: null, + status: null, + MessageRole.Developer, + internalContent: [ResponseContentPart.CreateInputTextPart(content)]); + } + + public static MessageResponseItem CreateSystemMessageItem(string content) + { + Argument.AssertNotNull(content, nameof(content)); + + return new InternalResponsesSystemMessage( + type: InternalResponsesItemType.Message, + id: null, + additionalBinaryDataProperties: null, + status: null, + MessageRole.System, + internalContent: [ResponseContentPart.CreateInputTextPart(content)]); + } + + public static MessageResponseItem CreateAssistantMessageItem(string id, string content) + { + Argument.AssertNotNull(id, nameof(id)); + Argument.AssertNotNull(content, nameof(content)); + + return new InternalResponsesAssistantMessage( + type: InternalResponsesItemType.Message, + id: id, + additionalBinaryDataProperties: null, + status: null, + MessageRole.Assistant, + internalContent: [ResponseContentPart.CreateInputTextPart(content)]); + } + + public static FileSearchCallResponseItem CreateFileSearchCallResponseItem(string id, IEnumerable queries, IEnumerable results) + { + return new FileSearchCallResponseItem(id, queries, results); + } + + public static ResponseItem CreateComputerCallItem(string id, string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks) + { + return new ComputerCallResponseItem(id, callId, action, pendingSafetyChecks); + } + + [Experimental("OPENAICUA001")] + public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, Uri screenshotImageUri) + { + return new ComputerCallOutputResponseItem( + callId, + acknowledgedSafetyChecks, + ComputerOutput.CreateScreenshotOutput(screenshotImageUri)); + } + + [Experimental("OPENAICUA001")] + public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, string screenshotImageFileId) + { + return new ComputerCallOutputResponseItem( + callId, + acknowledgedSafetyChecks, + ComputerOutput.CreateScreenshotOutput(screenshotImageFileId)); + } + + [Experimental("OPENAICUA001")] + public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, BinaryData screenshotImageBytes, string screenshotImageBytesMediaType) + { + return new ComputerCallOutputResponseItem( + callId, + acknowledgedSafetyChecks, + ComputerOutput.CreateScreenshotOutput(screenshotImageBytes, screenshotImageBytesMediaType)); + } + + public static WebSearchCallResponseItem CreateWebSearchCallItem(string id) + { + return new WebSearchCallResponseItem(id); + } + + public static FunctionCallResponseItem CreateFunctionCall(string id, string callId, string functionName, BinaryData functionArguments) + { + return new FunctionCallResponseItem(id, callId, functionName, functionArguments); + } + + public static FunctionCallOutputResponseItem CreateFunctionCallOutputItem(string callId, string functionOutput) + { + return new FunctionCallOutputResponseItem(callId, functionOutput); + } + + public static ReasoningResponseItem CreateReasoningItem(string id, IEnumerable summaryTextParts) + { + return new ReasoningResponseItem(id, summaryTextParts); + } + + public static ReferenceResponseItem CreateReferenceItem(string id) + { + return new ReferenceResponseItem(id); + } +} diff --git a/src/Custom/Responses/Items/WebSearchCallResponseItem.cs b/src/Custom/Responses/Items/WebSearchCallResponseItem.cs new file mode 100644 index 000000000..f1a53ab76 --- /dev/null +++ b/src/Custom/Responses/Items/WebSearchCallResponseItem.cs @@ -0,0 +1,14 @@ +namespace OpenAI.Responses; + +// CUSTOM: +// - Renamed. +// - Suppressed constructor in favor of custom constructor with required `id` parameter. +[CodeGenType("ResponsesWebSearchCallItem")] +[CodeGenSuppress(nameof(WebSearchCallResponseItem))] +public partial class WebSearchCallResponseItem +{ + public WebSearchCallResponseItem(string id) : base(InternalResponsesItemType.WebSearchCall, id) + { + Argument.AssertNotNull(id, nameof(id)); + } +} diff --git a/src/Custom/Responses/Items/WebSearchCallStatus.cs b/src/Custom/Responses/Items/WebSearchCallStatus.cs new file mode 100644 index 000000000..f1a184eb8 --- /dev/null +++ b/src/Custom/Responses/Items/WebSearchCallStatus.cs @@ -0,0 +1,11 @@ +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesWebSearchCallItemStatus")] +public enum WebSearchCallStatus +{ + InProgress, + Searching, + Completed, + Failed +} \ No newline at end of file diff --git a/src/Custom/Responses/OpenAIResponse.cs b/src/Custom/Responses/OpenAIResponse.cs new file mode 100644 index 000000000..c55ebc240 --- /dev/null +++ b/src/Custom/Responses/OpenAIResponse.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; + +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesResponse")] +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; } + + // CUSTOM: Renamed. + [CodeGenMember("Reasoning")] + public ResponseReasoningOptions ReasoningOptions { get; } + + // CUSTOM: Renamed. + [CodeGenMember("MaxOutputTokens")] + public int? MaxOutputTokenCount { get; } + + // CUSTOM: Renamed. + [CodeGenMember("Text")] + public ResponseTextOptions TextOptions { get; } + + // CUSTOM: Renamed. + [CodeGenMember("Truncation")] + public ResponseTruncationMode? TruncationMode { get; } + + // CUSTOM: Renamed. + [CodeGenMember("IncompleteDetails")] + public ResponseIncompleteStatusDetails IncompleteStatusDetails { get; } + + // CUSTOM: Renamed. + [CodeGenMember("Output")] + public IList OutputItems { get; } + + // CUSTOM: Renamed. + [CodeGenMember("ParallelToolCalls")] + public bool AllowParallelToolCalls { get; } +} diff --git a/src/Custom/Responses/OpenAIResponseClient.Protocol.cs b/src/Custom/Responses/OpenAIResponseClient.Protocol.cs new file mode 100644 index 000000000..28b310d94 --- /dev/null +++ b/src/Custom/Responses/OpenAIResponseClient.Protocol.cs @@ -0,0 +1,110 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +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))] +public partial class OpenAIResponseClient +{ + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task CreateResponseAsync(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + string acceptHeaderValue = options?.BufferResponse == false + ? AcceptHeaderValue.TextEventStream.ToString() + : AcceptHeaderValue.ApplicationJson.ToString(); + + using PipelineMessage message = CreateCreateResponseRequest(content, acceptHeaderValue, options); + PipelineResponse protocolResponse = await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); + return ClientResult.FromResponse(protocolResponse); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CreateResponse(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + string acceptHeaderValue = options?.BufferResponse == false + ? AcceptHeaderValue.TextEventStream.ToString() + : AcceptHeaderValue.ApplicationJson.ToString(); + + using PipelineMessage message = CreateCreateResponseRequest(content, acceptHeaderValue, options); + PipelineResponse protocolResponse = Pipeline.ProcessMessage(message, options); + return ClientResult.FromResponse(protocolResponse); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task GetResponseAsync(string responseId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + + using PipelineMessage message = CreateGetResponseRequest(responseId, [], 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) + { + Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + + using PipelineMessage message = CreateGetResponseRequest(responseId, [], options); + PipelineResponse protocolResponse = Pipeline.ProcessMessage(message, options); + return ClientResult.FromResponse(protocolResponse); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual AsyncCollectionResult GetResponseInputItemsAsync( + string responseId, + int? limit, + string order, + string after, + string before, + RequestOptions options = null) + { + Argument.AssertNotNull(responseId, nameof(responseId)); + + return new AsyncResponseItemCollectionResult(this, responseId, limit, order, after, before, options); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual CollectionResult GetResponseInputItems( + string responseId, + int? limit, + string order, + string after, + string before, + RequestOptions options = null) + { + Argument.AssertNotNull(responseId, nameof(responseId)); + + return new ResponseItemCollectionResult(this, responseId, limit, order, after, before, options); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task DeleteResponseAsync(string responseId, RequestOptions options) + { + Argument.AssertNotNull(responseId, nameof(responseId)); + + using PipelineMessage message = CreateDeleteResponseRequest(responseId, options); + PipelineResponse protocolResponse = await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); + return ClientResult.FromResponse(protocolResponse); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult DeleteResponse(string responseId, RequestOptions options) + { + Argument.AssertNotNull(responseId, nameof(responseId)); + + using PipelineMessage message = CreateDeleteResponseRequest(responseId, options); + PipelineResponse protocolResponse = Pipeline.ProcessMessage(message, options); + return ClientResult.FromResponse(protocolResponse); + } +} \ No newline at end of file diff --git a/src/Custom/Responses/OpenAIResponseClient.cs b/src/Custom/Responses/OpenAIResponseClient.cs new file mode 100644 index 000000000..809d749d8 --- /dev/null +++ b/src/Custom/Responses/OpenAIResponseClient.cs @@ -0,0 +1,251 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace OpenAI.Responses; + +[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))] +public partial class OpenAIResponseClient +{ + private readonly string _model; + + // CUSTOM: Added as a convenience. + /// Initializes a new instance of . + /// The name of the model to use in requests sent to the service. To learn more about the available models, see . + /// The API key to authenticate with the service. + /// or is null. + /// is an empty string, and was expected to be non-empty. + public OpenAIResponseClient(string model, string apiKey) : this(model, new ApiKeyCredential(apiKey), new OpenAIClientOptions()) + { + } + + // CUSTOM: + // - Added `model` parameter. + // - Used a custom pipeline. + // - Demoted the endpoint parameter to be a property in the options class. + /// Initializes a new instance of . + /// The name of the model to use in requests sent to the service. To learn more about the available models, see . + /// The API key to authenticate with the service. + /// or is null. + /// is an empty string, and was expected to be non-empty. + public OpenAIResponseClient(string model, ApiKeyCredential credential) : this(model, credential, new OpenAIClientOptions()) + { + } + + // CUSTOM: + // - Added `model` parameter. + // - Used a custom pipeline. + // - Demoted the endpoint parameter to be a property in the options class. + /// Initializes a new instance of . + /// The name of the model to use in requests sent to the service. To learn more about the available models, see . + /// The API key to authenticate with the service. + /// The options to configure the client. + /// or is null. + /// 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(); + + _model = model; + Pipeline = OpenAIClient.CreatePipeline(credential, options); + _endpoint = OpenAIClient.GetEndpoint(options); + } + + // CUSTOM: + // - Added `model` parameter. + // - 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 name of the model to use in requests sent to the service. To learn more about the available models, see . + /// The options to configure the client. + /// or is null. + /// is an empty string, and was expected to be non-empty. + protected internal OpenAIResponseClient(ClientPipeline pipeline, string model, OpenAIClientOptions options) + { + Argument.AssertNotNull(pipeline, nameof(pipeline)); + Argument.AssertNotNullOrEmpty(model, nameof(model)); + options ??= new OpenAIClientOptions(); + + _model = model; + Pipeline = pipeline; + _endpoint = OpenAIClient.GetEndpoint(options); + } + + public virtual async Task> CreateResponseAsync(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(inputItems, nameof(inputItems)); + + using BinaryContent content = CreatePerCallOptions(options, inputItems, stream: false); + ClientResult protocolResult = await CreateResponseAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + OpenAIResponse convenienceValue = (OpenAIResponse)protocolResult; + return ClientResult.FromValue(convenienceValue, protocolResult.GetRawResponse()); + } + + public virtual ClientResult CreateResponse(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(inputItems, nameof(inputItems)); + + using BinaryContent content = CreatePerCallOptions(options, inputItems, stream: false); + ClientResult protocolResult = CreateResponse(content, cancellationToken.ToRequestOptions()); + OpenAIResponse convenienceValue = (OpenAIResponse)protocolResult; + return ClientResult.FromValue(convenienceValue, protocolResult.GetRawResponse()); + } + + public virtual async Task> CreateResponseAsync(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(userInputText, nameof(userInputText)); + + return await CreateResponseAsync( + [ResponseItem.CreateUserMessageItem(userInputText)], + options, + cancellationToken) + .ConfigureAwait(false); + } + + public virtual ClientResult CreateResponse(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(userInputText, nameof(userInputText)); + + return CreateResponse( + [ResponseItem.CreateUserMessageItem(userInputText)], + options, + cancellationToken); + } + + public virtual AsyncCollectionResult CreateResponseStreamingAsync(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(inputItems, nameof(inputItems)); + + using BinaryContent content = CreatePerCallOptions(options, inputItems, stream: true); + return new AsyncSseUpdateCollection( + async () => await CreateResponseAsync(content, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), + StreamingResponseUpdate.DeserializeUpdateWithWrappers, + cancellationToken); + } + + public virtual CollectionResult CreateResponseStreaming(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(inputItems, nameof(inputItems)); + + using BinaryContent content = CreatePerCallOptions(options, inputItems, stream: true); + return new SseUpdateCollection( + () => CreateResponse(content, cancellationToken.ToRequestOptions(streaming: true)), + StreamingResponseUpdate.DeserializeUpdateWithWrappers, + cancellationToken); + } + + public virtual AsyncCollectionResult CreateResponseStreamingAsync(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(userInputText, nameof(userInputText)); + + return CreateResponseStreamingAsync( + [ResponseItem.CreateUserMessageItem(userInputText)], + options, + cancellationToken); + } + + public virtual CollectionResult CreateResponseStreaming(string userInputText, ResponseCreationOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(userInputText, nameof(userInputText)); + + return CreateResponseStreaming( + [ResponseItem.CreateUserMessageItem(userInputText)], + options, + cancellationToken); + } + + public virtual async Task> GetResponseAsync(string responseId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + + ClientResult protocolResult = await GetResponseAsync(responseId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + OpenAIResponse convenienceResult = (OpenAIResponse)protocolResult; + return ClientResult.FromValue(convenienceResult, protocolResult.GetRawResponse()); + } + + public virtual ClientResult GetResponse(string responseId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + + ClientResult protocolResult = GetResponse(responseId, cancellationToken.ToRequestOptions()); + OpenAIResponse convenienceResult = (OpenAIResponse)protocolResult; + return ClientResult.FromValue(convenienceResult, protocolResult.GetRawResponse()); + } + + public virtual AsyncCollectionResult GetResponseInputItemsAsync(string responseId, ResponseItemCollectionOptions options = default, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + + AsyncCollectionResult result = GetResponseInputItemsAsync(responseId, options?.PageSizeLimit, options?.Order?.ToString(), options?.AfterId, options?.BeforeId, cancellationToken.ToRequestOptions()); + + if (result is not AsyncCollectionResult responsesItemCollection) + { + throw new InvalidOperationException("Failed to cast protocol return type to expected collection type 'AsyncCollectionResult'."); + } + + return responsesItemCollection; + } + + public virtual CollectionResult GetResponseInputItems(string responseId, ResponseItemCollectionOptions options = default, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + + CollectionResult result = GetResponseInputItems(responseId, options?.PageSizeLimit, options?.Order?.ToString(), options?.AfterId, options?.BeforeId, cancellationToken.ToRequestOptions()); + + if (result is not CollectionResult responsesItemCollection) + { + throw new InvalidOperationException("Failed to cast protocol return type to expected collection type 'CollectionResult'."); + } + + return responsesItemCollection; + } + + public virtual async Task> DeleteResponseAsync(string responseId, CancellationToken cancellationToken = default) + { + 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()); + } + + public virtual ClientResult DeleteResponse(string responseId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + + ClientResult result = DeleteResponse(responseId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue((ResponseDeletionResult)result, result.GetRawResponse()); + } + + internal virtual ResponseCreationOptions CreatePerCallOptions(ResponseCreationOptions userOptions, IEnumerable inputItems, bool stream = false) + { + ResponseCreationOptions copiedOptions = userOptions is null + ? new() + : userOptions.GetClone(); + copiedOptions.Input = inputItems.ToList(); + copiedOptions.Model = _model; + // Note: as of 2025-03-03, some models *require* that "truncation": "auto" is explicitly provided; unless + // otherwise specified, ensure that value is set here. + copiedOptions.TruncationMode ??= ResponseTruncationMode.Auto; + 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/AsyncResponseItemCollectionResult.cs new file mode 100644 index 000000000..6784f6c94 --- /dev/null +++ b/src/Custom/Responses/Pagination/AsyncResponseItemCollectionResult.cs @@ -0,0 +1,89 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.Responses; + +internal class AsyncResponseItemCollectionResult : AsyncCollectionResult +{ + private readonly OpenAIResponseClient _parentClient; + private readonly RequestOptions? _options; + + // Initial values + private readonly string _responseId; + private readonly int? _limit; + private readonly string? _order; + private readonly string? _after; + private readonly string? _before; + + public AsyncResponseItemCollectionResult( + OpenAIResponseClient parentClient, + string responseId, + int? limit, string? order, string? after, string? before, + RequestOptions? options) + { + _parentClient = parentClient; + _responseId = responseId; + _limit = limit; + _order = order; + _after = after; + _before = before; + _options = options; + } + + public async override IAsyncEnumerable GetRawPagesAsync() + { + ClientResult page = await GetFirstPageAsync().ConfigureAwait(false); + yield return page; + + while (HasNextPage(page)) + { + page = await GetNextPageAsync(page); + yield return page; + } + } + + protected override IAsyncEnumerable GetValuesFromPageAsync(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + PipelineResponse response = page.GetRawResponse(); + InternalResponsesInputItemList list = ModelReaderWriter.Read(response.Content)!; + return list.Data.ToAsyncEnumerable(_options?.CancellationToken ?? default); + } + + public override ContinuationToken? GetContinuationToken(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + return ResponseItemCollectionPageToken.FromResponse(page, _limit, _order, _before); + } + + public async Task GetFirstPageAsync() + => await GetResponsesAsync(_responseId, _limit, _order, _after, _before, _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); + string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!; + + return await GetResponsesAsync(_responseId, _limit, _order, lastId, _before, _options).ConfigureAwait(false); + } + + public static bool HasNextPage(ClientResult result) => ResponseItemCollectionResult.HasNextPage(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); + return ClientResult.FromResponse(await _parentClient.Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } +} diff --git a/src/Custom/Responses/Pagination/ResponseItemCollectionOptions.cs b/src/Custom/Responses/Pagination/ResponseItemCollectionOptions.cs new file mode 100644 index 000000000..c05e82d1a --- /dev/null +++ b/src/Custom/Responses/Pagination/ResponseItemCollectionOptions.cs @@ -0,0 +1,34 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; + +/// The options to configure how objects are retrieved and paginated. +[Experimental("OPENAI001")] +public class ResponseItemCollectionOptions +{ + /// Initializes a new instance of . + public ResponseItemCollectionOptions() { } + + /// + /// A limit on the number of objects to be returned per page. + /// + public int? PageSizeLimit { get; set; } + + /// + /// The order in which to retrieve objects when sorted by their + /// timestamp. + /// + public ResponseItemCollectionOrder? Order { get; set; } + + /// + /// The used to retrieve the page of objects that come + /// after this one. + /// + public string AfterId { get; set; } + + /// + /// The used to retrieve the page of objects that come + /// before this one. + /// + public string BeforeId { get; set; } +} diff --git a/src/Custom/Responses/Pagination/ResponseItemCollectionOrder.cs b/src/Custom/Responses/Pagination/ResponseItemCollectionOrder.cs new file mode 100644 index 000000000..98894f6f5 --- /dev/null +++ b/src/Custom/Responses/Pagination/ResponseItemCollectionOrder.cs @@ -0,0 +1,37 @@ +using System; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; + +[Experimental("OPENAI001")] +public readonly partial struct ResponseItemCollectionOrder: IEquatable +{ + public static ResponseItemCollectionOrder Ascending { get; } = new("asc"); + + public static ResponseItemCollectionOrder Descending { get; } = new("desc"); + + private readonly string _value; + + public ResponseItemCollectionOrder(string value) + { + Argument.AssertNotNull(value, nameof(value)); + _value = value; + } + + public static bool operator ==(ResponseItemCollectionOrder left, ResponseItemCollectionOrder right) => left.Equals(right); + + public static bool operator !=(ResponseItemCollectionOrder left, ResponseItemCollectionOrder right) => !left.Equals(right); + + public static implicit operator ResponseItemCollectionOrder(string value) => new(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is ResponseItemCollectionOrder other && Equals(other); + + public bool Equals(ResponseItemCollectionOrder 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/Custom/Responses/Pagination/ResponseItemCollectionPageToken.cs b/src/Custom/Responses/Pagination/ResponseItemCollectionPageToken.cs new file mode 100644 index 000000000..73d63f65c --- /dev/null +++ b/src/Custom/Responses/Pagination/ResponseItemCollectionPageToken.cs @@ -0,0 +1,148 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics; +using System.IO; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.Responses; + +internal class ResponseItemCollectionPageToken : ContinuationToken +{ + protected ResponseItemCollectionPageToken(int? limit, string? order, string? after, string? before) + { + Limit = limit; + Order = order; + After = after; + Before = before; + } + + public int? Limit { get; } + + public string? Order { get; } + + public string? After { get; } + + public string? Before { get; } + + public override BinaryData ToBytes() + { + using MemoryStream stream = new(); + using Utf8JsonWriter writer = new(stream); + + writer.WriteStartObject(); + + if (Limit.HasValue) + { + writer.WriteNumber("limit", Limit.Value); + } + + if (Order is not null) + { + writer.WriteString("order", Order); + } + + if (After is not null) + { + writer.WriteString("after", After); + } + + if (Before is not null) + { + writer.WriteString("before", Before); + } + + writer.WriteEndObject(); + + writer.Flush(); + stream.Position = 0; + + return BinaryData.FromStream(stream); + } + + public static ResponseItemCollectionPageToken FromToken(ContinuationToken token) + { + if (token is ResponseItemCollectionPageToken pageToken) + { + return pageToken; + } + + BinaryData data = token.ToBytes(); + + if (data.ToMemory().Length == 0) + { + throw new ArgumentException("Failed to create ResponsesItemCollectionPageToken from provided pageToken.", nameof(pageToken)); + } + + Utf8JsonReader reader = new(data); + + int? limit = null; + string? order = null; + string? after = null; + string? before = 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 "order": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + order = reader.GetString(); + break; + case "after": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + after = reader.GetString(); + break; + case "before": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + before = reader.GetString(); + break; + default: + throw new JsonException($"Unrecognized property '{propertyName}'."); + } + } + + return new(limit, order, after, before); + } + + public static ResponseItemCollectionPageToken FromOptions(int? limit, string? order, string? after, string? before) + => new ResponseItemCollectionPageToken(limit, order, after, before); + + public static ResponseItemCollectionPageToken? FromResponse(ClientResult result, int? limit, string? order, string? before) + { + 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, order, lastId, before); + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Pagination/ResponseItemCollectionResult.cs b/src/Custom/Responses/Pagination/ResponseItemCollectionResult.cs new file mode 100644 index 000000000..06b004b4a --- /dev/null +++ b/src/Custom/Responses/Pagination/ResponseItemCollectionResult.cs @@ -0,0 +1,97 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.Responses; + +internal class ResponseItemCollectionResult : CollectionResult +{ + private readonly OpenAIResponseClient _parentClient; + private readonly RequestOptions? _options; + + // Initial values + private readonly string _responseId; + private readonly int? _limit; + private readonly string? _order; + private readonly string? _after; + private readonly string? _before; + + public ResponseItemCollectionResult( + OpenAIResponseClient parentClient, + string responseId, + int? limit, string? order, string? after, string? before, + RequestOptions? options) + { + _parentClient = parentClient; + _responseId = responseId; + _limit = limit; + _order = order; + _after = after; + _before = before; + _options = options; + } + + public override IEnumerable GetRawPages() + { + ClientResult page = GetFirstPage(); + yield return page; + + while (HasNextPage(page)) + { + page = GetNextPage(page); + yield return page; + } + } + + protected override IEnumerable GetValuesFromPage(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + PipelineResponse response = page.GetRawResponse(); + InternalResponsesInputItemList list = ModelReaderWriter.Read(response.Content)!; + return list.Data; + } + + public override ContinuationToken? GetContinuationToken(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + return ResponseItemCollectionPageToken.FromResponse(page, _limit, _order, _before); + } + + public ClientResult GetFirstPage() + => GetResponseInputItems(_responseId, _limit, _order, _after, _before, _options); + + public ClientResult GetNextPage(ClientResult result) + { + Argument.AssertNotNull(result, nameof(result)); + + PipelineResponse response = result.GetRawResponse(); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!; + + return GetResponseInputItems(_responseId, _limit, _order, lastId, _before, _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; + } + + 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); + return ClientResult.FromResponse(_parentClient.Pipeline.ProcessMessage(message, options)); + } +} diff --git a/src/Custom/Responses/ResponseContentPart.cs b/src/Custom/Responses/ResponseContentPart.cs new file mode 100644 index 000000000..6d9a8358f --- /dev/null +++ b/src/Custom/Responses/ResponseContentPart.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses; + +[CodeGenType("ResponsesContent")] +public partial class ResponseContentPart +{ + [CodeGenMember("Type")] + public ResponseContentPartKind Kind { get; } + + // CUSTOM: Exposed input text properties. + public string Text + => (this as InternalResponsesInputTextContentPart)?.InternalText + ?? (this as InternalResponsesOutputTextContentPart)?.InternalText; + + // CUSTOM: Exposed input image properties. + public string InputImageFileId => (this as InternalResponsesInputImageContentPart)?.FileId; + public ResponseImageDetailLevel? InputImageDetailLevel => (this as InternalResponsesInputImageContentPart)?.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; + + // CUSTOM: Exposed output text properties. + public IReadOnlyList OutputTextAnnotations => (this as InternalResponsesOutputTextContentPart)?.Annotations?.ToList()?.AsReadOnly(); + + // CUSTOM: Exposed refusal properties. + public string Refusal => (this as InternalResponsesOutputRefusalContentPart)?.InternalRefusal; + + public static ResponseContentPart CreateInputTextPart(string text) + { + return new InternalResponsesInputTextContentPart(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() + { + ImageUrl = dataUri, + Detail = imageDetailLevel, + }; + } + + public static ResponseContentPart CreateInputImagePart(string imageFileId, ResponseImageDetailLevel? imageDetailLevel = null) + { + return new InternalResponsesInputImageContentPart() + { + FileId = imageFileId, + Detail = imageDetailLevel, + }; + } + + public static ResponseContentPart CreateInputImagePart(Uri imageUri, ResponseImageDetailLevel? imageDetailLevel = default) + { + return new InternalResponsesInputImageContentPart() + { + ImageUrl = imageUri?.AbsoluteUri, + Detail = imageDetailLevel, + }; + } + + public static ResponseContentPart CreateInputFilePart(string fileId, string filename, BinaryData fileBytes) + { + return new InternalResponsesInputFileContentPart() + { + FileId = fileId, + Filename = filename, + FileBytes = fileBytes, + }; + } + + public static ResponseContentPart CreateOutputTextPart(string text, IEnumerable annotations) + { + return new InternalResponsesOutputTextContentPart(annotations, text); + } + + public static ResponseContentPart CreateRefusalPart(string refusal) + { + return new InternalResponsesOutputRefusalContentPart(refusal); + } +} diff --git a/src/Custom/Responses/ResponseContentPartKind.cs b/src/Custom/Responses/ResponseContentPartKind.cs new file mode 100644 index 000000000..1135bf00e --- /dev/null +++ b/src/Custom/Responses/ResponseContentPartKind.cs @@ -0,0 +1,11 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesContentType")] +public enum ResponseContentPartKind +{ + InputText, + InputImage, + InputFile, + OutputText, + Refusal, +} \ No newline at end of file diff --git a/src/Custom/Responses/ResponseCreationOptions.cs b/src/Custom/Responses/ResponseCreationOptions.cs new file mode 100644 index 000000000..872a71abf --- /dev/null +++ b/src/Custom/Responses/ResponseCreationOptions.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Renamed. +// - Suppressed constructor in favor of custom default constructor. +[CodeGenType("CreateResponsesRequest")] +[CodeGenSuppress(nameof(ResponseCreationOptions), typeof(InternalCreateResponsesRequestModel), typeof(IEnumerable))] +public partial class ResponseCreationOptions +{ + // CUSTOM: Temporarily made internal. + [CodeGenMember("Include")] + 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; } + + // CUSTOM: + // - Made internal. This value comes from a parameter on the client method. + // - Added setter. + [CodeGenMember("Input")] + internal IList Input { get; set; } = new ChangeTrackingList(); + + // 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; } + + // CUSTOM: Renamed. + [CodeGenMember("Reasoning")] + public ResponseReasoningOptions ReasoningOptions { get; set; } + + // CUSTOM: Renamed. + [CodeGenMember("MaxOutputTokens")] + public int? MaxOutputTokenCount { get; set; } + + // CUSTOM: Renamed. + [CodeGenMember("Text")] + public ResponseTextOptions TextOptions { get; set; } + + // CUSTOM: Renamed. + [CodeGenMember("Truncation")] + public ResponseTruncationMode? TruncationMode { get; set; } + + // CUSTOM: Renamed. + [CodeGenMember("ParallelToolCalls")] + public bool? AllowParallelToolCalls { get; set; } + + // CUSTOM: Renamed. + [CodeGenMember("Store")] + public bool? StoredOutputEnabled { get; set; } + + internal ResponseCreationOptions GetClone() + { + ResponseCreationOptions copiedOptions = (ResponseCreationOptions)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/Responses/ResponseDeletionResult.cs b/src/Custom/Responses/ResponseDeletionResult.cs new file mode 100644 index 000000000..9f337f1cc --- /dev/null +++ b/src/Custom/Responses/ResponseDeletionResult.cs @@ -0,0 +1,10 @@ +namespace OpenAI.Responses; + +[CodeGenType("DeleteResponseResponse")] +public partial class ResponseDeletionResult +{ + // CUSTOM: Made internal. + [CodeGenMember("Object")] + internal InternalDeleteResponseResponseObject Object { get; } = "response.deleted"; + +} \ No newline at end of file diff --git a/src/Custom/Responses/ResponseError.cs b/src/Custom/Responses/ResponseError.cs new file mode 100644 index 000000000..c8eb8cf0e --- /dev/null +++ b/src/Custom/Responses/ResponseError.cs @@ -0,0 +1,7 @@ +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesError")] +public partial class ResponseError +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/ResponseImageDetailLevel.cs b/src/Custom/Responses/ResponseImageDetailLevel.cs new file mode 100644 index 000000000..79dcfc12a --- /dev/null +++ b/src/Custom/Responses/ResponseImageDetailLevel.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesInputContentImageDetail")] +public readonly partial struct ResponseImageDetailLevel +{ +} diff --git a/src/Custom/Responses/ResponseIncompleteStatusDetails.cs b/src/Custom/Responses/ResponseIncompleteStatusDetails.cs new file mode 100644 index 000000000..53bd4573c --- /dev/null +++ b/src/Custom/Responses/ResponseIncompleteStatusDetails.cs @@ -0,0 +1,7 @@ +namespace OpenAI.Responses; + +// CUSTOM: Renamed. +[CodeGenType("ResponsesResponseIncompleteDetails1")] +public partial class ResponseIncompleteStatusDetails +{ +} diff --git a/src/Custom/Responses/ResponseIncompleteStatusReason.cs b/src/Custom/Responses/ResponseIncompleteStatusReason.cs new file mode 100644 index 000000000..9c027ea1b --- /dev/null +++ b/src/Custom/Responses/ResponseIncompleteStatusReason.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesResponseIncompleteDetailsReason")] +public readonly partial struct ResponseIncompleteStatusReason +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/ResponseMessageAnnotation.cs b/src/Custom/Responses/ResponseMessageAnnotation.cs new file mode 100644 index 000000000..c4c0ef7cc --- /dev/null +++ b/src/Custom/Responses/ResponseMessageAnnotation.cs @@ -0,0 +1,26 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesOutputTextAnnotation")] +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; + + // 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; + + // CUSTOM: Exposed file path properties. + public string FilePathFileId => (this as InternalResponsesMessageAnnotationFilePath)?.FileId; + public int? FilePathIndex => (this as InternalResponsesMessageAnnotationFilePath)?.Index; +} diff --git a/src/Custom/Responses/ResponseMessageAnnotationKind.cs b/src/Custom/Responses/ResponseMessageAnnotationKind.cs new file mode 100644 index 000000000..4927e1e2c --- /dev/null +++ b/src/Custom/Responses/ResponseMessageAnnotationKind.cs @@ -0,0 +1,12 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponseOutputTextAnnotationType")] +public enum ResponseMessageAnnotationKind +{ + FileCitation, + + [CodeGenMember("UrlCitation")] + UriCitation, + + FilePath +} \ No newline at end of file diff --git a/src/Custom/Responses/ResponseOutputTokenUsageDetails.cs b/src/Custom/Responses/ResponseOutputTokenUsageDetails.cs new file mode 100644 index 000000000..0cff8dfc7 --- /dev/null +++ b/src/Custom/Responses/ResponseOutputTokenUsageDetails.cs @@ -0,0 +1,10 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesResponseUsageOutputTokensDetails")] +public partial class ResponseOutputTokenUsageDetails +{ + // CUSTOM: Renamed. + [CodeGenMember("ReasoningTokens")] + public int ReasoningTokenCount { get; } + +} \ No newline at end of file diff --git a/src/Custom/Responses/ResponseReasoningEffortLevel.cs b/src/Custom/Responses/ResponseReasoningEffortLevel.cs new file mode 100644 index 000000000..9f6d8c828 --- /dev/null +++ b/src/Custom/Responses/ResponseReasoningEffortLevel.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesReasoningConfigurationEffort")] +public readonly partial struct ResponseReasoningEffortLevel +{ +} diff --git a/src/Custom/Responses/ResponseReasoningOptions.cs b/src/Custom/Responses/ResponseReasoningOptions.cs new file mode 100644 index 000000000..d9fdc4d7b --- /dev/null +++ b/src/Custom/Responses/ResponseReasoningOptions.cs @@ -0,0 +1,18 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesReasoningConfiguration")] +public partial class ResponseReasoningOptions +{ + // CUSTOM: Renamed. + [CodeGenMember("Effort")] + public ResponseReasoningEffortLevel? ReasoningEffortLevel { get; set; } + + // CUSTOM: Renamed. + [CodeGenMember("GenerateSummary")] + 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 new file mode 100644 index 000000000..e1a44703a --- /dev/null +++ b/src/Custom/Responses/ResponseReasoningSummaryVerbosity.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesReasoningConfigurationGenerateSummary")] +public readonly partial struct ResponseReasoningSummaryVerbosity +{ +} diff --git a/src/Custom/Responses/ResponseStatus.cs b/src/Custom/Responses/ResponseStatus.cs new file mode 100644 index 000000000..da3906a59 --- /dev/null +++ b/src/Custom/Responses/ResponseStatus.cs @@ -0,0 +1,10 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesResponseStatus")] +public enum ResponseStatus +{ + InProgress, + Completed, + Incomplete, + Failed +} diff --git a/src/Custom/Responses/ResponseTextFormat.cs b/src/Custom/Responses/ResponseTextFormat.cs new file mode 100644 index 000000000..1796428c4 --- /dev/null +++ b/src/Custom/Responses/ResponseTextFormat.cs @@ -0,0 +1,25 @@ +using System; + +namespace OpenAI.Responses; + +[CodeGenType("ResponsesTextFormat")] +public partial class ResponseTextFormat +{ + public static ResponseTextFormat CreateTextFormat() => new InternalResponsesTextFormatText(); + + public static ResponseTextFormat CreateJsonObjectFormat() => new InternalResponsesTextFormatJsonObject(); + + public static ResponseTextFormat CreateJsonSchemaFormat(string jsonSchemaFormatName, BinaryData jsonSchema, string jsonSchemaFormatDescription = null, bool? jsonSchemaIsStrict = null) + { + Argument.AssertNotNullOrEmpty(jsonSchemaFormatName, nameof(jsonSchemaFormatName)); + Argument.AssertNotNull(jsonSchema, nameof(jsonSchema)); + + return new InternalResponsesTextFormatJsonSchema( + InternalResponsesTextFormatType.JsonSchema, + additionalBinaryDataProperties: null, + jsonSchemaFormatName, + jsonSchema, + jsonSchemaFormatDescription, + jsonSchemaIsStrict); + } +} \ No newline at end of file diff --git a/src/Custom/Responses/ResponseTextOptions.cs b/src/Custom/Responses/ResponseTextOptions.cs new file mode 100644 index 000000000..9c203d3d8 --- /dev/null +++ b/src/Custom/Responses/ResponseTextOptions.cs @@ -0,0 +1,9 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponseTextOptions")] +public partial class ResponseTextOptions +{ + // CUSTOM: Renamed. + [CodeGenMember("Format")] + public ResponseTextFormat ResponseFormat { get; set; } +} \ No newline at end of file diff --git a/src/Custom/Responses/ResponseTokenUsage.cs b/src/Custom/Responses/ResponseTokenUsage.cs new file mode 100644 index 000000000..e66de7771 --- /dev/null +++ b/src/Custom/Responses/ResponseTokenUsage.cs @@ -0,0 +1,21 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesResponseUsage")] +public partial class ResponseTokenUsage +{ + // 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("OutputTokensDetails")] + public ResponseOutputTokenUsageDetails OutputTokenDetails { get; } +} diff --git a/src/Custom/Responses/ResponseTruncationMode.cs b/src/Custom/Responses/ResponseTruncationMode.cs new file mode 100644 index 000000000..69d06fd6e --- /dev/null +++ b/src/Custom/Responses/ResponseTruncationMode.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponseTruncation")] +public readonly partial struct ResponseTruncationMode +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/Internal/GeneratorStubs.cs b/src/Custom/Responses/Streaming/Internal/GeneratorStubs.cs new file mode 100644 index 000000000..c60ff1430 --- /dev/null +++ b/src/Custom/Responses/Streaming/Internal/GeneratorStubs.cs @@ -0,0 +1,22 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesResponseStreamEventResponseFileSearchCallInProgress")] internal partial class InternalResponsesResponseStreamEventResponseFileSearchCallInProgress { } +[CodeGenType("ResponsesResponseStreamEventResponseFileSearchCallSearching")] internal partial class InternalResponsesResponseStreamEventResponseFileSearchCallSearching { } +[CodeGenType("ResponsesResponseStreamEventResponseFileSearchCallCompleted")] internal partial class InternalResponsesResponseStreamEventResponseFileSearchCallCompleted { } +[CodeGenType("ResponsesResponseStreamEventResponseFunctionCallArgumentsDelta")] internal partial class InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta { } +[CodeGenType("ResponsesResponseStreamEventResponseFunctionCallArgumentsDone")] internal partial class InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone { } +[CodeGenType("ResponsesResponseStreamEventResponseOutputItemAdded")] internal partial class InternalResponsesResponseStreamEventResponseOutputItemAdded { } +[CodeGenType("ResponsesResponseStreamEventResponseOutputItemDone")] internal partial class InternalResponsesResponseStreamEventResponseOutputItemDone { } +[CodeGenType("ResponsesResponseStreamEventResponseOutputTextDelta")] internal partial class InternalResponsesResponseStreamEventResponseOutputTextDelta { } +[CodeGenType("ResponsesResponseStreamEventResponseOutputTextDone")] internal partial class InternalResponsesResponseStreamEventResponseOutputTextDone { } +[CodeGenType("ResponsesResponseStreamEventResponseRefusalDelta")] internal partial class InternalResponsesResponseStreamEventResponseRefusalDelta { } +[CodeGenType("ResponsesResponseStreamEventResponseRefusalDone")] internal partial class InternalResponsesResponseStreamEventResponseRefusalDone { } +[CodeGenType("UnknownResponsesResponseStreamEvent")] internal partial class UnknownResponsesResponseStreamEvent { } +[CodeGenType("ResponsesResponseStreamEventResponseFailed")] internal partial class InternalResponsesResponseStreamEventResponseFailed { } +[CodeGenType("ResponsesResponseStreamEventResponseIncomplete")] internal partial class InternalResponsesResponseStreamEventResponseIncomplete { } +[CodeGenType("ResponsesResponseStreamEventResponseCompleted")] internal partial class InternalResponsesResponseStreamEventResponseCompleted { } +[CodeGenType("ResponsesResponseStreamEventResponseCreated")] internal partial class InternalResponsesResponseStreamEventResponseCreated { } +[CodeGenType("ResponsesResponseStreamEventResponseInProgress")] internal partial class InternalResponsesResponseStreamEventResponseInProgress { } +[CodeGenType("ResponsesResponseStreamEventResponseWebSearchCallCompleted")] internal partial class InternalResponsesResponseStreamEventResponseWebSearchCallCompleted { } +[CodeGenType("ResponsesResponseStreamEventResponseWebSearchCallInProgress")] internal partial class InternalResponsesResponseStreamEventResponseWebSearchCallInProgress { } +[CodeGenType("ResponsesResponseStreamEventResponseWebSearchCallSearching")] internal partial class InternalResponsesResponseStreamEventResponseWebSearchCallSearching { } diff --git a/src/Custom/Responses/Streaming/Internal/InternalResponsesResponseStreamEventResponseContentPartAdded.cs b/src/Custom/Responses/Streaming/Internal/InternalResponsesResponseStreamEventResponseContentPartAdded.cs new file mode 100644 index 000000000..0430e01b3 --- /dev/null +++ b/src/Custom/Responses/Streaming/Internal/InternalResponsesResponseStreamEventResponseContentPartAdded.cs @@ -0,0 +1,9 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesResponseStreamEventResponseContentPartAdded")] +internal partial class InternalResponsesResponseStreamEventResponseContentPartAdded +{ + // CUSTOM: Apply generalized content type. + [CodeGenMember("Part")] + public ResponseContentPart Part { get; } +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/Internal/InternalResponsesResponseStreamEventResponseContentPartDone.cs b/src/Custom/Responses/Streaming/Internal/InternalResponsesResponseStreamEventResponseContentPartDone.cs new file mode 100644 index 000000000..93acfccfd --- /dev/null +++ b/src/Custom/Responses/Streaming/Internal/InternalResponsesResponseStreamEventResponseContentPartDone.cs @@ -0,0 +1,9 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesResponseStreamEventResponseContentPartDone")] +internal partial class InternalResponsesResponseStreamEventResponseContentPartDone +{ + // CUSTOM: Apply generalized content type. + [CodeGenMember("Part")] + public ResponseContentPart Part { get; } +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseContentPartDeltaUpdate.Serialization.cs b/src/Custom/Responses/Streaming/StreamingResponseContentPartDeltaUpdate.Serialization.cs new file mode 100644 index 000000000..7e24067f7 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseContentPartDeltaUpdate.Serialization.cs @@ -0,0 +1,36 @@ +using System; +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace OpenAI.Responses; + +public partial class StreamingResponseContentPartDeltaUpdate : IJsonModel +{ + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, SerializeStreamingResponseContentPartDeltaUpdate, writer, options); + + StreamingResponseContentPartDeltaUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeResponsesItemStreamingPartDeltaUpdate, ref reader, options); + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + StreamingResponseContentPartDeltaUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeResponsesItemStreamingPartDeltaUpdate, data, options); + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + internal static void SerializeStreamingResponseContentPartDeltaUpdate( + StreamingResponseContentPartDeltaUpdate instance, + Utf8JsonWriter writer, + ModelReaderWriterOptions options) + => writer.WriteFirstObject( + options, + instance._contentPartAdded, + instance._outputTextDelta, + instance._functionArgumentsDelta, + instance._refusalDelta); + + internal static StreamingResponseContentPartDeltaUpdate DeserializeResponsesItemStreamingPartDeltaUpdate(JsonElement element, ModelReaderWriterOptions options = null) + => DeserializeUpdateWithWrappers(element, options) as StreamingResponseContentPartDeltaUpdate; +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseContentPartDeltaUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseContentPartDeltaUpdate.cs new file mode 100644 index 000000000..0676d1451 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseContentPartDeltaUpdate.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; + +/// +/// +/// +/// This type is a shared representation of the following response event types: +/// +/// response.content_part.added +/// response.output_text.delta +/// response.function_call_arguments.delta +/// +/// +public partial class StreamingResponseContentPartDeltaUpdate : StreamingResponseUpdate +{ + public string ItemId + => _contentPartAdded?.ItemId + ?? _outputTextDelta?.ItemId + ?? _functionArgumentsDelta?.ItemId; + + public int ItemIndex + => _contentPartAdded?.OutputIndex + ?? _outputTextDelta?.OutputIndex + ?? _functionArgumentsDelta?.OutputIndex + ?? 0; + + public int ContentPartIndex + => _contentPartAdded?.ContentIndex + ?? _outputTextDelta?.ContentIndex + ?? 0; + + public string Text + => _outputTextDelta?.Delta + ?? _contentPartAdded?.Part?.Text; + + public string FunctionArguments + => _functionArgumentsDelta?.Delta; + + public string Refusal + => _refusalDelta?.Delta; + + private readonly InternalResponsesResponseStreamEventResponseContentPartAdded _contentPartAdded; + private readonly InternalResponsesResponseStreamEventResponseOutputTextDelta _outputTextDelta; + private readonly InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta _functionArgumentsDelta; + private readonly InternalResponsesResponseStreamEventResponseRefusalDelta _refusalDelta; + + internal StreamingResponseContentPartDeltaUpdate(StreamingResponseUpdate baseUpdate) + : base(baseUpdate.Kind) + { + _contentPartAdded = baseUpdate as InternalResponsesResponseStreamEventResponseContentPartAdded; + _outputTextDelta = baseUpdate as InternalResponsesResponseStreamEventResponseOutputTextDelta; + _functionArgumentsDelta = baseUpdate as InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta; + _refusalDelta = baseUpdate as InternalResponsesResponseStreamEventResponseRefusalDelta; + } + + internal StreamingResponseContentPartDeltaUpdate() + { + } +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseErrorUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseErrorUpdate.cs new file mode 100644 index 000000000..59e05d04c --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseErrorUpdate.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesResponseStreamEventError")] +public partial class StreamingResponseErrorUpdate +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallUpdate.Serialization.cs b/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallUpdate.Serialization.cs new file mode 100644 index 000000000..eacf9ce70 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallUpdate.Serialization.cs @@ -0,0 +1,35 @@ +using System; +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace OpenAI.Responses; + +public partial class StreamingResponseFileSearchCallUpdate : IJsonModel +{ + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, SerializeStreamingResponseFileSearchCallUpdate, writer, options); + + StreamingResponseFileSearchCallUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeResponsesItemStreamingPartDeltaUpdate, ref reader, options); + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + StreamingResponseFileSearchCallUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeResponsesItemStreamingPartDeltaUpdate, data, options); + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + internal static void SerializeStreamingResponseFileSearchCallUpdate( + StreamingResponseFileSearchCallUpdate instance, + Utf8JsonWriter writer, + ModelReaderWriterOptions options) + => writer.WriteFirstObject( + options, + instance._fileSearchCallCompleted, + instance._fileSearchCallInProgress, + instance._fileSearchCallSearching); + + internal static StreamingResponseFileSearchCallUpdate DeserializeResponsesItemStreamingPartDeltaUpdate(JsonElement element, ModelReaderWriterOptions options = null) + => DeserializeUpdateWithWrappers(element, options) as StreamingResponseFileSearchCallUpdate; +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallUpdate.cs new file mode 100644 index 000000000..df6a46271 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallUpdate.cs @@ -0,0 +1,30 @@ +namespace OpenAI.Responses; + +public partial class StreamingResponseFileSearchCallUpdate : StreamingResponseUpdate +{ + public string OutputItemId + => _fileSearchCallCompleted?.ItemId + ?? _fileSearchCallInProgress?.ItemId + ?? _fileSearchCallSearching?.ItemId; + + public int OutputItemIndex + => _fileSearchCallCompleted?.OutputIndex + ?? _fileSearchCallInProgress?.OutputIndex + ?? _fileSearchCallSearching?.OutputIndex + ?? 0; + + private readonly InternalResponsesResponseStreamEventResponseFileSearchCallCompleted _fileSearchCallCompleted; + private readonly InternalResponsesResponseStreamEventResponseFileSearchCallInProgress _fileSearchCallInProgress; + private readonly InternalResponsesResponseStreamEventResponseFileSearchCallSearching _fileSearchCallSearching; + + internal StreamingResponseFileSearchCallUpdate(StreamingResponseUpdate baseUpdate) + : base(baseUpdate.Kind) + { + _fileSearchCallCompleted = baseUpdate as InternalResponsesResponseStreamEventResponseFileSearchCallCompleted; + _fileSearchCallInProgress = baseUpdate as InternalResponsesResponseStreamEventResponseFileSearchCallInProgress; + _fileSearchCallSearching = baseUpdate as InternalResponsesResponseStreamEventResponseFileSearchCallSearching; + } + + internal StreamingResponseFileSearchCallUpdate() + { } +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseItemUpdate.Serialization.cs b/src/Custom/Responses/Streaming/StreamingResponseItemUpdate.Serialization.cs new file mode 100644 index 000000000..42a2d0c26 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseItemUpdate.Serialization.cs @@ -0,0 +1,36 @@ +using System; +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace OpenAI.Responses; + +public partial class StreamingResponseItemUpdate : IJsonModel +{ + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, SerializeStreamingResponseItemUpdate, writer, options); + + StreamingResponseItemUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeStreamingResponseItemUpdate, ref reader, options); + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + StreamingResponseItemUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeStreamingResponseItemUpdate, data, options); + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + internal static void SerializeStreamingResponseItemUpdate( + StreamingResponseItemUpdate instance, + Utf8JsonWriter writer, + ModelReaderWriterOptions options) + => writer.WriteFirstObject( + options, + instance._outputItemAdded, + instance._outputItemDone); + + internal static StreamingResponseItemUpdate DeserializeStreamingResponseItemUpdate( + JsonElement element, + ModelReaderWriterOptions options) + => DeserializeUpdateWithWrappers(element, options) as StreamingResponseItemUpdate; +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseItemUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseItemUpdate.cs new file mode 100644 index 000000000..7310272c0 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseItemUpdate.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses; + +public partial class StreamingResponseItemUpdate : StreamingResponseUpdate +{ + public ResponseItem Item + => _outputItemAdded?.Item + ?? _outputItemDone?.Item; + + public int ItemIndex + => _outputItemAdded?.OutputIndex + ?? _outputItemDone?.OutputIndex + ?? 0; + + private readonly InternalResponsesResponseStreamEventResponseOutputItemAdded _outputItemAdded; + private readonly InternalResponsesResponseStreamEventResponseOutputItemDone _outputItemDone; + + internal StreamingResponseItemUpdate(StreamingResponseUpdate baseUpdate) + : base(baseUpdate.Kind) + { + _outputItemAdded = baseUpdate as InternalResponsesResponseStreamEventResponseOutputItemAdded; + _outputItemDone = baseUpdate as InternalResponsesResponseStreamEventResponseOutputItemDone; + } + + internal StreamingResponseItemUpdate() + { } +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseStatusUpdate.Serialization.cs b/src/Custom/Responses/Streaming/StreamingResponseStatusUpdate.Serialization.cs new file mode 100644 index 000000000..79499ca80 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseStatusUpdate.Serialization.cs @@ -0,0 +1,39 @@ +using System; +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace OpenAI.Responses; + +public partial class StreamingResponseStatusUpdate : IJsonModel +{ + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, SerializeStreamingResponseStatusUpdate, writer, options); + + StreamingResponseStatusUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeStreamingResponseStatusUpdate, ref reader, options); + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + StreamingResponseStatusUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeStreamingResponseStatusUpdate, data, options); + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + internal static void SerializeStreamingResponseStatusUpdate( + StreamingResponseStatusUpdate instance, + Utf8JsonWriter writer, + ModelReaderWriterOptions options) + => writer.WriteFirstObject( + options, + instance._responseCompleted, + instance._responseIncomplete, + instance._responseInProgress, + instance._responseFailed, + instance._responseCreated); + + internal static StreamingResponseStatusUpdate DeserializeStreamingResponseStatusUpdate( + JsonElement element, + ModelReaderWriterOptions options) + => DeserializeUpdateWithWrappers(element, options) as StreamingResponseStatusUpdate; +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseStatusUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseStatusUpdate.cs new file mode 100644 index 000000000..75f731bb2 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseStatusUpdate.cs @@ -0,0 +1,30 @@ +namespace OpenAI.Responses; + +public partial class StreamingResponseStatusUpdate : StreamingResponseUpdate +{ + public OpenAIResponse Response + => _responseCreated?.Response + ?? _responseInProgress?.Response + ?? _responseCompleted?.Response + ?? _responseFailed?.Response + ?? _responseIncomplete?.Response; + + private readonly InternalResponsesResponseStreamEventResponseCreated _responseCreated; + private readonly InternalResponsesResponseStreamEventResponseInProgress _responseInProgress; + private readonly InternalResponsesResponseStreamEventResponseCompleted _responseCompleted; + private readonly InternalResponsesResponseStreamEventResponseFailed _responseFailed; + private readonly InternalResponsesResponseStreamEventResponseIncomplete _responseIncomplete; + + internal StreamingResponseStatusUpdate(StreamingResponseUpdate baseUpdate) + : base(baseUpdate.Kind) + { + _responseCreated = baseUpdate as InternalResponsesResponseStreamEventResponseCreated; + _responseInProgress = baseUpdate as InternalResponsesResponseStreamEventResponseInProgress; + _responseCompleted = baseUpdate as InternalResponsesResponseStreamEventResponseCompleted; + _responseFailed = baseUpdate as InternalResponsesResponseStreamEventResponseFailed; + _responseIncomplete = baseUpdate as InternalResponsesResponseStreamEventResponseIncomplete; + } + + internal StreamingResponseStatusUpdate() + { } +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseTextAnnotationUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseTextAnnotationUpdate.cs new file mode 100644 index 000000000..a334e99a8 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseTextAnnotationUpdate.cs @@ -0,0 +1,5 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesResponseStreamEventResponseOutputTextAnnotationAdded")] +public partial class StreamingResponseTextAnnotationUpdate +{ } \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseUpdate.Serialization.cs b/src/Custom/Responses/Streaming/StreamingResponseUpdate.Serialization.cs new file mode 100644 index 000000000..ede956825 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseUpdate.Serialization.cs @@ -0,0 +1,39 @@ +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace OpenAI.Responses; + +public partial class StreamingResponseUpdate +{ + internal static StreamingResponseUpdate DeserializeUpdateWithWrappers(JsonElement element, ModelReaderWriterOptions options) + { + StreamingResponseUpdate directlyDeserializedUpdate + = DeserializeStreamingResponseUpdate(element, options); + return directlyDeserializedUpdate switch + { + InternalResponsesResponseStreamEventResponseContentPartAdded + or InternalResponsesResponseStreamEventResponseOutputTextDelta + or InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta + or InternalResponsesResponseStreamEventResponseRefusalDelta + => new StreamingResponseContentPartDeltaUpdate(directlyDeserializedUpdate), + InternalResponsesResponseStreamEventResponseOutputItemAdded + or InternalResponsesResponseStreamEventResponseOutputItemDone + => new StreamingResponseItemUpdate(directlyDeserializedUpdate), + InternalResponsesResponseStreamEventResponseCreated + or InternalResponsesResponseStreamEventResponseInProgress + or InternalResponsesResponseStreamEventResponseCompleted + or InternalResponsesResponseStreamEventResponseFailed + or InternalResponsesResponseStreamEventResponseIncomplete + => new StreamingResponseStatusUpdate(directlyDeserializedUpdate), + InternalResponsesResponseStreamEventResponseFileSearchCallCompleted + or InternalResponsesResponseStreamEventResponseFileSearchCallInProgress + or InternalResponsesResponseStreamEventResponseFileSearchCallSearching + => new StreamingResponseFileSearchCallUpdate(directlyDeserializedUpdate), + InternalResponsesResponseStreamEventResponseWebSearchCallCompleted + or InternalResponsesResponseStreamEventResponseWebSearchCallInProgress + or InternalResponsesResponseStreamEventResponseWebSearchCallSearching + => new StreamingResponseWebSearchCallUpdate(directlyDeserializedUpdate), + _ => directlyDeserializedUpdate, + }; + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseUpdate.cs new file mode 100644 index 000000000..08ff93514 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseUpdate.cs @@ -0,0 +1,9 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesResponseStreamEvent")] +public partial class StreamingResponseUpdate +{ + // CUSTOM: Made public and renamed to "Kind." + [CodeGenMember("Type")] + public StreamingResponseUpdateKind Kind { get; } +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseUpdateKind.cs b/src/Custom/Responses/Streaming/StreamingResponseUpdateKind.cs new file mode 100644 index 000000000..433ce4575 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseUpdateKind.cs @@ -0,0 +1,5 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesResponseStreamEventType")] +public readonly partial struct StreamingResponseUpdateKind +{ } diff --git a/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallUpdate.Serialization.cs b/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallUpdate.Serialization.cs new file mode 100644 index 000000000..29ee834ca --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallUpdate.Serialization.cs @@ -0,0 +1,35 @@ +using System; +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace OpenAI.Responses; + +public partial class StreamingResponseWebSearchCallUpdate : IJsonModel +{ + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, SerializeStreamingResponseWebSearchCallUpdate, writer, options); + + StreamingResponseWebSearchCallUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeResponsesItemStreamingPartDeltaUpdate, ref reader, options); + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + StreamingResponseWebSearchCallUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeResponsesItemStreamingPartDeltaUpdate, data, options); + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + internal static void SerializeStreamingResponseWebSearchCallUpdate( + StreamingResponseWebSearchCallUpdate instance, + Utf8JsonWriter writer, + ModelReaderWriterOptions options) + => writer.WriteFirstObject( + options, + instance._webSearchCallCompleted, + instance._webSearchCallInProgress, + instance._webSearchCallSearching); + + internal static StreamingResponseWebSearchCallUpdate DeserializeResponsesItemStreamingPartDeltaUpdate(JsonElement element, ModelReaderWriterOptions options = null) + => DeserializeUpdateWithWrappers(element, options) as StreamingResponseWebSearchCallUpdate; +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallUpdate.cs new file mode 100644 index 000000000..34b68d5b5 --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallUpdate.cs @@ -0,0 +1,30 @@ +namespace OpenAI.Responses; + +public partial class StreamingResponseWebSearchCallUpdate : StreamingResponseUpdate +{ + public string OutputItemId + => _webSearchCallCompleted?.ItemId + ?? _webSearchCallInProgress?.ItemId + ?? _webSearchCallSearching?.ItemId; + + public int OutputItemIndex + => _webSearchCallCompleted?.OutputIndex + ?? _webSearchCallInProgress?.OutputIndex + ?? _webSearchCallSearching?.OutputIndex + ?? 0; + + private readonly InternalResponsesResponseStreamEventResponseWebSearchCallCompleted _webSearchCallCompleted; + private readonly InternalResponsesResponseStreamEventResponseWebSearchCallInProgress _webSearchCallInProgress; + private readonly InternalResponsesResponseStreamEventResponseWebSearchCallSearching _webSearchCallSearching; + + internal StreamingResponseWebSearchCallUpdate(StreamingResponseUpdate baseUpdate) + : base(baseUpdate.Kind) + { + _webSearchCallCompleted = baseUpdate as InternalResponsesResponseStreamEventResponseWebSearchCallCompleted; + _webSearchCallInProgress = baseUpdate as InternalResponsesResponseStreamEventResponseWebSearchCallInProgress; + _webSearchCallSearching = baseUpdate as InternalResponsesResponseStreamEventResponseWebSearchCallSearching; + } + + internal StreamingResponseWebSearchCallUpdate() + { } +} \ No newline at end of file diff --git a/src/Custom/Responses/Tools/ComputerToolEnvironment.cs b/src/Custom/Responses/Tools/ComputerToolEnvironment.cs new file mode 100644 index 000000000..31c220a07 --- /dev/null +++ b/src/Custom/Responses/Tools/ComputerToolEnvironment.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesComputerToolEnvironment")] +public readonly partial struct ComputerToolEnvironment +{ +} diff --git a/src/Custom/Responses/Tools/FileSearchToolRanker.cs b/src/Custom/Responses/Tools/FileSearchToolRanker.cs new file mode 100644 index 000000000..94da685ce --- /dev/null +++ b/src/Custom/Responses/Tools/FileSearchToolRanker.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesFileSearchToolRankingOptionsRanker")] +public readonly partial struct FileSearchToolRanker +{ +} diff --git a/src/Custom/Responses/Tools/FileSearchToolRankingOptions.cs b/src/Custom/Responses/Tools/FileSearchToolRankingOptions.cs new file mode 100644 index 000000000..5929d8de7 --- /dev/null +++ b/src/Custom/Responses/Tools/FileSearchToolRankingOptions.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("ResponsesFileSearchToolRankingOptions")] +public partial class FileSearchToolRankingOptions +{ +} diff --git a/src/Custom/Responses/Tools/Internal/InternalUnknownResponsesTool.cs b/src/Custom/Responses/Tools/Internal/InternalUnknownResponsesTool.cs new file mode 100644 index 000000000..477b0c90b --- /dev/null +++ b/src/Custom/Responses/Tools/Internal/InternalUnknownResponsesTool.cs @@ -0,0 +1,6 @@ +namespace OpenAI.Responses; + +[CodeGenType("UnknownResponsesTool")] +internal partial class InternalUnknownResponsesTool +{ +} diff --git a/src/Custom/Responses/Tools/ResponseTool.cs b/src/Custom/Responses/Tools/ResponseTool.cs new file mode 100644 index 000000000..a1d065830 --- /dev/null +++ b/src/Custom/Responses/Tools/ResponseTool.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; + +namespace OpenAI.Responses; + +[CodeGenType("ResponsesTool")] +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); + } + + [Experimental("OPENAICUA001")] + public static ResponseTool CreateComputerTool(int displayWidth,int displayHeight, ComputerToolEnvironment environment) + { + return new InternalResponsesComputerTool( + type: InternalResponsesToolType.Computer, + additionalBinaryDataProperties: null, + displayWidth, + displayHeight, + environment); + } + + 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); + } + + public static ResponseTool CreateWebSearchTool(WebSearchToolLocation webSearchToolUserLocation = null, WebSearchToolContextSize? webSearchToolContextSize = null) + { + return new InternalResponsesWebSearchTool( + type: InternalResponsesToolType.WebSearch, + additionalBinaryDataProperties: null, + webSearchToolUserLocation, + webSearchToolContextSize); + } +} diff --git a/src/Custom/Responses/Tools/ResponseToolChoice.cs b/src/Custom/Responses/Tools/ResponseToolChoice.cs new file mode 100644 index 000000000..6541382dd --- /dev/null +++ b/src/Custom/Responses/Tools/ResponseToolChoice.cs @@ -0,0 +1,27 @@ + +//namespace OpenAI.Responses; + +//public partial class ResponseToolChoice +//{ +// //internal BinaryData AsBinaryData { get; set; } + +// //public static ResponsesToolChoice CreateAutoToolChoice() +// // => new(ModelReaderWriter.Write(InternalResponsesToolChoiceEnum.Auto)); + +// //public static ResponsesToolChoice CreateNoneToolChoice() +// // => new(ModelReaderWriter.Write(InternalResponsesToolChoiceEnum.None)); + +// //public static ResponsesToolChoice CreateRequiredToolChoice() +// // => new(ModelReaderWriter.Write(InternalResponsesToolChoiceEnum.Required)); + +// //public static ResponsesToolChoice CreateFunctionToolChoice(string functionName) +// // => new( +// // ModelReaderWriter.Write( +// // new InternalResponsesFunctionToolChoice( +// // new InternalResponsesFunctionToolChoiceFunction(functionName)))); + +// //internal ResponsesToolChoice(BinaryData binaryDataToolChoice) +// //{ +// // AsBinaryData = binaryDataToolChoice; +// //} +//} diff --git a/src/Custom/Responses/Tools/WebSearchToolContextSize.cs b/src/Custom/Responses/Tools/WebSearchToolContextSize.cs new file mode 100644 index 000000000..eed8c5f8e --- /dev/null +++ b/src/Custom/Responses/Tools/WebSearchToolContextSize.cs @@ -0,0 +1,6 @@ +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 new file mode 100644 index 000000000..ae4849a9a --- /dev/null +++ b/src/Custom/Responses/Tools/WebSearchToolLocation.cs @@ -0,0 +1,16 @@ +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/VectorStores/AddFileToVectorStoreOperation.Protocol.cs b/src/Custom/VectorStores/AddFileToVectorStoreOperation.Protocol.cs index 254232f1a..fdc68741c 100644 --- a/src/Custom/VectorStores/AddFileToVectorStoreOperation.Protocol.cs +++ b/src/Custom/VectorStores/AddFileToVectorStoreOperation.Protocol.cs @@ -10,7 +10,7 @@ namespace OpenAI.VectorStores; public partial class AddFileToVectorStoreOperation : OperationResult { - private readonly ClientPipeline _pipeline; + private readonly VectorStoreClient _parentClient; private readonly Uri _endpoint; private readonly string _vectorStoreId; @@ -28,8 +28,8 @@ public partial class AddFileToVectorStoreOperation : OperationResult [EditorBrowsable(EditorBrowsableState.Never)] public virtual async Task GetFileAssociationAsync(RequestOptions? options) { - using PipelineMessage message = CreateGetVectorStoreFileRequest(_vectorStoreId, _fileId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using PipelineMessage message = _parentClient.CreateGetVectorStoreFileRequest(_vectorStoreId, _fileId, options); + return ClientResult.FromResponse(await _parentClient.Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } /// @@ -41,26 +41,8 @@ public virtual async Task GetFileAssociationAsync(RequestOptions? [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult GetFileAssociation(RequestOptions? options) { - using PipelineMessage message = CreateGetVectorStoreFileRequest(_vectorStoreId, _fileId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - internal virtual PipelineMessage CreateGetVectorStoreFileRequest(string vectorStoreId, string fileId, 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("/vector_stores/", false); - uri.AppendPath(vectorStoreId, true); - uri.AppendPath("/files/", false); - uri.AppendPath(fileId, true); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; + using PipelineMessage message = _parentClient.CreateGetVectorStoreFileRequest(_vectorStoreId, _fileId, options); + return ClientResult.FromResponse(_parentClient.Pipeline.ProcessMessage(message, options)); } private static PipelineMessageClassifier? _pipelineMessageClassifier200; diff --git a/src/Custom/VectorStores/AddFileToVectorStoreOperation.cs b/src/Custom/VectorStores/AddFileToVectorStoreOperation.cs index d160fb301..99b9325c7 100644 --- a/src/Custom/VectorStores/AddFileToVectorStoreOperation.cs +++ b/src/Custom/VectorStores/AddFileToVectorStoreOperation.cs @@ -13,12 +13,12 @@ namespace OpenAI.VectorStores; public partial class AddFileToVectorStoreOperation : OperationResult { internal AddFileToVectorStoreOperation( - ClientPipeline pipeline, + VectorStoreClient parentClient, Uri endpoint, ClientResult result) : base(result.GetRawResponse()) { - _pipeline = pipeline; + _parentClient = parentClient; _endpoint = endpoint; Value = result; diff --git a/src/Custom/VectorStores/CreateBatchFileJobOperation.Protocol.cs b/src/Custom/VectorStores/CreateBatchFileJobOperation.Protocol.cs index 8b649718e..1e0e2598b 100644 --- a/src/Custom/VectorStores/CreateBatchFileJobOperation.Protocol.cs +++ b/src/Custom/VectorStores/CreateBatchFileJobOperation.Protocol.cs @@ -14,7 +14,7 @@ namespace OpenAI.VectorStores; /// public partial class CreateBatchFileJobOperation : OperationResult { - private readonly ClientPipeline _pipeline; + private readonly VectorStoreClient _parentClient; private readonly Uri _endpoint; private readonly string _vectorStoreId; @@ -34,8 +34,8 @@ public partial class CreateBatchFileJobOperation : OperationResult [EditorBrowsable(EditorBrowsableState.Never)] public virtual async Task GetFileBatchAsync(RequestOptions? options) { - using PipelineMessage message = CreateGetVectorStoreFileBatchRequest(_vectorStoreId, _batchId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using PipelineMessage message = _parentClient.CreateGetVectorStoreFileBatchRequest(_vectorStoreId, _batchId, options); + return ClientResult.FromResponse(await _parentClient.Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } /// @@ -47,8 +47,8 @@ public virtual async Task GetFileBatchAsync(RequestOptions? option [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult GetFileBatch(RequestOptions? options) { - using PipelineMessage message = CreateGetVectorStoreFileBatchRequest(_vectorStoreId, _batchId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + using PipelineMessage message = _parentClient.CreateGetVectorStoreFileBatchRequest(_vectorStoreId, _batchId, options); + return ClientResult.FromResponse(_parentClient.Pipeline.ProcessMessage(message, options)); } /// @@ -60,8 +60,8 @@ public virtual ClientResult GetFileBatch(RequestOptions? options) [EditorBrowsable(EditorBrowsableState.Never)] public virtual async Task CancelAsync(RequestOptions? options) { - using PipelineMessage message = CreateCancelVectorStoreFileBatchRequest(_vectorStoreId, _batchId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using PipelineMessage message = _parentClient.CreateCancelVectorStoreFileBatchRequest(_vectorStoreId, _batchId, options); + return ClientResult.FromResponse(await _parentClient.Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } /// @@ -73,45 +73,8 @@ public virtual async Task CancelAsync(RequestOptions? options) [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult Cancel(RequestOptions? options) { - using PipelineMessage message = CreateCancelVectorStoreFileBatchRequest(_vectorStoreId, _batchId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - internal virtual PipelineMessage CreateGetVectorStoreFileBatchRequest(string vectorStoreId, string batchId, 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("/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) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "POST"; - var 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; + using PipelineMessage message = _parentClient.CreateCancelVectorStoreFileBatchRequest(_vectorStoreId, _batchId, options); + return ClientResult.FromResponse(_parentClient.Pipeline.ProcessMessage(message, options)); } private static PipelineMessageClassifier? _pipelineMessageClassifier200; diff --git a/src/Custom/VectorStores/CreateBatchFileJobOperation.cs b/src/Custom/VectorStores/CreateBatchFileJobOperation.cs index ad5acece8..7b299f28e 100644 --- a/src/Custom/VectorStores/CreateBatchFileJobOperation.cs +++ b/src/Custom/VectorStores/CreateBatchFileJobOperation.cs @@ -16,12 +16,12 @@ namespace OpenAI.VectorStores; public partial class CreateBatchFileJobOperation : OperationResult { internal CreateBatchFileJobOperation( - ClientPipeline pipeline, + VectorStoreClient parentClient, Uri endpoint, ClientResult result) : base(result.GetRawResponse()) { - _pipeline = pipeline; + _parentClient = parentClient; _endpoint = endpoint; Value = result; diff --git a/src/Custom/VectorStores/CreateVectorStoreOperation.Protocol.cs b/src/Custom/VectorStores/CreateVectorStoreOperation.Protocol.cs index 343c37155..1faeada23 100644 --- a/src/Custom/VectorStores/CreateVectorStoreOperation.Protocol.cs +++ b/src/Custom/VectorStores/CreateVectorStoreOperation.Protocol.cs @@ -10,7 +10,7 @@ namespace OpenAI.VectorStores; public partial class CreateVectorStoreOperation : OperationResult { - private readonly ClientPipeline _pipeline; + private readonly VectorStoreClient _parentClient; private readonly Uri _endpoint; private readonly string _vectorStoreId; @@ -27,8 +27,8 @@ public partial class CreateVectorStoreOperation : OperationResult [EditorBrowsable(EditorBrowsableState.Never)] public virtual async Task GetVectorStoreAsync(RequestOptions? options) { - using PipelineMessage message = CreateGetVectorStoreRequest(_vectorStoreId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + using PipelineMessage message = _parentClient.CreateGetVectorStoreRequest(_vectorStoreId, options); + return ClientResult.FromResponse(await _parentClient.Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } /// @@ -40,24 +40,8 @@ public virtual async Task GetVectorStoreAsync(RequestOptions? opti [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult GetVectorStore(RequestOptions? options) { - using PipelineMessage message = CreateGetVectorStoreRequest(_vectorStoreId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - internal virtual PipelineMessage CreateGetVectorStoreRequest(string vectorStoreId, 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("/vector_stores/", false); - uri.AppendPath(vectorStoreId, true); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; + using PipelineMessage message = _parentClient.CreateGetVectorStoreRequest(_vectorStoreId, options); + return ClientResult.FromResponse(_parentClient.Pipeline.ProcessMessage(message, options)); } private static PipelineMessageClassifier? _pipelineMessageClassifier200; diff --git a/src/Custom/VectorStores/CreateVectorStoreOperation.cs b/src/Custom/VectorStores/CreateVectorStoreOperation.cs index d140e7473..00d71b037 100644 --- a/src/Custom/VectorStores/CreateVectorStoreOperation.cs +++ b/src/Custom/VectorStores/CreateVectorStoreOperation.cs @@ -13,12 +13,12 @@ namespace OpenAI.VectorStores; public partial class CreateVectorStoreOperation : OperationResult { internal CreateVectorStoreOperation( - ClientPipeline pipeline, + VectorStoreClient parentClient, Uri endpoint, ClientResult result) : base(result.GetRawResponse()) { - _pipeline = pipeline; + _parentClient = parentClient; _endpoint = endpoint; Value = result; diff --git a/src/Custom/VectorStores/FileChunkingStrategy.cs b/src/Custom/VectorStores/FileChunkingStrategy.cs index 3da40dad9..d81146fbb 100644 --- a/src/Custom/VectorStores/FileChunkingStrategy.cs +++ b/src/Custom/VectorStores/FileChunkingStrategy.cs @@ -3,7 +3,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenModel("FileChunkingStrategyResponseParam")] +[CodeGenType("FileChunkingStrategyResponseParam")] public abstract partial class FileChunkingStrategy { /// diff --git a/src/Custom/VectorStores/FileFromStoreRemovalResult.cs b/src/Custom/VectorStores/FileFromStoreRemovalResult.cs index fe5d63382..5945a69e6 100644 --- a/src/Custom/VectorStores/FileFromStoreRemovalResult.cs +++ b/src/Custom/VectorStores/FileFromStoreRemovalResult.cs @@ -3,7 +3,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenModel("DeleteVectorStoreFileResponse")] +[CodeGenType("DeleteVectorStoreFileResponse")] public partial class FileFromStoreRemovalResult { // CUSTOM: Renamed. diff --git a/src/Custom/VectorStores/Internal/GeneratorStubs.cs b/src/Custom/VectorStores/Internal/GeneratorStubs.cs index 1ca77f775..b67385a3c 100644 --- a/src/Custom/VectorStores/Internal/GeneratorStubs.cs +++ b/src/Custom/VectorStores/Internal/GeneratorStubs.cs @@ -2,65 +2,65 @@ namespace OpenAI.VectorStores; // CUSTOM: Made internal. -[CodeGenModel("CreateVectorStoreFileBatchRequest")] +[CodeGenType("CreateVectorStoreFileBatchRequest")] internal partial class InternalCreateVectorStoreFileBatchRequest { } -[CodeGenModel("CreateVectorStoreFileRequest")] +[CodeGenType("CreateVectorStoreFileRequest")] internal partial class InternalCreateVectorStoreFileRequest { } -[CodeGenModel("DeleteVectorStoreFileResponseObject")] +[CodeGenType("DeleteVectorStoreFileResponseObject")] internal readonly partial struct InternalDeleteVectorStoreFileResponseObject { } -[CodeGenModel("DeleteVectorStoreResponseObject")] +[CodeGenType("DeleteVectorStoreResponseObject")] internal readonly partial struct InternalDeleteVectorStoreResponseObject { } -[CodeGenModel("ListVectorStoreFilesResponse")] +[CodeGenType("ListVectorStoreFilesResponse")] internal partial class InternalListVectorStoreFilesResponse : IInternalListResponse { } -[CodeGenModel("ListVectorStoreFilesResponseObject")] +[CodeGenType("ListVectorStoreFilesResponseObject")] internal readonly partial struct InternalListVectorStoreFilesResponseObject { } -[CodeGenModel("ListVectorStoresResponse")] +[CodeGenType("ListVectorStoresResponse")] internal partial class InternalListVectorStoresResponse : IInternalListResponse { } -[CodeGenModel("ListVectorStoresResponseObject")] +[CodeGenType("ListVectorStoresResponseObject")] internal readonly partial struct InternalListVectorStoresResponseObject { } -[CodeGenModel("VectorStoreFileBatchObjectFileCounts")] +[CodeGenType("VectorStoreFileBatchObjectFileCounts")] internal partial class InternalVectorStoreFileBatchObjectFileCounts { } -[CodeGenModel("VectorStoreFileBatchObjectObject")] +[CodeGenType("VectorStoreFileBatchObjectObject")] internal readonly partial struct InternalVectorStoreFileBatchObjectObject { } -[CodeGenModel("VectorStoreFileObjectObject")] +[CodeGenType("VectorStoreFileObjectObject")] internal readonly partial struct InternalVectorStoreFileObjectObject { } -[CodeGenModel("VectorStoreObjectObject")] +[CodeGenType("VectorStoreObjectObject")] internal readonly partial struct InternalVectorStoreObjectObject { } -[CodeGenModel("StaticChunkingStrategy")] +[CodeGenType("StaticChunkingStrategy")] internal partial class InternalStaticChunkingStrategyDetails { } -[CodeGenModel("FileChunkingStrategyRequestParam")] +[CodeGenType("FileChunkingStrategyRequestParam")] internal partial class InternalFileChunkingStrategyRequestParam { } -[CodeGenModel("AutoChunkingStrategyRequestParam")] +[CodeGenType("AutoChunkingStrategyRequestParam")] internal partial class InternalAutoChunkingStrategyRequestParam { } -[CodeGenModel("StaticChunkingStrategyRequestParam")] +[CodeGenType("StaticChunkingStrategyRequestParam")] internal partial class InternalStaticChunkingStrategyRequestParam { } -[CodeGenModel("UnknownFileChunkingStrategyRequestParam")] +[CodeGenType("UnknownFileChunkingStrategyRequestParam")] internal partial class InternalUnknownFileChunkingStrategyRequestParamProxy { } -[CodeGenModel("AutoChunkingStrategyResponseParam")] +[CodeGenType("AutoChunkingStrategyResponseParam")] internal partial class InternalAutoChunkingStrategy { } -[CodeGenModel("OtherChunkingStrategyResponseParam")] +[CodeGenType("OtherChunkingStrategyResponseParam")] internal partial class InternalUnknownChunkingStrategy { } -[CodeGenModel("UnknownFileChunkingStrategyResponseParam")] +[CodeGenType("UnknownFileChunkingStrategyResponseParam")] internal partial class InternalUnknownFileChunkingStrategyResponseParamProxy { } -[CodeGenModel("ListFilesInVectorStoreBatchRequestOrder")] -internal readonly partial struct InternalListFilesInVectorStoreBatchRequestOrder { } \ No newline at end of file +[CodeGenType("VectorStoreFileAttributes")] +internal partial class InternalVectorStoreFileAttributes { } \ No newline at end of file diff --git a/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreCollectionResult.cs b/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreCollectionResult.cs index 9eb429289..90e260d97 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.CreateGetVectorStoresRequest(limit, order, after, before, options); + using PipelineMessage message = _vectorStoreClient.CreateListVectorStoresRequest(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 80707e361..5d3af5a96 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.CreateGetFilesInVectorStoreBatchesRequest(vectorStoreId, batchId, limit, order, after, before, filter, options); + using PipelineMessage message = _vectorStoreClient.CreateListFilesInVectorStoreBatchRequest(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 0fdc218fc..cf35bff0b 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.CreateGetVectorStoreFilesRequest(vectorStoreId, limit, order, after, before, filter, options); + using PipelineMessage message = _vectorStoreClient.CreateListVectorStoreFilesRequest(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 f8faf783f..edcefd922 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.CreateGetVectorStoresRequest(limit, order, after, before, options); + using PipelineMessage message = _vectorStoreClient.CreateListVectorStoresRequest(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 7f8345cf6..4f76f6337 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.CreateGetFilesInVectorStoreBatchesRequest(vectorStoreId, batchId, limit, order, after, before, filter, options); + using PipelineMessage message = _vectorStoreClient.CreateListFilesInVectorStoreBatchRequest(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 4b4a038f5..11536f27c 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.CreateGetVectorStoreFilesRequest(vectorStoreId, limit, order, after, before, filter, options); + using PipelineMessage message = _vectorStoreClient.CreateListVectorStoreFilesRequest(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 1912b776f..a895bc384 100644 --- a/src/Custom/VectorStores/StaticFileChunkingStrategy.cs +++ b/src/Custom/VectorStores/StaticFileChunkingStrategy.cs @@ -3,7 +3,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenModel("StaticChunkingStrategyResponseParam")] +[CodeGenType("StaticChunkingStrategyResponseParam")] public partial class StaticFileChunkingStrategy : FileChunkingStrategy { [CodeGenMember("Static")] diff --git a/src/Custom/VectorStores/VectorStore.cs b/src/Custom/VectorStores/VectorStore.cs index d63612d18..7f05397d0 100644 --- a/src/Custom/VectorStores/VectorStore.cs +++ b/src/Custom/VectorStores/VectorStore.cs @@ -6,7 +6,7 @@ namespace OpenAI.VectorStores; /// A representation of a file storage and indexing container used by the file_search tool for assistants. /// [Experimental("OPENAI001")] -[CodeGenModel("VectorStoreObject")] +[CodeGenType("VectorStoreObject")] public partial class VectorStore { // CUSTOM: Made internal. diff --git a/src/Custom/VectorStores/VectorStoreBatchFileJob.cs b/src/Custom/VectorStores/VectorStoreBatchFileJob.cs index 329a03b53..0e19bd05b 100644 --- a/src/Custom/VectorStores/VectorStoreBatchFileJob.cs +++ b/src/Custom/VectorStores/VectorStoreBatchFileJob.cs @@ -6,7 +6,7 @@ namespace OpenAI.VectorStores; /// Represents information about a bulk ingestion job of files into a vector store. /// [Experimental("OPENAI001")] -[CodeGenModel("VectorStoreFileBatchObject")] +[CodeGenType("VectorStoreFileBatchObject")] public partial class VectorStoreBatchFileJob { private readonly object Object; diff --git a/src/Custom/VectorStores/VectorStoreBatchFileJobStatus.cs b/src/Custom/VectorStores/VectorStoreBatchFileJobStatus.cs index d23f262a6..22a07935b 100644 --- a/src/Custom/VectorStores/VectorStoreBatchFileJobStatus.cs +++ b/src/Custom/VectorStores/VectorStoreBatchFileJobStatus.cs @@ -3,7 +3,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenModel("VectorStoreFileBatchObjectStatus")] +[CodeGenType("VectorStoreFileBatchObjectStatus")] public readonly partial struct VectorStoreBatchFileJobStatus { } \ No newline at end of file diff --git a/src/Custom/VectorStores/VectorStoreClient.Protocol.cs b/src/Custom/VectorStores/VectorStoreClient.Protocol.cs index 810460b8d..f6279e82c 100644 --- a/src/Custom/VectorStores/VectorStoreClient.Protocol.cs +++ b/src/Custom/VectorStores/VectorStoreClient.Protocol.cs @@ -683,289 +683,4 @@ internal virtual ClientResult GetBatchFileJob(string vectorStoreId, string batch using PipelineMessage message = CreateGetVectorStoreFileBatchRequest(vectorStoreId, batchId, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } - - internal virtual PipelineMessage CreateCreateVectorStoreRequest(BinaryContent content, 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("/vector_stores", 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 CreateGetVectorStoresRequest(int? limit, string order, string after, string before, 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("/vector_stores", false); - if (limit != null) - { - uri.AppendQuery("limit", limit.Value, 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); - } - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - internal virtual PipelineMessage CreateGetVectorStoreRequest(string vectorStoreId, 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("/vector_stores/", false); - uri.AppendPath(vectorStoreId, true); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - internal virtual PipelineMessage CreateModifyVectorStoreRequest(string vectorStoreId, BinaryContent content, 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("/vector_stores/", false); - uri.AppendPath(vectorStoreId, 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 CreateDeleteVectorStoreRequest(string vectorStoreId, RequestOptions options) - { - var message = Pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "DELETE"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/vector_stores/", false); - uri.AppendPath(vectorStoreId, true); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - internal virtual PipelineMessage CreateGetVectorStoreFilesRequest(string vectorStoreId, int? limit, string order, string after, string before, string filter, 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("/vector_stores/", false); - uri.AppendPath(vectorStoreId, true); - uri.AppendPath("/files", false); - if (limit != null) - { - uri.AppendQuery("limit", limit.Value, 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"); - message.Apply(options); - return message; - } - - internal virtual PipelineMessage CreateCreateVectorStoreFileRequest(string vectorStoreId, BinaryContent content, 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("/vector_stores/", false); - uri.AppendPath(vectorStoreId, 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) - { - var message = Pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "DELETE"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/vector_stores/", false); - uri.AppendPath(vectorStoreId, 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 CreateCancelVectorStoreFileBatchRequest(string vectorStoreId, string batchId, 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("/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 CreateCreateVectorStoreFileBatchRequest(string vectorStoreId, BinaryContent content, 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("/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 CreateGetVectorStoreFileRequest(string vectorStoreId, string fileId, 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("/vector_stores/", false); - uri.AppendPath(vectorStoreId, 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 CreateGetVectorStoreFileBatchRequest(string vectorStoreId, string batchId, 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("/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 CreateGetFilesInVectorStoreBatchesRequest(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, 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("/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", limit.Value, 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"); - message.Apply(options); - return message; - } } diff --git a/src/Custom/VectorStores/VectorStoreClient.cs b/src/Custom/VectorStores/VectorStoreClient.cs index 5f42766e6..545f59ce0 100644 --- a/src/Custom/VectorStores/VectorStoreClient.cs +++ b/src/Custom/VectorStores/VectorStoreClient.cs @@ -13,14 +13,14 @@ namespace OpenAI.VectorStores; /// The service client for OpenAI vector store operations. /// [Experimental("OPENAI001")] -[CodeGenClient("VectorStores")] -[CodeGenSuppress("VectorStoreClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] +[CodeGenType("VectorStores")] +[CodeGenSuppress("VectorStoreClient", typeof(ClientPipeline), typeof(Uri))] [CodeGenSuppress("CreateVectorStoreAsync", typeof(VectorStoreCreationOptions), 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(VectorStoreFileAssociationCollectionOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), typeof(CancellationToken))] -[CodeGenSuppress("ListVectorStoreFiles", typeof(string), typeof(int?), typeof(VectorStoreFileAssociationCollectionOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), 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("CreateVectorStoreFileAsync", typeof(string), typeof(InternalCreateVectorStoreFileRequest), typeof(CancellationToken))] [CodeGenSuppress("CreateVectorStoreFile", typeof(string), typeof(InternalCreateVectorStoreFileRequest), typeof(CancellationToken))] [CodeGenSuppress("GetVectorStoreFileAsync", typeof(string), typeof(string), typeof(CancellationToken))] @@ -33,8 +33,8 @@ namespace OpenAI.VectorStores; [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(InternalListFilesInVectorStoreBatchRequestOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), typeof(CancellationToken))] -[CodeGenSuppress("ListFilesInVectorStoreBatch", typeof(string), typeof(string), typeof(int?), typeof(InternalListFilesInVectorStoreBatchRequestOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), 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))] public partial class VectorStoreClient { // CUSTOM: Added as a convenience. @@ -89,17 +89,17 @@ protected internal VectorStoreClient(ClientPipeline pipeline, OpenAIClientOption internal virtual CreateVectorStoreOperation CreateCreateVectorStoreOperation(ClientResult result) { - return new CreateVectorStoreOperation(Pipeline, _endpoint, result); + return new CreateVectorStoreOperation(this, _endpoint, result); } internal virtual AddFileToVectorStoreOperation CreateAddFileToVectorStoreOperation(ClientResult result) { - return new AddFileToVectorStoreOperation(Pipeline, _endpoint, result); + return new AddFileToVectorStoreOperation(this, _endpoint, result); } internal virtual CreateBatchFileJobOperation CreateBatchFileJobOperation(ClientResult result) { - return new CreateBatchFileJobOperation(Pipeline, _endpoint, result); + return new CreateBatchFileJobOperation(this, _endpoint, result); } /// Creates a vector store. diff --git a/src/Custom/VectorStores/VectorStoreCollectionOrder.cs b/src/Custom/VectorStores/VectorStoreCollectionOrder.cs index 89aa5eda2..447f2bef2 100644 --- a/src/Custom/VectorStores/VectorStoreCollectionOrder.cs +++ b/src/Custom/VectorStores/VectorStoreCollectionOrder.cs @@ -4,7 +4,7 @@ namespace OpenAI.VectorStores; // CUSTOM: Renamed. [Experimental("OPENAI001")] -[CodeGenModel("ListVectorStoresRequestOrder")] +[CodeGenType("ListVectorStoresRequestOrder")] public readonly partial struct VectorStoreCollectionOrder { // CUSTOM: Renamed. diff --git a/src/Custom/VectorStores/VectorStoreCreationOptions.cs b/src/Custom/VectorStores/VectorStoreCreationOptions.cs index a421d5901..d9a7d141d 100644 --- a/src/Custom/VectorStores/VectorStoreCreationOptions.cs +++ b/src/Custom/VectorStores/VectorStoreCreationOptions.cs @@ -4,7 +4,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenModel("CreateVectorStoreRequest")] +[CodeGenType("CreateVectorStoreRequest")] public partial class VectorStoreCreationOptions { /// Gets or sets the policy that controls when the new vector store will be automatically deleted. diff --git a/src/Custom/VectorStores/VectorStoreDeletionResult.cs b/src/Custom/VectorStores/VectorStoreDeletionResult.cs index 121e14361..422bef712 100644 --- a/src/Custom/VectorStores/VectorStoreDeletionResult.cs +++ b/src/Custom/VectorStores/VectorStoreDeletionResult.cs @@ -3,7 +3,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenModel("DeleteVectorStoreResponse")] +[CodeGenType("DeleteVectorStoreResponse")] public partial class VectorStoreDeletionResult { // CUSTOM: Renamed. diff --git a/src/Custom/VectorStores/VectorStoreExpirationAnchor.cs b/src/Custom/VectorStores/VectorStoreExpirationAnchor.cs index 98882c6f0..0eddc416b 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")] -[CodeGenModel("VectorStoreExpirationAfterAnchor")] +[CodeGenType("VectorStoreExpirationAfterAnchor")] public enum VectorStoreExpirationAnchor { /// diff --git a/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs b/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs index bf8bb7907..2b72c165d 100644 --- a/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs +++ b/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs @@ -8,7 +8,7 @@ namespace OpenAI.VectorStores; /// Represents the the configuration that controls when a vector store will be automatically deleted. /// [Experimental("OPENAI001")] -[CodeGenModel("VectorStoreExpirationAfter")] +[CodeGenType("VectorStoreExpirationAfter")] [CodeGenSuppress(nameof(VectorStoreExpirationPolicy))] [CodeGenSuppress(nameof(VectorStoreExpirationPolicy), typeof(int))] [CodeGenSuppress(nameof(VectorStoreExpirationPolicy), typeof(VectorStoreExpirationAnchor), typeof(int), typeof(IDictionary))] @@ -51,12 +51,12 @@ public VectorStoreExpirationPolicy() /// Initializes a new instance of . /// Anchor timestamp after which the expiration policy applies. Supported anchors: `last_active_at`. /// The number of days after the anchor time that the vector store will expire. - /// Keeps track of any properties unknown to the library. + /// Keeps track of any properties unknown to the library. [SetsRequiredMembers] - internal VectorStoreExpirationPolicy(VectorStoreExpirationAnchor anchor, int days, IDictionary serializedAdditionalRawData) + internal VectorStoreExpirationPolicy(VectorStoreExpirationAnchor anchor, int days, IDictionary additionalBinaryDataProperties) { Anchor = anchor; Days = days; - SerializedAdditionalRawData = serializedAdditionalRawData ?? new ChangeTrackingDictionary(); + SerializedAdditionalRawData = additionalBinaryDataProperties ?? new ChangeTrackingDictionary(); } } diff --git a/src/Custom/VectorStores/VectorStoreFileAssociation.cs b/src/Custom/VectorStores/VectorStoreFileAssociation.cs index 4ab1114e1..d4a51bb0a 100644 --- a/src/Custom/VectorStores/VectorStoreFileAssociation.cs +++ b/src/Custom/VectorStores/VectorStoreFileAssociation.cs @@ -1,3 +1,6 @@ +using System; +using System.Collections; +using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace OpenAI.VectorStores; @@ -6,7 +9,7 @@ namespace OpenAI.VectorStores; /// A representation of a file association between an uploaded file and a vector store. /// [Experimental("OPENAI001")] -[CodeGenModel("VectorStoreFileObject")] +[CodeGenType("VectorStoreFileObject")] public partial class VectorStoreFileAssociation { // CUSTOM: Made internal. @@ -27,6 +30,10 @@ public partial class VectorStoreFileAssociation [CodeGenMember("UsageBytes")] public int Size { get; } + // CUSTOM: Changed type. + [CodeGenMember("Attributes")] + public IDictionary Attributes { get; } = new ChangeTrackingDictionary(); + [CodeGenMember("ChunkingStrategy")] public FileChunkingStrategy ChunkingStrategy { get; } } \ No newline at end of file diff --git a/src/Custom/VectorStores/VectorStoreFileAssociationCollectionOrder.cs b/src/Custom/VectorStores/VectorStoreFileAssociationCollectionOrder.cs index a71f40fa3..0c6eb27f4 100644 --- a/src/Custom/VectorStores/VectorStoreFileAssociationCollectionOrder.cs +++ b/src/Custom/VectorStores/VectorStoreFileAssociationCollectionOrder.cs @@ -1,17 +1,40 @@ -using System.Diagnostics.CodeAnalysis; +using System; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.VectorStores; -// CUSTOM: Renamed. [Experimental("OPENAI001")] -[CodeGenModel("ListVectorStoreFilesRequestOrder")] -public readonly partial struct VectorStoreFileAssociationCollectionOrder +public readonly partial struct VectorStoreFileAssociationCollectionOrder : IEquatable { - // CUSTOM: Renamed. - [CodeGenMember("Asc")] - public static VectorStoreFileAssociationCollectionOrder Ascending { get; } = new VectorStoreFileAssociationCollectionOrder(AscValue); + public static VectorStoreFileAssociationCollectionOrder Ascending { get; } = new VectorStoreFileAssociationCollectionOrder("asc"); - // CUSTOM: Renamed. - [CodeGenMember("Desc")] - public static VectorStoreFileAssociationCollectionOrder Descending { get; } = new VectorStoreFileAssociationCollectionOrder(DescValue); + public static VectorStoreFileAssociationCollectionOrder Descending { get; } = new VectorStoreFileAssociationCollectionOrder("desc"); + + private readonly string _value; + private const string AscValue = "asc"; + private const string DescValue = "desc"; + + public VectorStoreFileAssociationCollectionOrder(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static bool operator ==(VectorStoreFileAssociationCollectionOrder left, VectorStoreFileAssociationCollectionOrder right) => left.Equals(right); + + public static bool operator !=(VectorStoreFileAssociationCollectionOrder left, VectorStoreFileAssociationCollectionOrder right) => !left.Equals(right); + + public static implicit operator VectorStoreFileAssociationCollectionOrder(string value) => new VectorStoreFileAssociationCollectionOrder(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is VectorStoreFileAssociationCollectionOrder other && Equals(other); + + public bool Equals(VectorStoreFileAssociationCollectionOrder 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/Custom/VectorStores/VectorStoreFileAssociationError.cs b/src/Custom/VectorStores/VectorStoreFileAssociationError.cs index c46e71fc1..a273bb91a 100644 --- a/src/Custom/VectorStores/VectorStoreFileAssociationError.cs +++ b/src/Custom/VectorStores/VectorStoreFileAssociationError.cs @@ -3,7 +3,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenModel("VectorStoreFileObjectLastError")] +[CodeGenType("VectorStoreFileObjectLastError1")] public partial class VectorStoreFileAssociationError { } \ No newline at end of file diff --git a/src/Custom/VectorStores/VectorStoreFileAssociationErrorCode.cs b/src/Custom/VectorStores/VectorStoreFileAssociationErrorCode.cs index 82df53e38..d1a97a431 100644 --- a/src/Custom/VectorStores/VectorStoreFileAssociationErrorCode.cs +++ b/src/Custom/VectorStores/VectorStoreFileAssociationErrorCode.cs @@ -3,7 +3,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenModel("VectorStoreFileObjectLastErrorCode")] +[CodeGenType("VectorStoreFileObjectLastErrorCode")] public readonly partial struct VectorStoreFileAssociationErrorCode { } \ No newline at end of file diff --git a/src/Custom/VectorStores/VectorStoreFileAssociationStatus.cs b/src/Custom/VectorStores/VectorStoreFileAssociationStatus.cs index 2056ca2e1..86d040617 100644 --- a/src/Custom/VectorStores/VectorStoreFileAssociationStatus.cs +++ b/src/Custom/VectorStores/VectorStoreFileAssociationStatus.cs @@ -7,7 +7,7 @@ namespace OpenAI.VectorStores; /// Represents the possible states for a vector store file association. /// [Experimental("OPENAI001")] -[CodeGenModel("VectorStoreFileObjectStatus")] +[CodeGenType("VectorStoreFileObjectStatus")] public enum VectorStoreFileAssociationStatus { /// diff --git a/src/Custom/VectorStores/VectorStoreFileCounts.cs b/src/Custom/VectorStores/VectorStoreFileCounts.cs index 058d618b5..da981e471 100644 --- a/src/Custom/VectorStores/VectorStoreFileCounts.cs +++ b/src/Custom/VectorStores/VectorStoreFileCounts.cs @@ -3,7 +3,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenModel("VectorStoreObjectFileCounts")] +[CodeGenType("VectorStoreObjectFileCounts")] public partial class VectorStoreFileCounts { } \ No newline at end of file diff --git a/src/Custom/VectorStores/VectorStoreFileStatusFilter.cs b/src/Custom/VectorStores/VectorStoreFileStatusFilter.cs index 93e9b9b76..9f2d5b50e 100644 --- a/src/Custom/VectorStores/VectorStoreFileStatusFilter.cs +++ b/src/Custom/VectorStores/VectorStoreFileStatusFilter.cs @@ -3,7 +3,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenModel("ListVectorStoreFilesFilter")] +[CodeGenType("ListVectorStoreFilesFilter")] public readonly partial struct VectorStoreFileStatusFilter { } \ No newline at end of file diff --git a/src/Custom/VectorStores/VectorStoreModificationOptions.cs b/src/Custom/VectorStores/VectorStoreModificationOptions.cs index 193ab8fab..672fb952a 100644 --- a/src/Custom/VectorStores/VectorStoreModificationOptions.cs +++ b/src/Custom/VectorStores/VectorStoreModificationOptions.cs @@ -3,7 +3,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenModel("UpdateVectorStoreRequest")] +[CodeGenType("UpdateVectorStoreRequest")] public partial class VectorStoreModificationOptions { /// Gets or sets the policy that controls when the new vector store will be automatically deleted. diff --git a/src/Custom/VectorStores/VectorStoreStatus.cs b/src/Custom/VectorStores/VectorStoreStatus.cs index 5cd98b5d0..804e04e22 100644 --- a/src/Custom/VectorStores/VectorStoreStatus.cs +++ b/src/Custom/VectorStores/VectorStoreStatus.cs @@ -7,7 +7,7 @@ namespace OpenAI.VectorStores; /// Represents the possible states for a vector store. /// [Experimental("OPENAI001")] -[CodeGenModel("VectorStoreObjectStatus")] +[CodeGenType("VectorStoreObjectStatus")] public enum VectorStoreStatus { /// diff --git a/src/Generated/AssistantClient.RestClient.cs b/src/Generated/AssistantClient.RestClient.cs index aceab6704..fb09295ec 100644 --- a/src/Generated/AssistantClient.RestClient.cs +++ b/src/Generated/AssistantClient.RestClient.cs @@ -14,7 +14,7 @@ public partial class AssistantClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateCreateAssistantRequest(BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCreateAssistantRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -25,13 +25,14 @@ internal PipelineMessage CreateCreateAssistantRequest(BinaryContent content, Req 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 PipelineMessage CreateListAssistantsRequest(int? limit, string order, string after, string before, RequestOptions options) + internal virtual PipelineMessage CreateListAssistantsRequest(int? limit, string order, string after, string before, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -58,11 +59,12 @@ internal PipelineMessage CreateListAssistantsRequest(int? limit, string order, s } request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } - internal PipelineMessage CreateGetAssistantRequest(string assistantId, RequestOptions options) + internal virtual PipelineMessage CreateGetAssistantRequest(string assistantId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -74,11 +76,12 @@ internal PipelineMessage CreateGetAssistantRequest(string assistantId, RequestOp uri.AppendPath(assistantId, true); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } - internal PipelineMessage CreateModifyAssistantRequest(string assistantId, BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateModifyAssistantRequest(string assistantId, BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -90,13 +93,14 @@ internal PipelineMessage CreateModifyAssistantRequest(string assistantId, Binary uri.AppendPath(assistantId, true); 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 PipelineMessage CreateDeleteAssistantRequest(string assistantId, RequestOptions options) + internal virtual PipelineMessage CreateDeleteAssistantRequest(string assistantId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -108,6 +112,7 @@ internal PipelineMessage CreateDeleteAssistantRequest(string assistantId, Reques uri.AppendPath(assistantId, true); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } diff --git a/src/Generated/AssistantClient.cs b/src/Generated/AssistantClient.cs index 8af7745ec..0f6dee07a 100644 --- a/src/Generated/AssistantClient.cs +++ b/src/Generated/AssistantClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.Assistants @@ -11,9 +10,6 @@ namespace OpenAI.Assistants public partial class AssistantClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected AssistantClient() { diff --git a/src/Generated/AudioClient.RestClient.cs b/src/Generated/AudioClient.RestClient.cs index 32414e385..719788acf 100644 --- a/src/Generated/AudioClient.RestClient.cs +++ b/src/Generated/AudioClient.RestClient.cs @@ -14,7 +14,7 @@ public partial class AudioClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateCreateSpeechRequest(BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCreateSpeechRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -31,7 +31,7 @@ internal PipelineMessage CreateCreateSpeechRequest(BinaryContent content, Reques return message; } - internal PipelineMessage CreateCreateTranscriptionRequest(BinaryContent content, string contentType, RequestOptions options) + internal virtual PipelineMessage CreateCreateTranscriptionRequest(BinaryContent content, string contentType, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -48,7 +48,7 @@ internal PipelineMessage CreateCreateTranscriptionRequest(BinaryContent content, return message; } - internal PipelineMessage CreateCreateTranslationRequest(BinaryContent content, string contentType, RequestOptions options) + internal virtual PipelineMessage CreateCreateTranslationRequest(BinaryContent content, string contentType, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/AudioClient.cs b/src/Generated/AudioClient.cs index 1815a1756..a2c56925b 100644 --- a/src/Generated/AudioClient.cs +++ b/src/Generated/AudioClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.Audio @@ -11,9 +10,6 @@ namespace OpenAI.Audio public partial class AudioClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected AudioClient() { diff --git a/src/Generated/BatchClient.RestClient.cs b/src/Generated/BatchClient.RestClient.cs index 5e7c89126..18728659b 100644 --- a/src/Generated/BatchClient.RestClient.cs +++ b/src/Generated/BatchClient.RestClient.cs @@ -13,7 +13,7 @@ public partial class BatchClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateListBatchesRequest(string after, int? limit, RequestOptions options) + internal virtual PipelineMessage CreateListBatchesRequest(string after, int? limit, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/BatchClient.cs b/src/Generated/BatchClient.cs index 48df1fec3..79c66e13f 100644 --- a/src/Generated/BatchClient.cs +++ b/src/Generated/BatchClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.Batch @@ -11,9 +10,6 @@ namespace OpenAI.Batch public partial class BatchClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected BatchClient() { diff --git a/src/Generated/ChatClient.RestClient.cs b/src/Generated/ChatClient.RestClient.cs index 2b61a84e4..cebe4507a 100644 --- a/src/Generated/ChatClient.RestClient.cs +++ b/src/Generated/ChatClient.RestClient.cs @@ -14,7 +14,7 @@ public partial class ChatClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateCreateChatCompletionRequest(BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCreateChatCompletionRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/ChatClient.cs b/src/Generated/ChatClient.cs index 1812c542a..3285bd598 100644 --- a/src/Generated/ChatClient.cs +++ b/src/Generated/ChatClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.Chat @@ -11,9 +10,6 @@ namespace OpenAI.Chat public partial class ChatClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected ChatClient() { diff --git a/src/Generated/EmbeddingClient.RestClient.cs b/src/Generated/EmbeddingClient.RestClient.cs index 5854624b1..ec3641cc6 100644 --- a/src/Generated/EmbeddingClient.RestClient.cs +++ b/src/Generated/EmbeddingClient.RestClient.cs @@ -14,7 +14,7 @@ public partial class EmbeddingClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateCreateEmbeddingRequest(BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCreateEmbeddingRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/EmbeddingClient.cs b/src/Generated/EmbeddingClient.cs index 2e81fb221..4db796369 100644 --- a/src/Generated/EmbeddingClient.cs +++ b/src/Generated/EmbeddingClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.Embeddings @@ -11,9 +10,6 @@ namespace OpenAI.Embeddings public partial class EmbeddingClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected EmbeddingClient() { diff --git a/src/Generated/FineTuningClient.RestClient.cs b/src/Generated/FineTuningClient.RestClient.cs index 190bee083..2997b3f6c 100644 --- a/src/Generated/FineTuningClient.RestClient.cs +++ b/src/Generated/FineTuningClient.RestClient.cs @@ -13,7 +13,7 @@ public partial class FineTuningClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateListPaginatedFineTuningJobsRequest(string after, int? limit, RequestOptions options) + internal virtual PipelineMessage CreateListPaginatedFineTuningJobsRequest(string after, int? limit, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -36,7 +36,7 @@ internal PipelineMessage CreateListPaginatedFineTuningJobsRequest(string after, return message; } - internal PipelineMessage CreateCancelFineTuningJobRequest(string fineTuningJobId, RequestOptions options) + internal virtual PipelineMessage CreateCancelFineTuningJobRequest(string fineTuningJobId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -53,7 +53,7 @@ internal PipelineMessage CreateCancelFineTuningJobRequest(string fineTuningJobId return message; } - internal PipelineMessage CreateListFineTuningJobCheckpointsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) + internal virtual PipelineMessage CreateListFineTuningJobCheckpointsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -78,7 +78,7 @@ internal PipelineMessage CreateListFineTuningJobCheckpointsRequest(string fineTu return message; } - internal PipelineMessage CreateListFineTuningEventsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) + internal virtual PipelineMessage CreateListFineTuningEventsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/FineTuningClient.cs b/src/Generated/FineTuningClient.cs index d7df5cd35..28be3ec06 100644 --- a/src/Generated/FineTuningClient.cs +++ b/src/Generated/FineTuningClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.FineTuning @@ -11,9 +10,6 @@ namespace OpenAI.FineTuning public partial class FineTuningClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected FineTuningClient() { diff --git a/src/Generated/ImageClient.RestClient.cs b/src/Generated/ImageClient.RestClient.cs index 7118e55c4..51efb2d3c 100644 --- a/src/Generated/ImageClient.RestClient.cs +++ b/src/Generated/ImageClient.RestClient.cs @@ -14,7 +14,7 @@ public partial class ImageClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateCreateImageRequest(BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCreateImageRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -31,7 +31,7 @@ internal PipelineMessage CreateCreateImageRequest(BinaryContent content, Request return message; } - internal PipelineMessage CreateCreateImageEditRequest(BinaryContent content, string contentType, RequestOptions options) + internal virtual PipelineMessage CreateCreateImageEditRequest(BinaryContent content, string contentType, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -48,7 +48,7 @@ internal PipelineMessage CreateCreateImageEditRequest(BinaryContent content, str return message; } - internal PipelineMessage CreateCreateImageVariationRequest(BinaryContent content, string contentType, RequestOptions options) + internal virtual PipelineMessage CreateCreateImageVariationRequest(BinaryContent content, string contentType, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/ImageClient.cs b/src/Generated/ImageClient.cs index baaaa6c0e..e5842c934 100644 --- a/src/Generated/ImageClient.cs +++ b/src/Generated/ImageClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.Images @@ -11,9 +10,6 @@ namespace OpenAI.Images public partial class ImageClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected ImageClient() { diff --git a/src/Generated/Internal/CodeGenMemberAttribute.cs b/src/Generated/Internal/CodeGenMemberAttribute.cs new file mode 100644 index 000000000..8f249d3fd --- /dev/null +++ b/src/Generated/Internal/CodeGenMemberAttribute.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; + +namespace OpenAI +{ + [AttributeUsage((AttributeTargets.Property | AttributeTargets.Field))] + internal partial class CodeGenMemberAttribute : CodeGenTypeAttribute + { + public CodeGenMemberAttribute(string originalName) : base(originalName) + { + } + } +} diff --git a/src/Generated/Internal/CodeGenSerializationAttribute.cs b/src/Generated/Internal/CodeGenSerializationAttribute.cs new file mode 100644 index 000000000..b46b91845 --- /dev/null +++ b/src/Generated/Internal/CodeGenSerializationAttribute.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; + +namespace OpenAI +{ + [AttributeUsage((AttributeTargets.Class | AttributeTargets.Struct), AllowMultiple = true, Inherited = true)] + internal partial class CodeGenSerializationAttribute : Attribute + { + public CodeGenSerializationAttribute(string propertyName) + { + PropertyName = propertyName; + } + + public CodeGenSerializationAttribute(string propertyName, string propertySerializationName) + { + PropertyName = propertyName; + PropertySerializationName = propertySerializationName; + } + + public string PropertyName { get; } + + public string PropertySerializationName { get; set; } + + public string SerializationValueHook { get; set; } + + public string DeserializationValueHook { get; set; } + } +} diff --git a/src/Generated/Internal/CodeGenSuppressAttribute.cs b/src/Generated/Internal/CodeGenSuppressAttribute.cs new file mode 100644 index 000000000..3f1011b4c --- /dev/null +++ b/src/Generated/Internal/CodeGenSuppressAttribute.cs @@ -0,0 +1,22 @@ +// + +#nullable disable + +using System; + +namespace OpenAI +{ + [AttributeUsage((AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Struct), AllowMultiple = true)] + internal partial class CodeGenSuppressAttribute : Attribute + { + public CodeGenSuppressAttribute(string member, params Type[] parameters) + { + Member = member; + Parameters = parameters; + } + + public string Member { get; } + + public Type[] Parameters { get; } + } +} diff --git a/src/Generated/Internal/CodeGenTypeAttribute.cs b/src/Generated/Internal/CodeGenTypeAttribute.cs new file mode 100644 index 000000000..cbaa03847 --- /dev/null +++ b/src/Generated/Internal/CodeGenTypeAttribute.cs @@ -0,0 +1,19 @@ +// + +#nullable disable + +using System; + +namespace OpenAI +{ + [AttributeUsage((AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Struct))] + internal partial class CodeGenTypeAttribute : Attribute + { + public CodeGenTypeAttribute(string originalName) + { + OriginalName = originalName; + } + + public string OriginalName { get; } + } +} diff --git a/src/Generated/Internal/MultiPartFormDataBinaryContent.cs b/src/Generated/Internal/MultiPartFormDataBinaryContent.cs new file mode 100644 index 000000000..945fc05aa --- /dev/null +++ b/src/Generated/Internal/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/src/Generated/InternalAssistantMessageClient.RestClient.cs b/src/Generated/InternalAssistantMessageClient.RestClient.cs index ee4043f1a..d095f507b 100644 --- a/src/Generated/InternalAssistantMessageClient.RestClient.cs +++ b/src/Generated/InternalAssistantMessageClient.RestClient.cs @@ -14,7 +14,7 @@ internal partial class InternalAssistantMessageClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateCreateMessageRequest(string threadId, BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCreateMessageRequest(string threadId, BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -27,13 +27,14 @@ internal PipelineMessage CreateCreateMessageRequest(string threadId, BinaryConte uri.AppendPath("/messages", 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 PipelineMessage CreateListMessagesRequest(string threadId, int? limit, string order, string after, string before, RequestOptions options) + internal virtual PipelineMessage CreateListMessagesRequest(string threadId, int? limit, string order, string after, string before, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -62,11 +63,12 @@ internal PipelineMessage CreateListMessagesRequest(string threadId, int? limit, } request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } - internal PipelineMessage CreateGetMessageRequest(string threadId, string messageId, RequestOptions options) + internal virtual PipelineMessage CreateGetMessageRequest(string threadId, string messageId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -80,11 +82,12 @@ internal PipelineMessage CreateGetMessageRequest(string threadId, string message uri.AppendPath(messageId, true); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } - internal PipelineMessage CreateModifyMessageRequest(string threadId, string messageId, BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateModifyMessageRequest(string threadId, string messageId, BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -98,13 +101,14 @@ internal PipelineMessage CreateModifyMessageRequest(string threadId, string mess uri.AppendPath(messageId, true); 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 PipelineMessage CreateDeleteMessageRequest(string threadId, string messageId, RequestOptions options) + internal virtual PipelineMessage CreateDeleteMessageRequest(string threadId, string messageId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -118,6 +122,7 @@ internal PipelineMessage CreateDeleteMessageRequest(string threadId, string mess uri.AppendPath(messageId, true); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } diff --git a/src/Generated/InternalAssistantMessageClient.cs b/src/Generated/InternalAssistantMessageClient.cs index 803c34566..4d1925265 100644 --- a/src/Generated/InternalAssistantMessageClient.cs +++ b/src/Generated/InternalAssistantMessageClient.cs @@ -13,14 +13,17 @@ namespace OpenAI.Assistants internal partial class InternalAssistantMessageClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected InternalAssistantMessageClient() { } + internal InternalAssistantMessageClient(ClientPipeline pipeline, Uri endpoint) + { + _endpoint = endpoint; + Pipeline = pipeline; + } + 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) diff --git a/src/Generated/InternalAssistantRunClient.RestClient.cs b/src/Generated/InternalAssistantRunClient.RestClient.cs index d0e3a535a..ae66bbf15 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 PipelineMessage CreateCreateThreadAndRunRequest(BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCreateThreadAndRunRequest(BinaryContent content, string accept, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -25,14 +25,15 @@ internal PipelineMessage CreateCreateThreadAndRunRequest(BinaryContent content, uri.Reset(_endpoint); uri.AppendPath("/threads/runs", false); request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); + request.Headers.Set("Accept", accept); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); request.Headers.Set("Content-Type", "application/json"); request.Content = content; message.Apply(options); return message; } - internal PipelineMessage CreateCreateRunRequest(string threadId, BinaryContent content, IEnumerable include, RequestOptions options) + internal virtual PipelineMessage CreateCreateRunRequest(string threadId, BinaryContent content, string accept, IEnumerable include, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -48,14 +49,15 @@ internal PipelineMessage CreateCreateRunRequest(string threadId, BinaryContent c uri.AppendQueryDelimited("include[]", include, ",", null, true); } request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); + request.Headers.Set("Accept", accept); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); request.Headers.Set("Content-Type", "application/json"); request.Content = content; message.Apply(options); return message; } - internal PipelineMessage CreateListRunsRequest(string threadId, int? limit, string order, string after, string before, RequestOptions options) + internal virtual PipelineMessage CreateListRunsRequest(string threadId, int? limit, string order, string after, string before, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -84,11 +86,12 @@ internal PipelineMessage CreateListRunsRequest(string threadId, int? limit, stri } request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } - internal PipelineMessage CreateGetRunRequest(string threadId, string runId, RequestOptions options) + internal virtual PipelineMessage CreateGetRunRequest(string threadId, string runId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -102,11 +105,12 @@ internal PipelineMessage CreateGetRunRequest(string threadId, string runId, Requ uri.AppendPath(runId, true); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } - internal PipelineMessage CreateModifyRunRequest(string threadId, string runId, BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateModifyRunRequest(string threadId, string runId, BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -120,13 +124,14 @@ internal PipelineMessage CreateModifyRunRequest(string threadId, string runId, B uri.AppendPath(runId, true); 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 PipelineMessage CreateCancelRunRequest(string threadId, string runId, RequestOptions options) + internal virtual PipelineMessage CreateCancelRunRequest(string threadId, string runId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -141,11 +146,12 @@ internal PipelineMessage CreateCancelRunRequest(string threadId, string runId, R uri.AppendPath("/cancel", false); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } - internal PipelineMessage CreateSubmitToolOutputsToRunRequest(string threadId, string runId, BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateSubmitToolOutputsToRunRequest(string threadId, string runId, BinaryContent content, string accept, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -159,14 +165,15 @@ internal PipelineMessage CreateSubmitToolOutputsToRunRequest(string threadId, st uri.AppendPath(runId, true); uri.AppendPath("/submit_tool_outputs", false); request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); + request.Headers.Set("Accept", accept); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); request.Headers.Set("Content-Type", "application/json"); request.Content = content; message.Apply(options); return message; } - internal PipelineMessage CreateListRunStepsRequest(string threadId, string runId, int? limit, string order, string after, string before, IEnumerable include, RequestOptions options) + internal virtual PipelineMessage CreateListRunStepsRequest(string threadId, string runId, int? limit, string order, string after, string before, IEnumerable include, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -201,11 +208,12 @@ internal PipelineMessage CreateListRunStepsRequest(string threadId, string runId } request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } - internal PipelineMessage CreateGetRunStepRequest(string threadId, string runId, string stepId, IEnumerable include, RequestOptions options) + internal virtual PipelineMessage CreateGetRunStepRequest(string threadId, string runId, string stepId, IEnumerable include, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -225,6 +233,7 @@ internal PipelineMessage CreateGetRunStepRequest(string threadId, string runId, } request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } diff --git a/src/Generated/InternalAssistantRunClient.cs b/src/Generated/InternalAssistantRunClient.cs index 84636685d..d976b6417 100644 --- a/src/Generated/InternalAssistantRunClient.cs +++ b/src/Generated/InternalAssistantRunClient.cs @@ -13,14 +13,17 @@ namespace OpenAI.Assistants internal partial class InternalAssistantRunClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected InternalAssistantRunClient() { } + internal InternalAssistantRunClient(ClientPipeline pipeline, Uri endpoint) + { + _endpoint = endpoint; + Pipeline = pipeline; + } + 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) diff --git a/src/Generated/InternalAssistantThreadClient.RestClient.cs b/src/Generated/InternalAssistantThreadClient.RestClient.cs index 1064c666e..7608eceaa 100644 --- a/src/Generated/InternalAssistantThreadClient.RestClient.cs +++ b/src/Generated/InternalAssistantThreadClient.RestClient.cs @@ -14,7 +14,7 @@ internal partial class InternalAssistantThreadClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateCreateThreadRequest(BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCreateThreadRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -25,13 +25,14 @@ internal PipelineMessage CreateCreateThreadRequest(BinaryContent content, Reques uri.AppendPath("/threads", 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 PipelineMessage CreateGetThreadRequest(string threadId, RequestOptions options) + internal virtual PipelineMessage CreateGetThreadRequest(string threadId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -43,11 +44,12 @@ internal PipelineMessage CreateGetThreadRequest(string threadId, RequestOptions uri.AppendPath(threadId, true); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } - internal PipelineMessage CreateModifyThreadRequest(string threadId, BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateModifyThreadRequest(string threadId, BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -59,13 +61,14 @@ internal PipelineMessage CreateModifyThreadRequest(string threadId, BinaryConten uri.AppendPath(threadId, true); 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 PipelineMessage CreateDeleteThreadRequest(string threadId, RequestOptions options) + internal virtual PipelineMessage CreateDeleteThreadRequest(string threadId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -77,6 +80,7 @@ internal PipelineMessage CreateDeleteThreadRequest(string threadId, RequestOptio uri.AppendPath(threadId, true); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } diff --git a/src/Generated/InternalAssistantThreadClient.cs b/src/Generated/InternalAssistantThreadClient.cs index 6981b71d5..9aa524e63 100644 --- a/src/Generated/InternalAssistantThreadClient.cs +++ b/src/Generated/InternalAssistantThreadClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.Assistants @@ -11,14 +10,17 @@ namespace OpenAI.Assistants internal partial class InternalAssistantThreadClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected InternalAssistantThreadClient() { } + internal InternalAssistantThreadClient(ClientPipeline pipeline, Uri endpoint) + { + _endpoint = endpoint; + Pipeline = pipeline; + } + public ClientPipeline Pipeline { get; } } } diff --git a/src/Generated/InternalUploadsClient.RestClient.cs b/src/Generated/InternalUploadsClient.RestClient.cs index e107394fd..37ec553a5 100644 --- a/src/Generated/InternalUploadsClient.RestClient.cs +++ b/src/Generated/InternalUploadsClient.RestClient.cs @@ -14,7 +14,7 @@ internal partial class InternalUploadsClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateCreateUploadRequest(BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCreateUploadRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -31,7 +31,7 @@ internal PipelineMessage CreateCreateUploadRequest(BinaryContent content, Reques return message; } - internal PipelineMessage CreateAddUploadPartRequest(string uploadId, BinaryContent content, string contentType, RequestOptions options) + internal virtual PipelineMessage CreateAddUploadPartRequest(string uploadId, BinaryContent content, string contentType, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -50,7 +50,7 @@ internal PipelineMessage CreateAddUploadPartRequest(string uploadId, BinaryConte return message; } - internal PipelineMessage CreateCompleteUploadRequest(string uploadId, BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCompleteUploadRequest(string uploadId, BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -69,7 +69,7 @@ internal PipelineMessage CreateCompleteUploadRequest(string uploadId, BinaryCont return message; } - internal PipelineMessage CreateCancelUploadRequest(string uploadId, RequestOptions options) + internal virtual PipelineMessage CreateCancelUploadRequest(string uploadId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/InternalUploadsClient.cs b/src/Generated/InternalUploadsClient.cs index 79a2890df..63059cd66 100644 --- a/src/Generated/InternalUploadsClient.cs +++ b/src/Generated/InternalUploadsClient.cs @@ -14,14 +14,17 @@ namespace OpenAI.Files internal partial class InternalUploadsClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected InternalUploadsClient() { } + internal InternalUploadsClient(ClientPipeline pipeline, Uri endpoint) + { + _endpoint = endpoint; + Pipeline = pipeline; + } + public ClientPipeline Pipeline { get; } public virtual ClientResult CreateUpload(BinaryContent content, RequestOptions options = null) diff --git a/src/Generated/LegacyCompletionClient.RestClient.cs b/src/Generated/LegacyCompletionClient.RestClient.cs index 2ef638da5..e4a52c7b5 100644 --- a/src/Generated/LegacyCompletionClient.RestClient.cs +++ b/src/Generated/LegacyCompletionClient.RestClient.cs @@ -14,7 +14,7 @@ internal partial class LegacyCompletionClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateCreateCompletionRequest(BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCreateCompletionRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/LegacyCompletionClient.cs b/src/Generated/LegacyCompletionClient.cs index c2fe216ce..06e2f1fb7 100644 --- a/src/Generated/LegacyCompletionClient.cs +++ b/src/Generated/LegacyCompletionClient.cs @@ -14,9 +14,6 @@ namespace OpenAI.LegacyCompletions internal partial class LegacyCompletionClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected LegacyCompletionClient() { diff --git a/src/Generated/Models/AcceptHeaderValue.cs b/src/Generated/Models/AcceptHeaderValue.cs new file mode 100644 index 000000000..ce043dc26 --- /dev/null +++ b/src/Generated/Models/AcceptHeaderValue.cs @@ -0,0 +1,43 @@ +// + +#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 00bb5cd22..f94ab4875 100644 --- a/src/Generated/Models/Assistant.Serialization.cs +++ b/src/Generated/Models/Assistant.Serialization.cs @@ -43,7 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("name") != true) { - if (Name != null) + if (Optional.IsDefined(Name)) { writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); @@ -55,7 +55,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("description") != true) { - if (Description != null) + if (Optional.IsDefined(Description)) { writer.WritePropertyName("description"u8); writer.WriteStringValue(Description); @@ -72,7 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("instructions") != true) { - if (Instructions != null) + if (Optional.IsDefined(Instructions)) { writer.WritePropertyName("instructions"u8); writer.WriteStringValue(Instructions); @@ -82,7 +82,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("instructions"u8); } } - if (true && _additionalBinaryDataProperties?.ContainsKey("tools") != true) + if (_additionalBinaryDataProperties?.ContainsKey("tools") != true) { writer.WritePropertyName("tools"u8); writer.WriteStartArray(); @@ -94,19 +94,12 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(ToolResources) && _additionalBinaryDataProperties?.ContainsKey("tool_resources") != true) { - if (ToolResources != null) - { - writer.WritePropertyName("tool_resources"u8); - writer.WriteObjectValue(ToolResources, options); - } - else - { - writer.WriteNull("toolResources"u8); - } + writer.WritePropertyName("tool_resources"u8); + writer.WriteObjectValue(ToolResources, options); } - if (true && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) { writer.WritePropertyName("metadata"u8); writer.WriteStartObject(); @@ -129,46 +122,25 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) { - if (Temperature != null) - { - writer.WritePropertyName("temperature"u8); - writer.WriteNumberValue(Temperature.Value); - } - else - { - writer.WriteNull("temperature"u8); - } + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); } if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) { - if (ResponseFormat != null) - { - writer.WritePropertyName("response_format"u8); - writer.WriteObjectValue(ResponseFormat, options); - } - else - { - writer.WriteNull("responseFormat"u8); - } + writer.WritePropertyName("response_format"u8); + writer.WriteObjectValue(ResponseFormat, options); } if (Optional.IsDefined(NucleusSamplingFactor) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) { - if (NucleusSamplingFactor != null) - { - writer.WritePropertyName("top_p"u8); - writer.WriteNumberValue(NucleusSamplingFactor.Value); - } - else - { - writer.WriteNull("topP"u8); - } + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(NucleusSamplingFactor.Value); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -346,10 +318,7 @@ internal static Assistant DeserializeAssistant(JsonElement element, ModelReaderW nucleusSamplingFactor = prop.Value.GetSingle(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new Assistant( id, diff --git a/src/Generated/Models/Assistant.cs b/src/Generated/Models/Assistant.cs index 91f89ae97..f5c71e82e 100644 --- a/src/Generated/Models/Assistant.cs +++ b/src/Generated/Models/Assistant.cs @@ -36,7 +36,7 @@ internal Assistant(string id, DateTimeOffset createdAt, string name, string desc ToolResources = toolResources; Metadata = metadata; Temperature = temperature; - this.Object = @object; + Object = @object; ResponseFormat = responseFormat; NucleusSamplingFactor = nucleusSamplingFactor; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/AssistantChatMessage.Serialization.cs b/src/Generated/Models/AssistantChatMessage.Serialization.cs index 529601ef0..b8e47bbaa 100644 --- a/src/Generated/Models/AssistantChatMessage.Serialization.cs +++ b/src/Generated/Models/AssistantChatMessage.Serialization.cs @@ -23,15 +23,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri base.JsonModelWriteCore(writer, options); if (Optional.IsDefined(Refusal) && _additionalBinaryDataProperties?.ContainsKey("refusal") != true) { - if (Refusal != null) - { - writer.WritePropertyName("refusal"u8); - writer.WriteStringValue(Refusal); - } - else - { - writer.WriteNull("refusal"u8); - } + writer.WritePropertyName("refusal"u8); + writer.WriteStringValue(Refusal); } if (Optional.IsDefined(ParticipantName) && _additionalBinaryDataProperties?.ContainsKey("name") != true) { @@ -50,27 +43,13 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri } if (Optional.IsDefined(FunctionCall) && _additionalBinaryDataProperties?.ContainsKey("function_call") != true) { - if (FunctionCall != null) - { - writer.WritePropertyName("function_call"u8); - writer.WriteObjectValue(FunctionCall, options); - } - else - { - writer.WriteNull("functionCall"u8); - } + writer.WritePropertyName("function_call"u8); + writer.WriteObjectValue(FunctionCall, options); } if (Optional.IsDefined(OutputAudioReference) && _additionalBinaryDataProperties?.ContainsKey("audio") != true) { - if (OutputAudioReference != null) - { - writer.WritePropertyName("audio"u8); - writer.WriteObjectValue(OutputAudioReference, options); - } - else - { - writer.WriteNull("audio"u8); - } + writer.WritePropertyName("audio"u8); + writer.WriteObjectValue(OutputAudioReference, options); } } @@ -94,7 +73,7 @@ internal static AssistantChatMessage DeserializeAssistantChatMessage(JsonElement return null; } ChatMessageContent content = default; - Chat.ChatMessageRole role = default; + ChatMessageRole role = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string refusal = default; string participantName = default; @@ -162,14 +141,10 @@ internal static AssistantChatMessage DeserializeAssistantChatMessage(JsonElement outputAudioReference = ChatOutputAudioReference.DeserializeChatOutputAudioReference(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - // CUSTOM: Initialize Content collection property. return new AssistantChatMessage( - content ?? new ChatMessageContent(), + content, role, additionalBinaryDataProperties, refusal, diff --git a/src/Generated/Models/AssistantChatMessage.cs b/src/Generated/Models/AssistantChatMessage.cs index 0fd143349..ef3c5688f 100644 --- a/src/Generated/Models/AssistantChatMessage.cs +++ b/src/Generated/Models/AssistantChatMessage.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat { public partial class AssistantChatMessage : ChatMessage { - internal AssistantChatMessage(ChatMessageContent content, Chat.ChatMessageRole role, IDictionary additionalBinaryDataProperties, string refusal, string participantName, IList toolCalls, ChatFunctionCall functionCall, ChatOutputAudioReference outputAudioReference) : base(content, role, additionalBinaryDataProperties) + internal AssistantChatMessage(ChatMessageContent content, ChatMessageRole role, IDictionary additionalBinaryDataProperties, string refusal, string participantName, IList toolCalls, ChatFunctionCall functionCall, ChatOutputAudioReference outputAudioReference) : base(content, role, additionalBinaryDataProperties) { Refusal = refusal; ParticipantName = participantName; diff --git a/src/Generated/Models/AssistantCollectionOrder.cs b/src/Generated/Models/AssistantCollectionOrder.cs deleted file mode 100644 index 41d2f8d50..000000000 --- a/src/Generated/Models/AssistantCollectionOrder.cs +++ /dev/null @@ -1,40 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - public readonly partial struct AssistantCollectionOrder : IEquatable - { - private readonly string _value; - private const string AscValue = "asc"; - private const string DescValue = "desc"; - - public AssistantCollectionOrder(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static bool operator ==(AssistantCollectionOrder left, AssistantCollectionOrder right) => left.Equals(right); - - public static bool operator !=(AssistantCollectionOrder left, AssistantCollectionOrder right) => !left.Equals(right); - - public static implicit operator AssistantCollectionOrder(string value) => new AssistantCollectionOrder(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is AssistantCollectionOrder other && Equals(other); - - public bool Equals(AssistantCollectionOrder 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/AssistantCreationOptions.Serialization.cs b/src/Generated/Models/AssistantCreationOptions.Serialization.cs index a6c9bb9e7..0af1b78b6 100644 --- a/src/Generated/Models/AssistantCreationOptions.Serialization.cs +++ b/src/Generated/Models/AssistantCreationOptions.Serialization.cs @@ -8,6 +8,7 @@ using System.Collections.Generic; using System.Text.Json; using OpenAI; +using OpenAI.Chat; namespace OpenAI.Assistants { @@ -29,39 +30,18 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Name) && _additionalBinaryDataProperties?.ContainsKey("name") != true) { - if (Name != null) - { - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - } - else - { - writer.WriteNull("name"u8); - } + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); } if (Optional.IsDefined(Description) && _additionalBinaryDataProperties?.ContainsKey("description") != true) { - if (Description != null) - { - writer.WritePropertyName("description"u8); - writer.WriteStringValue(Description); - } - else - { - writer.WriteNull("description"u8); - } + writer.WritePropertyName("description"u8); + writer.WriteStringValue(Description); } if (Optional.IsDefined(Instructions) && _additionalBinaryDataProperties?.ContainsKey("instructions") != true) { - if (Instructions != null) - { - writer.WritePropertyName("instructions"u8); - writer.WriteStringValue(Instructions); - } - else - { - writer.WriteNull("instructions"u8); - } + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(Instructions); } if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) { @@ -81,15 +61,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) { - if (Temperature != null) - { - writer.WritePropertyName("temperature"u8); - writer.WriteNumberValue(Temperature.Value); - } - else - { - writer.WriteNull("temperature"u8); - } + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); } if (_additionalBinaryDataProperties?.ContainsKey("model") != true) { @@ -108,41 +81,25 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(ToolResources) && _additionalBinaryDataProperties?.ContainsKey("tool_resources") != true) { - if (ToolResources != null) - { - writer.WritePropertyName("tool_resources"u8); - writer.WriteObjectValue(ToolResources, options); - } - else - { - writer.WriteNull("toolResources"u8); - } + writer.WritePropertyName("tool_resources"u8); + writer.WriteObjectValue(ToolResources, options); } if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) { - if (ResponseFormat != null) - { - writer.WritePropertyName("response_format"u8); - writer.WriteObjectValue(ResponseFormat, options); - } - else - { - writer.WriteNull("responseFormat"u8); - } + writer.WritePropertyName("response_format"u8); + writer.WriteObjectValue(ResponseFormat, options); } if (Optional.IsDefined(NucleusSamplingFactor) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) { - if (NucleusSamplingFactor != null) - { - writer.WritePropertyName("top_p"u8); - writer.WriteNumberValue(NucleusSamplingFactor.Value); - } - else - { - writer.WriteNull("topP"u8); - } + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(NucleusSamplingFactor.Value); + } + if (Optional.IsDefined(ReasoningEffortLevel) && _additionalBinaryDataProperties?.ContainsKey("reasoning_effort") != true) + { + writer.WritePropertyName("reasoning_effort"u8); + writer.WriteStringValue(ReasoningEffortLevel.Value.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -192,6 +149,7 @@ internal static AssistantCreationOptions DeserializeAssistantCreationOptions(Jso ToolResources toolResources = default; AssistantResponseFormat responseFormat = default; float? nucleusSamplingFactor = default; + ChatReasoningEffortLevel? reasoningEffortLevel = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -305,10 +263,17 @@ internal static AssistantCreationOptions DeserializeAssistantCreationOptions(Jso nucleusSamplingFactor = prop.Value.GetSingle(); continue; } - if (true) + if (prop.NameEquals("reasoning_effort"u8)) { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + if (prop.Value.ValueKind == JsonValueKind.Null) + { + reasoningEffortLevel = null; + continue; + } + reasoningEffortLevel = new ChatReasoningEffortLevel(prop.Value.GetString()); + continue; } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AssistantCreationOptions( name, @@ -321,6 +286,7 @@ internal static AssistantCreationOptions DeserializeAssistantCreationOptions(Jso toolResources, responseFormat, nucleusSamplingFactor, + reasoningEffortLevel, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/AssistantCreationOptions.cs b/src/Generated/Models/AssistantCreationOptions.cs index 0a1f7c5dc..86a5307cf 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.Chat; namespace OpenAI.Assistants { @@ -11,7 +12,7 @@ public partial class AssistantCreationOptions { private protected IDictionary _additionalBinaryDataProperties; - internal AssistantCreationOptions(string name, string description, string instructions, IDictionary metadata, float? temperature, string model, IList tools, ToolResources toolResources, AssistantResponseFormat responseFormat, float? nucleusSamplingFactor, IDictionary additionalBinaryDataProperties) + 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) { Name = name; Description = description; @@ -23,6 +24,7 @@ internal AssistantCreationOptions(string name, string description, string instru ToolResources = toolResources; ResponseFormat = responseFormat; NucleusSamplingFactor = nucleusSamplingFactor; + ReasoningEffortLevel = reasoningEffortLevel; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/AssistantDeletionResult.Serialization.cs b/src/Generated/Models/AssistantDeletionResult.Serialization.cs index d6203fb79..82226bb17 100644 --- a/src/Generated/Models/AssistantDeletionResult.Serialization.cs +++ b/src/Generated/Models/AssistantDeletionResult.Serialization.cs @@ -44,9 +44,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static AssistantDeletionResult DeserializeAssistantDeletionResult(JsonE @object = new InternalDeleteAssistantResponseObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AssistantDeletionResult(deleted, assistantId, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/AssistantDeletionResult.cs b/src/Generated/Models/AssistantDeletionResult.cs index fbd0d0574..73bc08fa0 100644 --- a/src/Generated/Models/AssistantDeletionResult.cs +++ b/src/Generated/Models/AssistantDeletionResult.cs @@ -21,7 +21,7 @@ internal AssistantDeletionResult(bool deleted, string assistantId, InternalDelet { Deleted = deleted; AssistantId = assistantId; - this.Object = @object; + Object = @object; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/AssistantModificationOptions.Serialization.cs b/src/Generated/Models/AssistantModificationOptions.Serialization.cs index 7212963c9..3aaf61c60 100644 --- a/src/Generated/Models/AssistantModificationOptions.Serialization.cs +++ b/src/Generated/Models/AssistantModificationOptions.Serialization.cs @@ -8,6 +8,7 @@ using System.Collections.Generic; using System.Text.Json; using OpenAI; +using OpenAI.Chat; namespace OpenAI.Assistants { @@ -29,39 +30,18 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Name) && _additionalBinaryDataProperties?.ContainsKey("name") != true) { - if (Name != null) - { - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - } - else - { - writer.WriteNull("name"u8); - } + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); } if (Optional.IsDefined(Description) && _additionalBinaryDataProperties?.ContainsKey("description") != true) { - if (Description != null) - { - writer.WritePropertyName("description"u8); - writer.WriteStringValue(Description); - } - else - { - writer.WriteNull("description"u8); - } + writer.WritePropertyName("description"u8); + writer.WriteStringValue(Description); } if (Optional.IsDefined(Instructions) && _additionalBinaryDataProperties?.ContainsKey("instructions") != true) { - if (Instructions != null) - { - writer.WritePropertyName("instructions"u8); - writer.WriteStringValue(Instructions); - } - else - { - writer.WriteNull("instructions"u8); - } + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(Instructions); } if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) { @@ -81,15 +61,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) { - if (Temperature != null) - { - writer.WritePropertyName("temperature"u8); - writer.WriteNumberValue(Temperature.Value); - } - else - { - writer.WriteNull("temperature"u8); - } + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); } if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) { @@ -108,41 +81,25 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(ToolResources) && _additionalBinaryDataProperties?.ContainsKey("tool_resources") != true) { - if (ToolResources != null) - { - writer.WritePropertyName("tool_resources"u8); - writer.WriteObjectValue(ToolResources, options); - } - else - { - writer.WriteNull("toolResources"u8); - } + writer.WritePropertyName("tool_resources"u8); + writer.WriteObjectValue(ToolResources, options); } if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) { - if (ResponseFormat != null) - { - writer.WritePropertyName("response_format"u8); - writer.WriteObjectValue(ResponseFormat, options); - } - else - { - writer.WriteNull("responseFormat"u8); - } + writer.WritePropertyName("response_format"u8); + writer.WriteObjectValue(ResponseFormat, options); } if (Optional.IsDefined(NucleusSamplingFactor) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) { - if (NucleusSamplingFactor != null) - { - writer.WritePropertyName("top_p"u8); - writer.WriteNumberValue(NucleusSamplingFactor.Value); - } - else - { - writer.WriteNull("topP"u8); - } + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(NucleusSamplingFactor.Value); + } + if (Optional.IsDefined(ReasoningEffortLevel) && _additionalBinaryDataProperties?.ContainsKey("reasoning_effort") != true) + { + writer.WritePropertyName("reasoning_effort"u8); + writer.WriteStringValue(ReasoningEffortLevel.Value.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -192,6 +149,7 @@ internal static AssistantModificationOptions DeserializeAssistantModificationOpt ToolResources toolResources = default; AssistantResponseFormat responseFormat = default; float? nucleusSamplingFactor = default; + ChatReasoningEffortLevel? reasoningEffortLevel = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -305,10 +263,17 @@ internal static AssistantModificationOptions DeserializeAssistantModificationOpt nucleusSamplingFactor = prop.Value.GetSingle(); continue; } - if (true) + if (prop.NameEquals("reasoning_effort"u8)) { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + if (prop.Value.ValueKind == JsonValueKind.Null) + { + reasoningEffortLevel = null; + continue; + } + reasoningEffortLevel = new ChatReasoningEffortLevel(prop.Value.GetString()); + continue; } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AssistantModificationOptions( name, @@ -321,6 +286,7 @@ internal static AssistantModificationOptions DeserializeAssistantModificationOpt toolResources, responseFormat, nucleusSamplingFactor, + reasoningEffortLevel, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/AssistantModificationOptions.cs b/src/Generated/Models/AssistantModificationOptions.cs index c9d4cd4c5..ddbda2bb9 100644 --- a/src/Generated/Models/AssistantModificationOptions.cs +++ b/src/Generated/Models/AssistantModificationOptions.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using OpenAI; +using OpenAI.Chat; namespace OpenAI.Assistants { @@ -18,7 +19,7 @@ public AssistantModificationOptions() 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, IDictionary additionalBinaryDataProperties) + 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) { Name = name; Description = description; @@ -30,6 +31,7 @@ internal AssistantModificationOptions(string name, string description, string in ToolResources = toolResources; ResponseFormat = responseFormat; NucleusSamplingFactor = nucleusSamplingFactor; + ReasoningEffortLevel = reasoningEffortLevel; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/AssistantResponseFormat.Serialization.cs b/src/Generated/Models/AssistantResponseFormat.Serialization.cs index 8b20f6949..cbad6d8a5 100644 --- a/src/Generated/Models/AssistantResponseFormat.Serialization.cs +++ b/src/Generated/Models/AssistantResponseFormat.Serialization.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { - [PersistableModelProxy(typeof(InternalUnknownAssistantResponseFormat))] - public abstract partial class AssistantResponseFormat : IJsonModel + public partial class AssistantResponseFormat : IJsonModel { internal AssistantResponseFormat() { @@ -29,7 +28,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -58,7 +57,7 @@ protected virtual AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return AssistantResponseFormat.DeserializeAssistantResponseFormat(document.RootElement, options); + return DeserializeAssistantResponseFormat(document.RootElement, options); } protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) @@ -81,7 +80,7 @@ protected virtual AssistantResponseFormat PersistableModelCreateCore(BinaryData case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return AssistantResponseFormat.DeserializeAssistantResponseFormat(document.RootElement, options); + return DeserializeAssistantResponseFormat(document.RootElement, options); } default: throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support reading '{options.Format}' format."); @@ -101,7 +100,7 @@ public static explicit operator AssistantResponseFormat(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return AssistantResponseFormat.DeserializeAssistantResponseFormat(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeAssistantResponseFormat(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/AssistantResponseFormat.cs b/src/Generated/Models/AssistantResponseFormat.cs index d10278603..77a152a39 100644 --- a/src/Generated/Models/AssistantResponseFormat.cs +++ b/src/Generated/Models/AssistantResponseFormat.cs @@ -7,7 +7,7 @@ namespace OpenAI.Assistants { - public abstract partial class AssistantResponseFormat + public partial class AssistantResponseFormat { private protected IDictionary _additionalBinaryDataProperties; diff --git a/src/Generated/Models/AssistantThread.Serialization.cs b/src/Generated/Models/AssistantThread.Serialization.cs index d2c44e115..5d7239b66 100644 --- a/src/Generated/Models/AssistantThread.Serialization.cs +++ b/src/Generated/Models/AssistantThread.Serialization.cs @@ -41,9 +41,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("created_at"u8); writer.WriteNumberValue(CreatedAt, "U"); } - if (true && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) { writer.WritePropertyName("metadata"u8); writer.WriteStartObject(); @@ -67,21 +67,21 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("tool_resources") != true) { - if (ToolResources != null) + if (Optional.IsDefined(ToolResources)) { writer.WritePropertyName("tool_resources"u8); writer.WriteObjectValue(ToolResources, options); } else { - writer.WriteNull("toolResources"u8); + writer.WriteNull("tool_resources"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -176,10 +176,7 @@ internal static AssistantThread DeserializeAssistantThread(JsonElement element, toolResources = ToolResources.DeserializeToolResources(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AssistantThread( id, diff --git a/src/Generated/Models/AssistantThread.cs b/src/Generated/Models/AssistantThread.cs index ffdf0bed5..c30482a99 100644 --- a/src/Generated/Models/AssistantThread.cs +++ b/src/Generated/Models/AssistantThread.cs @@ -25,7 +25,7 @@ internal AssistantThread(string id, DateTimeOffset createdAt, IReadOnlyDictionar Id = id; CreatedAt = createdAt; Metadata = metadata; - this.Object = @object; + Object = @object; ToolResources = toolResources; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/AudioTranscription.Serialization.cs b/src/Generated/Models/AudioTranscription.Serialization.cs index 8ed9f26bb..a77693edc 100644 --- a/src/Generated/Models/AudioTranscription.Serialization.cs +++ b/src/Generated/Models/AudioTranscription.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } - if (true && Optional.IsCollectionDefined(Words) && _additionalBinaryDataProperties?.ContainsKey("words") != true) + if (Optional.IsCollectionDefined(Words) && _additionalBinaryDataProperties?.ContainsKey("words") != true) { writer.WritePropertyName("words"u8); writer.WriteStartArray(); @@ -51,7 +51,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && Optional.IsCollectionDefined(Segments) && _additionalBinaryDataProperties?.ContainsKey("segments") != true) + if (Optional.IsCollectionDefined(Segments) && _additionalBinaryDataProperties?.ContainsKey("segments") != true) { writer.WritePropertyName("segments"u8); writer.WriteStartArray(); @@ -71,7 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("duration"u8); writer.WriteNumberValue(Convert.ToDouble(Duration.Value.ToString("s\\.FFF"))); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -168,10 +168,7 @@ internal static AudioTranscription DeserializeAudioTranscription(JsonElement ele duration = TimeSpan.FromSeconds(prop.Value.GetDouble()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AudioTranscription( language, diff --git a/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs b/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs index 6834f5fda..d86d686df 100644 --- a/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs +++ b/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs @@ -79,7 +79,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -188,10 +188,7 @@ internal static AudioTranscriptionOptions DeserializeAudioTranscriptionOptions(J internalTimestampGranularities = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AudioTranscriptionOptions( language, diff --git a/src/Generated/Models/AudioTranslation.Serialization.cs b/src/Generated/Models/AudioTranslation.Serialization.cs index 425466132..109b0e848 100644 --- a/src/Generated/Models/AudioTranslation.Serialization.cs +++ b/src/Generated/Models/AudioTranslation.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } - if (true && Optional.IsCollectionDefined(Segments) && _additionalBinaryDataProperties?.ContainsKey("segments") != true) + if (Optional.IsCollectionDefined(Segments) && _additionalBinaryDataProperties?.ContainsKey("segments") != true) { writer.WritePropertyName("segments"u8); writer.WriteStartArray(); @@ -61,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("duration"u8); writer.WriteNumberValue(Convert.ToDouble(Duration.Value.ToString("s\\.FFF"))); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -143,10 +143,7 @@ internal static AudioTranslation DeserializeAudioTranslation(JsonElement element duration = TimeSpan.FromSeconds(prop.Value.GetDouble()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AudioTranslation( language, diff --git a/src/Generated/Models/AudioTranslationOptions.Serialization.cs b/src/Generated/Models/AudioTranslationOptions.Serialization.cs index d127fe2aa..40112fc66 100644 --- a/src/Generated/Models/AudioTranslationOptions.Serialization.cs +++ b/src/Generated/Models/AudioTranslationOptions.Serialization.cs @@ -52,7 +52,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("model"u8); writer.WriteStringValue(Model.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -133,10 +133,7 @@ internal static AudioTranslationOptions DeserializeAudioTranslationOptions(JsonE model = new InternalCreateTranslationRequestModel(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AudioTranslationOptions( prompt, diff --git a/src/Generated/Models/ChatAudioOptions.Serialization.cs b/src/Generated/Models/ChatAudioOptions.Serialization.cs index 1b6186096..cfe940a89 100644 --- a/src/Generated/Models/ChatAudioOptions.Serialization.cs +++ b/src/Generated/Models/ChatAudioOptions.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("format"u8); writer.WriteStringValue(OutputAudioFormat.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static ChatAudioOptions DeserializeChatAudioOptions(JsonElement element outputAudioFormat = new ChatOutputAudioFormat(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatAudioOptions(outputAudioVoice, outputAudioFormat, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatCompletion.Serialization.cs b/src/Generated/Models/ChatCompletion.Serialization.cs index 4d1bde5ac..d2b54f345 100644 --- a/src/Generated/Models/ChatCompletion.Serialization.cs +++ b/src/Generated/Models/ChatCompletion.Serialization.cs @@ -54,19 +54,12 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (Optional.IsDefined(ServiceTier) && _additionalBinaryDataProperties?.ContainsKey("service_tier") != true) { - if (ServiceTier != null) - { - writer.WritePropertyName("service_tier"u8); - writer.WriteStringValue(ServiceTier.Value.ToString()); - } - else - { - writer.WriteNull("serviceTier"u8); - } + writer.WritePropertyName("service_tier"u8); + writer.WriteStringValue(ServiceTier.Value.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("choices") != true) { @@ -83,7 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("created"u8); writer.WriteNumberValue(CreatedAt, "U"); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -188,10 +181,7 @@ internal static ChatCompletion DeserializeChatCompletion(JsonElement element, Mo createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatCompletion( id, diff --git a/src/Generated/Models/ChatCompletion.cs b/src/Generated/Models/ChatCompletion.cs index c81c17e4c..90ecd562a 100644 --- a/src/Generated/Models/ChatCompletion.cs +++ b/src/Generated/Models/ChatCompletion.cs @@ -26,7 +26,7 @@ internal ChatCompletion(string id, string model, string systemFingerprint, ChatT Model = model; SystemFingerprint = systemFingerprint; Usage = usage; - this.Object = @object; + Object = @object; ServiceTier = serviceTier; Choices = choices; CreatedAt = createdAt; diff --git a/src/Generated/Models/ChatCompletionOptions.Serialization.cs b/src/Generated/Models/ChatCompletionOptions.Serialization.cs index 226bcf1c0..899fc289c 100644 --- a/src/Generated/Models/ChatCompletionOptions.Serialization.cs +++ b/src/Generated/Models/ChatCompletionOptions.Serialization.cs @@ -27,59 +27,36 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ChatCompletionOptions)} 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(TopP) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) + { + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(TopP.Value); + } if (Optional.IsDefined(FrequencyPenalty) && _additionalBinaryDataProperties?.ContainsKey("frequency_penalty") != true) { - if (FrequencyPenalty != null) - { - writer.WritePropertyName("frequency_penalty"u8); - writer.WriteNumberValue(FrequencyPenalty.Value); - } - else - { - writer.WriteNull("frequencyPenalty"u8); - } + writer.WritePropertyName("frequency_penalty"u8); + writer.WriteNumberValue(FrequencyPenalty.Value); } if (Optional.IsDefined(PresencePenalty) && _additionalBinaryDataProperties?.ContainsKey("presence_penalty") != true) { - if (PresencePenalty != null) - { - writer.WritePropertyName("presence_penalty"u8); - writer.WriteNumberValue(PresencePenalty.Value); - } - else - { - writer.WriteNull("presencePenalty"u8); - } + writer.WritePropertyName("presence_penalty"u8); + writer.WriteNumberValue(PresencePenalty.Value); + } + if (Optional.IsDefined(WebSearchOptions) && _additionalBinaryDataProperties?.ContainsKey("web_search_options") != true) + { + writer.WritePropertyName("web_search_options"u8); + writer.WriteObjectValue(WebSearchOptions, options); } if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) { writer.WritePropertyName("response_format"u8); writer.WriteObjectValue(ResponseFormat, options); } - if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) - { - if (Temperature != null) - { - writer.WritePropertyName("temperature"u8); - writer.WriteNumberValue(Temperature.Value); - } - else - { - writer.WriteNull("temperature"u8); - } - } - if (Optional.IsDefined(TopP) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) - { - if (TopP != null) - { - writer.WritePropertyName("top_p"u8); - writer.WriteNumberValue(TopP.Value); - } - else - { - writer.WriteNull("topP"u8); - } - } if (Optional.IsCollectionDefined(Tools) && _additionalBinaryDataProperties?.ContainsKey("tools") != true) { writer.WritePropertyName("tools"u8); @@ -90,13 +67,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - // CUSTOM: Check collection is defined so Messages can behave like an optional. if (Optional.IsCollectionDefined(Messages) && _additionalBinaryDataProperties?.ContainsKey("messages") != true) { writer.WritePropertyName("messages"u8); - this.SerializeMessagesValue(writer, options); + SerializeMessagesValue(writer, options); } - // CUSTOM: Add a null check to allow Model to behave like an optional if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) { writer.WritePropertyName("model"u8); @@ -104,97 +79,48 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(N) && _additionalBinaryDataProperties?.ContainsKey("n") != true) { - if (N != null) - { - writer.WritePropertyName("n"u8); - writer.WriteNumberValue(N.Value); - } - else - { - writer.WriteNull("n"u8); - } + writer.WritePropertyName("n"u8); + writer.WriteNumberValue(N.Value); } if (Optional.IsDefined(Stream) && _additionalBinaryDataProperties?.ContainsKey("stream") != true) { - if (Stream != null) - { - writer.WritePropertyName("stream"u8); - writer.WriteBooleanValue(Stream.Value); - } - else - { - writer.WriteNull("stream"u8); - } + writer.WritePropertyName("stream"u8); + writer.WriteBooleanValue(Stream.Value); } if (Optional.IsDefined(StreamOptions) && _additionalBinaryDataProperties?.ContainsKey("stream_options") != true) { - if (StreamOptions != null) - { - writer.WritePropertyName("stream_options"u8); - writer.WriteObjectValue(StreamOptions, options); - } - else - { - writer.WriteNull("streamOptions"u8); - } + writer.WritePropertyName("stream_options"u8); + writer.WriteObjectValue(StreamOptions, options); } if (Optional.IsDefined(IncludeLogProbabilities) && _additionalBinaryDataProperties?.ContainsKey("logprobs") != true) { - if (IncludeLogProbabilities != null) - { - writer.WritePropertyName("logprobs"u8); - writer.WriteBooleanValue(IncludeLogProbabilities.Value); - } - else - { - writer.WriteNull("logprobs"u8); - } + writer.WritePropertyName("logprobs"u8); + writer.WriteBooleanValue(IncludeLogProbabilities.Value); } if (Optional.IsDefined(TopLogProbabilityCount) && _additionalBinaryDataProperties?.ContainsKey("top_logprobs") != true) { - if (TopLogProbabilityCount != null) - { - writer.WritePropertyName("top_logprobs"u8); - writer.WriteNumberValue(TopLogProbabilityCount.Value); - } - else - { - writer.WriteNull("topLogprobs"u8); - } + writer.WritePropertyName("top_logprobs"u8); + writer.WriteNumberValue(TopLogProbabilityCount.Value); } if (Optional.IsCollectionDefined(StopSequences) && _additionalBinaryDataProperties?.ContainsKey("stop") != true) { - if (StopSequences != null) - { - writer.WritePropertyName("stop"u8); - this.SerializeStopSequencesValue(writer, options); - } - else - { - writer.WriteNull("stop"u8); - } + writer.WritePropertyName("stop"u8); + SerializeStopSequencesValue(writer, options); } if (Optional.IsCollectionDefined(LogitBiases) && _additionalBinaryDataProperties?.ContainsKey("logit_bias") != true) { - if (LogitBiases != null) - { - writer.WritePropertyName("logit_bias"u8); - this.SerializeLogitBiasesValue(writer, options); - } - else - { - writer.WriteNull("logitBias"u8); - } + writer.WritePropertyName("logit_bias"u8); + SerializeLogitBiasesValue(writer, options); } if (Optional.IsDefined(ToolChoice) && _additionalBinaryDataProperties?.ContainsKey("tool_choice") != true) { writer.WritePropertyName("tool_choice"u8); - writer.WriteObjectValue(ToolChoice, options); + writer.WriteObjectValue(ToolChoice, options); } if (Optional.IsDefined(FunctionChoice) && _additionalBinaryDataProperties?.ContainsKey("function_call") != true) { writer.WritePropertyName("function_call"u8); - writer.WriteObjectValue(FunctionChoice, options); + writer.WriteObjectValue(FunctionChoice, options); } if (Optional.IsDefined(AllowParallelToolCalls) && _additionalBinaryDataProperties?.ContainsKey("parallel_tool_calls") != true) { @@ -208,39 +134,18 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Seed) && _additionalBinaryDataProperties?.ContainsKey("seed") != true) { - if (Seed != null) - { - writer.WritePropertyName("seed"u8); - writer.WriteNumberValue(Seed.Value); - } - else - { - writer.WriteNull("seed"u8); - } + writer.WritePropertyName("seed"u8); + writer.WriteNumberValue(Seed.Value); } if (Optional.IsDefined(_deprecatedMaxTokens) && _additionalBinaryDataProperties?.ContainsKey("max_tokens") != true) { - if (_deprecatedMaxTokens != null) - { - writer.WritePropertyName("max_tokens"u8); - writer.WriteNumberValue(_deprecatedMaxTokens.Value); - } - else - { - writer.WriteNull("maxTokens"u8); - } + writer.WritePropertyName("max_tokens"u8); + writer.WriteNumberValue(_deprecatedMaxTokens.Value); } if (Optional.IsDefined(MaxOutputTokenCount) && _additionalBinaryDataProperties?.ContainsKey("max_completion_tokens") != true) { - if (MaxOutputTokenCount != null) - { - writer.WritePropertyName("max_completion_tokens"u8); - writer.WriteNumberValue(MaxOutputTokenCount.Value); - } - else - { - writer.WriteNull("maxCompletionTokens"u8); - } + writer.WritePropertyName("max_completion_tokens"u8); + writer.WriteNumberValue(MaxOutputTokenCount.Value); } if (Optional.IsCollectionDefined(Functions) && _additionalBinaryDataProperties?.ContainsKey("functions") != true) { @@ -270,15 +175,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(StoredOutputEnabled) && _additionalBinaryDataProperties?.ContainsKey("store") != true) { - if (StoredOutputEnabled != null) - { - writer.WritePropertyName("store"u8); - writer.WriteBooleanValue(StoredOutputEnabled.Value); - } - else - { - writer.WriteNull("store"u8); - } + writer.WritePropertyName("store"u8); + writer.WriteBooleanValue(StoredOutputEnabled.Value); } if (Optional.IsDefined(ReasoningEffortLevel) && _additionalBinaryDataProperties?.ContainsKey("reasoning_effort") != true) { @@ -287,58 +185,30 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsCollectionDefined(InternalModalities) && _additionalBinaryDataProperties?.ContainsKey("modalities") != true) { - if (InternalModalities != null) - { - writer.WritePropertyName("modalities"u8); - writer.WriteStartArray(); - foreach (InternalCreateChatCompletionRequestModality item in InternalModalities) - { - writer.WriteStringValue(item.ToString()); - } - writer.WriteEndArray(); - } - else + writer.WritePropertyName("modalities"u8); + writer.WriteStartArray(); + foreach (InternalCreateChatCompletionRequestModality item in InternalModalities) { - writer.WriteNull("modalities"u8); + writer.WriteStringValue(item.ToString()); } + writer.WriteEndArray(); } if (Optional.IsDefined(AudioOptions) && _additionalBinaryDataProperties?.ContainsKey("audio") != true) { - if (AudioOptions != null) - { - writer.WritePropertyName("audio"u8); - writer.WriteObjectValue(AudioOptions, options); - } - else - { - writer.WriteNull("audio"u8); - } + writer.WritePropertyName("audio"u8); + writer.WriteObjectValue(AudioOptions, options); } if (Optional.IsDefined(OutputPrediction) && _additionalBinaryDataProperties?.ContainsKey("prediction") != true) { - if (OutputPrediction != null) - { - writer.WritePropertyName("prediction"u8); - writer.WriteObjectValue(OutputPrediction, options); - } - else - { - writer.WriteNull("prediction"u8); - } + writer.WritePropertyName("prediction"u8); + writer.WriteObjectValue(OutputPrediction, options); } if (Optional.IsDefined(_serviceTier) && _additionalBinaryDataProperties?.ContainsKey("service_tier") != true) { - if (_serviceTier != null) - { - writer.WritePropertyName("service_tier"u8); - writer.WriteStringValue(_serviceTier.Value.ToString()); - } - else - { - writer.WriteNull("serviceTier"u8); - } + writer.WritePropertyName("service_tier"u8); + writer.WriteStringValue(_serviceTier.Value.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -378,11 +248,12 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme { return null; } + float? temperature = default; + float? topP = default; float? frequencyPenalty = default; float? presencePenalty = default; + ChatWebSearchOptions webSearchOptions = default; ChatResponseFormat responseFormat = default; - float? temperature = default; - float? topP = default; IList tools = default; IList messages = default; InternalCreateChatCompletionRequestModel? model = default; @@ -411,53 +282,62 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("frequency_penalty"u8)) + if (prop.NameEquals("temperature"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - frequencyPenalty = null; + temperature = null; continue; } - frequencyPenalty = prop.Value.GetSingle(); + temperature = prop.Value.GetSingle(); continue; } - if (prop.NameEquals("presence_penalty"u8)) + if (prop.NameEquals("top_p"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - presencePenalty = null; + topP = null; continue; } - presencePenalty = prop.Value.GetSingle(); + topP = prop.Value.GetSingle(); continue; } - if (prop.NameEquals("response_format"u8)) + if (prop.NameEquals("frequency_penalty"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { + frequencyPenalty = null; continue; } - responseFormat = ChatResponseFormat.DeserializeChatResponseFormat(prop.Value, options); + frequencyPenalty = prop.Value.GetSingle(); continue; } - if (prop.NameEquals("temperature"u8)) + if (prop.NameEquals("presence_penalty"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - temperature = null; + presencePenalty = null; continue; } - temperature = prop.Value.GetSingle(); + presencePenalty = prop.Value.GetSingle(); continue; } - if (prop.NameEquals("top_p"u8)) + if (prop.NameEquals("web_search_options"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - topP = null; continue; } - topP = prop.Value.GetSingle(); + webSearchOptions = ChatWebSearchOptions.DeserializeChatWebSearchOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("response_format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + responseFormat = ChatResponseFormat.DeserializeChatResponseFormat(prop.Value, options); continue; } if (prop.NameEquals("tools"u8)) @@ -660,6 +540,7 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme { if (prop.Value.ValueKind == JsonValueKind.Null) { + reasoningEffortLevel = null; continue; } reasoningEffortLevel = new ChatReasoningEffortLevel(prop.Value.GetString()); @@ -709,20 +590,17 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme serviceTier = new InternalCreateChatCompletionRequestServiceTier(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - // CUSTOM: Ensure messages collection is initialized. return new ChatCompletionOptions( + temperature, + topP, frequencyPenalty, presencePenalty, + webSearchOptions, responseFormat, - temperature, - topP, tools ?? new ChangeTrackingList(), - messages ?? new ChangeTrackingList(), + messages, model, n, stream, diff --git a/src/Generated/Models/ChatCompletionOptions.cs b/src/Generated/Models/ChatCompletionOptions.cs index 82f0a9006..9afb64d37 100644 --- a/src/Generated/Models/ChatCompletionOptions.cs +++ b/src/Generated/Models/ChatCompletionOptions.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI; namespace OpenAI.Chat { @@ -11,15 +12,17 @@ public partial class ChatCompletionOptions { private protected IDictionary _additionalBinaryDataProperties; - internal ChatCompletionOptions(float? frequencyPenalty, float? presencePenalty, ChatResponseFormat responseFormat, float? temperature, float? topP, 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, 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) { + Temperature = temperature; + TopP = topP; FrequencyPenalty = frequencyPenalty; PresencePenalty = presencePenalty; + WebSearchOptions = webSearchOptions; ResponseFormat = responseFormat; - Temperature = temperature; - TopP = topP; Tools = tools; - Messages = messages; + // Plugin customization: ensure initialization of collection + Messages = messages ?? new ChangeTrackingList(); Model = model; N = n; Stream = stream; @@ -46,15 +49,17 @@ internal ChatCompletionOptions(float? frequencyPenalty, float? presencePenalty, _additionalBinaryDataProperties = additionalBinaryDataProperties; } + public float? Temperature { get; set; } + + public float? TopP { get; set; } + public float? FrequencyPenalty { get; set; } public float? PresencePenalty { get; set; } - public ChatResponseFormat ResponseFormat { get; set; } - - public float? Temperature { get; set; } + public ChatWebSearchOptions WebSearchOptions { get; set; } - public float? TopP { get; set; } + public ChatResponseFormat ResponseFormat { get; set; } public IList Tools { get; } diff --git a/src/Generated/Models/ChatFinishReason.Serialization.cs b/src/Generated/Models/ChatFinishReason.Serialization.cs index 63be95cef..4f88b5040 100644 --- a/src/Generated/Models/ChatFinishReason.Serialization.cs +++ b/src/Generated/Models/ChatFinishReason.Serialization.cs @@ -8,37 +8,37 @@ namespace OpenAI.Chat { internal static partial class ChatFinishReasonExtensions { - public static string ToSerialString(this Chat.ChatFinishReason value) => value switch + public static string ToSerialString(this ChatFinishReason value) => value switch { - Chat.ChatFinishReason.Stop => "stop", - Chat.ChatFinishReason.Length => "length", - Chat.ChatFinishReason.ToolCalls => "tool_calls", - Chat.ChatFinishReason.ContentFilter => "content_filter", - Chat.ChatFinishReason.FunctionCall => "function_call", + ChatFinishReason.Stop => "stop", + ChatFinishReason.Length => "length", + ChatFinishReason.ToolCalls => "tool_calls", + ChatFinishReason.ContentFilter => "content_filter", + ChatFinishReason.FunctionCall => "function_call", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ChatFinishReason value.") }; - public static Chat.ChatFinishReason ToChatFinishReason(this string value) + public static ChatFinishReason ToChatFinishReason(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "stop")) { - return Chat.ChatFinishReason.Stop; + return ChatFinishReason.Stop; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "length")) { - return Chat.ChatFinishReason.Length; + return ChatFinishReason.Length; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "tool_calls")) { - return Chat.ChatFinishReason.ToolCalls; + return ChatFinishReason.ToolCalls; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "content_filter")) { - return Chat.ChatFinishReason.ContentFilter; + return ChatFinishReason.ContentFilter; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "function_call")) { - return Chat.ChatFinishReason.FunctionCall; + return ChatFinishReason.FunctionCall; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ChatFinishReason value."); } diff --git a/src/Generated/Models/ChatFunction.Serialization.cs b/src/Generated/Models/ChatFunction.Serialization.cs index e3b1e78f5..0e0d35158 100644 --- a/src/Generated/Models/ChatFunction.Serialization.cs +++ b/src/Generated/Models/ChatFunction.Serialization.cs @@ -53,7 +53,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -118,10 +118,7 @@ internal static ChatFunction DeserializeChatFunction(JsonElement element, ModelR functionParameters = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatFunction(functionName, functionDescription, functionParameters, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatFunctionCall.Serialization.cs b/src/Generated/Models/ChatFunctionCall.Serialization.cs index e5f6142b7..f10d4a17a 100644 --- a/src/Generated/Models/ChatFunctionCall.Serialization.cs +++ b/src/Generated/Models/ChatFunctionCall.Serialization.cs @@ -39,9 +39,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("arguments") != true) { writer.WritePropertyName("arguments"u8); - this.SerializeFunctionArgumentsValue(writer, options); + SerializeFunctionArgumentsValue(writer, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static ChatFunctionCall DeserializeChatFunctionCall(JsonElement element DeserializeFunctionArgumentsValue(prop, ref functionArguments); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatFunctionCall(functionName, functionArguments, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatFunctionChoice.Serialization.cs b/src/Generated/Models/ChatFunctionChoice.Serialization.cs index 4ec64d73c..5ddfa7c67 100644 --- a/src/Generated/Models/ChatFunctionChoice.Serialization.cs +++ b/src/Generated/Models/ChatFunctionChoice.Serialization.cs @@ -19,7 +19,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ChatFunctionChoice)} does not support writing '{format}' format."); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -50,7 +50,7 @@ protected virtual ChatFunctionChoice JsonModelCreateCore(ref Utf8JsonReader read throw new FormatException($"The model {nameof(ChatFunctionChoice)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return ChatFunctionChoice.DeserializeChatFunctionChoice(document.RootElement, options); + return DeserializeChatFunctionChoice(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -77,7 +77,7 @@ protected virtual ChatFunctionChoice PersistableModelCreateCore(BinaryData data, case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return ChatFunctionChoice.DeserializeChatFunctionChoice(document.RootElement, options); + return DeserializeChatFunctionChoice(document.RootElement, options); } default: throw new FormatException($"The model {nameof(ChatFunctionChoice)} does not support reading '{options.Format}' format."); @@ -99,7 +99,7 @@ public static explicit operator ChatFunctionChoice(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return ChatFunctionChoice.DeserializeChatFunctionChoice(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeChatFunctionChoice(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/ChatInputTokenUsageDetails.Serialization.cs b/src/Generated/Models/ChatInputTokenUsageDetails.Serialization.cs index 8b5fb999d..ec496985c 100644 --- a/src/Generated/Models/ChatInputTokenUsageDetails.Serialization.cs +++ b/src/Generated/Models/ChatInputTokenUsageDetails.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("cached_tokens"u8); writer.WriteNumberValue(CachedTokenCount); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static ChatInputTokenUsageDetails DeserializeChatInputTokenUsageDetails cachedTokenCount = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatInputTokenUsageDetails(audioTokenCount, cachedTokenCount, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatMessage.Serialization.cs b/src/Generated/Models/ChatMessage.Serialization.cs index 3b134ad8b..cd8a6a0a1 100644 --- a/src/Generated/Models/ChatMessage.Serialization.cs +++ b/src/Generated/Models/ChatMessage.Serialization.cs @@ -10,7 +10,6 @@ namespace OpenAI.Chat { - [PersistableModelProxy(typeof(InternalUnknownChatMessage))] public partial class ChatMessage : IJsonModel { protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) @@ -20,18 +19,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ChatMessage)} does not support writing '{format}' format."); } - // CUSTOM: Check inner collection is defined. - if (true && Optional.IsDefined(Content) && Content.IsInnerCollectionDefined() && _additionalBinaryDataProperties?.ContainsKey("content") != true) + if (Optional.IsDefined(Content) && Content.IsInnerCollectionDefined() && _additionalBinaryDataProperties?.ContainsKey("content") != true) { writer.WritePropertyName("content"u8); - this.SerializeContentValue(writer, options); + SerializeContentValue(writer, options); } if (_additionalBinaryDataProperties?.ContainsKey("role") != true) { writer.WritePropertyName("role"u8); writer.WriteStringValue(Role.ToSerialString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/ChatMessage.cs b/src/Generated/Models/ChatMessage.cs index 89391cdf9..378e59d71 100644 --- a/src/Generated/Models/ChatMessage.cs +++ b/src/Generated/Models/ChatMessage.cs @@ -11,9 +11,10 @@ public partial class ChatMessage { private protected IDictionary _additionalBinaryDataProperties; - internal ChatMessage(ChatMessageContent content, Chat.ChatMessageRole role, IDictionary additionalBinaryDataProperties) + internal ChatMessage(ChatMessageContent content, ChatMessageRole role, IDictionary additionalBinaryDataProperties) { - Content = content; + // Plugin customization: ensure initialization of collection + Content = content ?? new ChatMessageContent(); Role = role; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ChatMessageAnnotation.Serialization.cs b/src/Generated/Models/ChatMessageAnnotation.Serialization.cs new file mode 100644 index 000000000..46081e30a --- /dev/null +++ b/src/Generated/Models/ChatMessageAnnotation.Serialization.cs @@ -0,0 +1,153 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Chat +{ + public partial class ChatMessageAnnotation : IJsonModel + { + internal ChatMessageAnnotation() + { + } + + 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(ChatMessageAnnotation)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("url_citation") != true) + { + writer.WritePropertyName("url_citation"u8); + writer.WriteObjectValue(UrlCitation, options); + } + 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 + } + } + } + + ChatMessageAnnotation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual ChatMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ChatMessageAnnotation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeChatMessageAnnotation(document.RootElement, options); + } + + internal static ChatMessageAnnotation DeserializeChatMessageAnnotation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalChatCompletionResponseMessageAnnotationUrlCitation urlCitation = default; + InternalChatCompletionResponseMessageAnnotationType @type = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("url_citation"u8)) + { + urlCitation = InternalChatCompletionResponseMessageAnnotationUrlCitation.DeserializeInternalChatCompletionResponseMessageAnnotationUrlCitation(prop.Value, options); + continue; + } + if (prop.NameEquals("type"u8)) + { + @type = new InternalChatCompletionResponseMessageAnnotationType(prop.Value.GetString()); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ChatMessageAnnotation(urlCitation, @type, 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(ChatMessageAnnotation)} does not support writing '{options.Format}' format."); + } + } + + ChatMessageAnnotation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual ChatMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeChatMessageAnnotation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ChatMessageAnnotation)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..f5283347f --- /dev/null +++ b/src/Generated/Models/ChatMessageAnnotation.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Chat +{ + public partial class ChatMessageAnnotation + { + private protected IDictionary _additionalBinaryDataProperties; + + internal ChatMessageAnnotation(InternalChatCompletionResponseMessageAnnotationUrlCitation urlCitation) + { + UrlCitation = urlCitation; + } + + internal ChatMessageAnnotation(InternalChatCompletionResponseMessageAnnotationUrlCitation urlCitation, InternalChatCompletionResponseMessageAnnotationType @type, IDictionary additionalBinaryDataProperties) + { + UrlCitation = urlCitation; + Type = @type; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ChatMessageContentPart.Serialization.cs b/src/Generated/Models/ChatMessageContentPart.Serialization.cs index 2cfaddfd1..068b012b8 100644 --- a/src/Generated/Models/ChatMessageContentPart.Serialization.cs +++ b/src/Generated/Models/ChatMessageContentPart.Serialization.cs @@ -19,7 +19,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ChatMessageContentPart)} does not support writing '{format}' format."); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -50,7 +50,7 @@ protected virtual ChatMessageContentPart JsonModelCreateCore(ref Utf8JsonReader throw new FormatException($"The model {nameof(ChatMessageContentPart)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return ChatMessageContentPart.DeserializeChatMessageContentPart(document.RootElement, options); + return DeserializeChatMessageContentPart(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -77,7 +77,7 @@ protected virtual ChatMessageContentPart PersistableModelCreateCore(BinaryData d case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return ChatMessageContentPart.DeserializeChatMessageContentPart(document.RootElement, options); + return DeserializeChatMessageContentPart(document.RootElement, options); } default: throw new FormatException($"The model {nameof(ChatMessageContentPart)} does not support reading '{options.Format}' format."); @@ -99,7 +99,7 @@ public static explicit operator ChatMessageContentPart(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return ChatMessageContentPart.DeserializeChatMessageContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeChatMessageContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/ChatMessageRole.Serialization.cs b/src/Generated/Models/ChatMessageRole.Serialization.cs index 2063ddd7d..625e06c60 100644 --- a/src/Generated/Models/ChatMessageRole.Serialization.cs +++ b/src/Generated/Models/ChatMessageRole.Serialization.cs @@ -8,42 +8,42 @@ namespace OpenAI.Chat { internal static partial class ChatMessageRoleExtensions { - public static string ToSerialString(this Chat.ChatMessageRole value) => value switch + public static string ToSerialString(this ChatMessageRole value) => value switch { - Chat.ChatMessageRole.System => "system", - Chat.ChatMessageRole.Developer => "developer", - Chat.ChatMessageRole.User => "user", - Chat.ChatMessageRole.Assistant => "assistant", - Chat.ChatMessageRole.Tool => "tool", - Chat.ChatMessageRole.Function => "function", + ChatMessageRole.System => "system", + ChatMessageRole.Developer => "developer", + ChatMessageRole.User => "user", + ChatMessageRole.Assistant => "assistant", + ChatMessageRole.Tool => "tool", + ChatMessageRole.Function => "function", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ChatMessageRole value.") }; - public static Chat.ChatMessageRole ToChatMessageRole(this string value) + public static ChatMessageRole ToChatMessageRole(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "system")) { - return Chat.ChatMessageRole.System; + return ChatMessageRole.System; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "developer")) { - return Chat.ChatMessageRole.Developer; + return ChatMessageRole.Developer; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "user")) { - return Chat.ChatMessageRole.User; + return ChatMessageRole.User; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "assistant")) { - return Chat.ChatMessageRole.Assistant; + return ChatMessageRole.Assistant; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "tool")) { - return Chat.ChatMessageRole.Tool; + return ChatMessageRole.Tool; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "function")) { - return Chat.ChatMessageRole.Function; + return ChatMessageRole.Function; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ChatMessageRole value."); } diff --git a/src/Generated/Models/ChatOutputAudio.Serialization.cs b/src/Generated/Models/ChatOutputAudio.Serialization.cs index 42f31f886..a52263dc5 100644 --- a/src/Generated/Models/ChatOutputAudio.Serialization.cs +++ b/src/Generated/Models/ChatOutputAudio.Serialization.cs @@ -51,7 +51,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("data"u8); writer.WriteBase64StringValue(AudioBytes.ToArray(), "D"); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -118,10 +118,7 @@ internal static ChatOutputAudio DeserializeChatOutputAudio(JsonElement element, audioBytes = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatOutputAudio(id, expiresAt, transcript, audioBytes, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatOutputAudioReference.Serialization.cs b/src/Generated/Models/ChatOutputAudioReference.Serialization.cs index 590c2dd88..c63cb315f 100644 --- a/src/Generated/Models/ChatOutputAudioReference.Serialization.cs +++ b/src/Generated/Models/ChatOutputAudioReference.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("id"u8); writer.WriteStringValue(Id); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static ChatOutputAudioReference DeserializeChatOutputAudioReference(Jso id = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatOutputAudioReference(id, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatOutputPrediction.Serialization.cs b/src/Generated/Models/ChatOutputPrediction.Serialization.cs index ec8e32b7b..e77abbbed 100644 --- a/src/Generated/Models/ChatOutputPrediction.Serialization.cs +++ b/src/Generated/Models/ChatOutputPrediction.Serialization.cs @@ -10,7 +10,6 @@ namespace OpenAI.Chat { - [PersistableModelProxy(typeof(InternalUnknownChatOutputPrediction))] public partial class ChatOutputPrediction : IJsonModel { internal ChatOutputPrediction() @@ -36,7 +35,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/ChatOutputTokenUsageDetails.Serialization.cs b/src/Generated/Models/ChatOutputTokenUsageDetails.Serialization.cs index 12d22dfe8..7f73cbb75 100644 --- a/src/Generated/Models/ChatOutputTokenUsageDetails.Serialization.cs +++ b/src/Generated/Models/ChatOutputTokenUsageDetails.Serialization.cs @@ -47,7 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("rejected_prediction_tokens"u8); writer.WriteNumberValue(RejectedPredictionTokenCount); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -130,10 +130,7 @@ internal static ChatOutputTokenUsageDetails DeserializeChatOutputTokenUsageDetai rejectedPredictionTokenCount = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatOutputTokenUsageDetails(reasoningTokenCount, audioTokenCount, acceptedPredictionTokenCount, rejectedPredictionTokenCount, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatResponseFormat.Serialization.cs b/src/Generated/Models/ChatResponseFormat.Serialization.cs index 2cc1ea4bd..6190268bd 100644 --- a/src/Generated/Models/ChatResponseFormat.Serialization.cs +++ b/src/Generated/Models/ChatResponseFormat.Serialization.cs @@ -10,7 +10,6 @@ namespace OpenAI.Chat { - [PersistableModelProxy(typeof(InternalUnknownChatResponseFormat))] public partial class ChatResponseFormat : IJsonModel { protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) @@ -25,7 +24,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/ChatTokenLogProbabilityDetails.Serialization.cs b/src/Generated/Models/ChatTokenLogProbabilityDetails.Serialization.cs index be762ab42..54834fd6b 100644 --- a/src/Generated/Models/ChatTokenLogProbabilityDetails.Serialization.cs +++ b/src/Generated/Models/ChatTokenLogProbabilityDetails.Serialization.cs @@ -43,7 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("bytes") != true) { - if (Utf8Bytes != null) + if (Optional.IsDefined(Utf8Bytes)) { writer.WritePropertyName("bytes"u8); writer.WriteStartArray(); @@ -68,7 +68,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -151,10 +151,7 @@ internal static ChatTokenLogProbabilityDetails DeserializeChatTokenLogProbabilit topLogProbabilities = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatTokenLogProbabilityDetails(token, logProbability, utf8Bytes, topLogProbabilities, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatTokenTopLogProbabilityDetails.Serialization.cs b/src/Generated/Models/ChatTokenTopLogProbabilityDetails.Serialization.cs index 3e4872d39..0ecf8c3f1 100644 --- a/src/Generated/Models/ChatTokenTopLogProbabilityDetails.Serialization.cs +++ b/src/Generated/Models/ChatTokenTopLogProbabilityDetails.Serialization.cs @@ -43,7 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("bytes") != true) { - if (Utf8Bytes != null) + if (Optional.IsDefined(Utf8Bytes)) { writer.WritePropertyName("bytes"u8); writer.WriteStartArray(); @@ -58,7 +58,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("bytes"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -130,10 +130,7 @@ internal static ChatTokenTopLogProbabilityDetails DeserializeChatTokenTopLogProb utf8Bytes = new ReadOnlyMemory(array); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatTokenTopLogProbabilityDetails(token, logProbability, utf8Bytes, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatTokenUsage.Serialization.cs b/src/Generated/Models/ChatTokenUsage.Serialization.cs index d8b52c91e..fb222dc1f 100644 --- a/src/Generated/Models/ChatTokenUsage.Serialization.cs +++ b/src/Generated/Models/ChatTokenUsage.Serialization.cs @@ -49,14 +49,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(OutputTokenDetails) && _additionalBinaryDataProperties?.ContainsKey("completion_tokens_details") != true) { writer.WritePropertyName("completion_tokens_details"u8); - writer.WriteObjectValue(OutputTokenDetails, options); + writer.WriteObjectValue(OutputTokenDetails, options); } if (Optional.IsDefined(InputTokenDetails) && _additionalBinaryDataProperties?.ContainsKey("prompt_tokens_details") != true) { writer.WritePropertyName("prompt_tokens_details"u8); - writer.WriteObjectValue(InputTokenDetails, options); + writer.WriteObjectValue(InputTokenDetails, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -137,10 +137,7 @@ internal static ChatTokenUsage DeserializeChatTokenUsage(JsonElement element, Mo inputTokenDetails = ChatInputTokenUsageDetails.DeserializeChatInputTokenUsageDetails(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatTokenUsage( outputTokenCount, diff --git a/src/Generated/Models/ChatTool.Serialization.cs b/src/Generated/Models/ChatTool.Serialization.cs index 42c658144..4463b7902 100644 --- a/src/Generated/Models/ChatTool.Serialization.cs +++ b/src/Generated/Models/ChatTool.Serialization.cs @@ -34,14 +34,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("function") != true) { writer.WritePropertyName("function"u8); - writer.WriteObjectValue(Function, options); + writer.WriteObjectValue(Function, options); } if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -82,7 +82,7 @@ internal static ChatTool DeserializeChatTool(JsonElement element, ModelReaderWri return null; } InternalFunctionDefinition function = default; - Chat.ChatToolKind kind = default; + ChatToolKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -96,10 +96,7 @@ internal static ChatTool DeserializeChatTool(JsonElement element, ModelReaderWri kind = prop.Value.GetString().ToChatToolKind(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatTool(function, kind, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatTool.cs b/src/Generated/Models/ChatTool.cs index 2c11930ba..fbb6bcf26 100644 --- a/src/Generated/Models/ChatTool.cs +++ b/src/Generated/Models/ChatTool.cs @@ -12,7 +12,7 @@ public partial class ChatTool { private protected IDictionary _additionalBinaryDataProperties; - internal ChatTool(InternalFunctionDefinition function, Chat.ChatToolKind kind, IDictionary additionalBinaryDataProperties) + internal ChatTool(InternalFunctionDefinition function, ChatToolKind kind, IDictionary additionalBinaryDataProperties) { Function = function; Kind = kind; diff --git a/src/Generated/Models/ChatToolCall.Serialization.cs b/src/Generated/Models/ChatToolCall.Serialization.cs index c7cc7b0e2..c6feda16b 100644 --- a/src/Generated/Models/ChatToolCall.Serialization.cs +++ b/src/Generated/Models/ChatToolCall.Serialization.cs @@ -39,14 +39,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("function") != true) { writer.WritePropertyName("function"u8); - writer.WriteObjectValue(Function, options); + writer.WriteObjectValue(Function, options); } if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -88,7 +88,7 @@ internal static ChatToolCall DeserializeChatToolCall(JsonElement element, ModelR } string id = default; InternalChatCompletionMessageToolCallFunction function = default; - Chat.ChatToolCallKind kind = default; + ChatToolCallKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -107,10 +107,7 @@ internal static ChatToolCall DeserializeChatToolCall(JsonElement element, ModelR kind = prop.Value.GetString().ToChatToolCallKind(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatToolCall(id, function, kind, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatToolCall.cs b/src/Generated/Models/ChatToolCall.cs index f4eb9b869..3e3fe3032 100644 --- a/src/Generated/Models/ChatToolCall.cs +++ b/src/Generated/Models/ChatToolCall.cs @@ -11,7 +11,7 @@ public partial class ChatToolCall { private protected IDictionary _additionalBinaryDataProperties; - internal ChatToolCall(string id, InternalChatCompletionMessageToolCallFunction function, Chat.ChatToolCallKind kind, IDictionary additionalBinaryDataProperties) + internal ChatToolCall(string id, InternalChatCompletionMessageToolCallFunction function, ChatToolCallKind kind, IDictionary additionalBinaryDataProperties) { Id = id; Function = function; diff --git a/src/Generated/Models/ChatToolCallKind.Serialization.cs b/src/Generated/Models/ChatToolCallKind.Serialization.cs index e3711a393..1d9519d73 100644 --- a/src/Generated/Models/ChatToolCallKind.Serialization.cs +++ b/src/Generated/Models/ChatToolCallKind.Serialization.cs @@ -8,17 +8,17 @@ namespace OpenAI.Chat { internal static partial class ChatToolCallKindExtensions { - public static string ToSerialString(this Chat.ChatToolCallKind value) => value switch + public static string ToSerialString(this ChatToolCallKind value) => value switch { - Chat.ChatToolCallKind.Function => "function", + ChatToolCallKind.Function => "function", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ChatToolCallKind value.") }; - public static Chat.ChatToolCallKind ToChatToolCallKind(this string value) + public static ChatToolCallKind ToChatToolCallKind(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "function")) { - return Chat.ChatToolCallKind.Function; + return ChatToolCallKind.Function; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ChatToolCallKind value."); } diff --git a/src/Generated/Models/ChatToolChoice.Serialization.cs b/src/Generated/Models/ChatToolChoice.Serialization.cs index f775a36af..58be8eeaf 100644 --- a/src/Generated/Models/ChatToolChoice.Serialization.cs +++ b/src/Generated/Models/ChatToolChoice.Serialization.cs @@ -19,7 +19,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ChatToolChoice)} does not support writing '{format}' format."); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -50,7 +50,7 @@ protected virtual ChatToolChoice JsonModelCreateCore(ref Utf8JsonReader reader, throw new FormatException($"The model {nameof(ChatToolChoice)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return ChatToolChoice.DeserializeChatToolChoice(document.RootElement, options); + return DeserializeChatToolChoice(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -77,7 +77,7 @@ protected virtual ChatToolChoice PersistableModelCreateCore(BinaryData data, Mod case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return ChatToolChoice.DeserializeChatToolChoice(document.RootElement, options); + return DeserializeChatToolChoice(document.RootElement, options); } default: throw new FormatException($"The model {nameof(ChatToolChoice)} does not support reading '{options.Format}' format."); @@ -99,7 +99,7 @@ public static explicit operator ChatToolChoice(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return ChatToolChoice.DeserializeChatToolChoice(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeChatToolChoice(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/ChatToolKind.Serialization.cs b/src/Generated/Models/ChatToolKind.Serialization.cs index 4191a8230..d7f4d07f9 100644 --- a/src/Generated/Models/ChatToolKind.Serialization.cs +++ b/src/Generated/Models/ChatToolKind.Serialization.cs @@ -8,17 +8,17 @@ namespace OpenAI.Chat { internal static partial class ChatToolKindExtensions { - public static string ToSerialString(this Chat.ChatToolKind value) => value switch + public static string ToSerialString(this ChatToolKind value) => value switch { - Chat.ChatToolKind.Function => "function", + ChatToolKind.Function => "function", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ChatToolKind value.") }; - public static Chat.ChatToolKind ToChatToolKind(this string value) + public static ChatToolKind ToChatToolKind(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "function")) { - return Chat.ChatToolKind.Function; + return ChatToolKind.Function; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ChatToolKind value."); } diff --git a/src/Generated/Models/ChatWebSearchOptions.Serialization.cs b/src/Generated/Models/ChatWebSearchOptions.Serialization.cs new file mode 100644 index 000000000..8286978f7 --- /dev/null +++ b/src/Generated/Models/ChatWebSearchOptions.Serialization.cs @@ -0,0 +1,159 @@ +// + +#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 +{ + public partial class ChatWebSearchOptions : 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(ChatWebSearchOptions)} does not support writing '{format}' format."); + } + 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()); + } + 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 + } + } + } + + ChatWebSearchOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual ChatWebSearchOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ChatWebSearchOptions)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeChatWebSearchOptions(document.RootElement, options); + } + + internal static ChatWebSearchOptions DeserializeChatWebSearchOptions(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 userLocation = default; + InternalWebSearchContextSize? searchContextSize = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("user_location"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + userLocation = null; + continue; + } + userLocation = InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.DeserializeInternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(prop.Value, options); + continue; + } + if (prop.NameEquals("search_context_size"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + searchContextSize = new InternalWebSearchContextSize(prop.Value.GetString()); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ChatWebSearchOptions(userLocation, searchContextSize, 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(ChatWebSearchOptions)} does not support writing '{options.Format}' format."); + } + } + + ChatWebSearchOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual ChatWebSearchOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeChatWebSearchOptions(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ChatWebSearchOptions)} does not support reading '{options.Format}' format."); + } + } + + 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/ChatWebSearchOptions.cs b/src/Generated/Models/ChatWebSearchOptions.cs new file mode 100644 index 000000000..0ae70d025 --- /dev/null +++ b/src/Generated/Models/ChatWebSearchOptions.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Internal; + +namespace OpenAI.Chat +{ + public partial class ChatWebSearchOptions + { + private protected IDictionary _additionalBinaryDataProperties; + + public ChatWebSearchOptions() + { + } + + internal ChatWebSearchOptions(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 userLocation, InternalWebSearchContextSize? searchContextSize, IDictionary additionalBinaryDataProperties) + { + UserLocation = userLocation; + SearchContextSize = searchContextSize; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs b/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs index 92cb9c4ec..ba5eac264 100644 --- a/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs +++ b/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs @@ -51,10 +51,7 @@ internal static CodeInterpreterToolDefinition DeserializeCodeInterpreterToolDefi @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new CodeInterpreterToolDefinition(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs b/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs index 6798b11b8..654b7a04f 100644 --- a/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs +++ b/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static CodeInterpreterToolResources DeserializeCodeInterpreterToolResou fileIds = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new CodeInterpreterToolResources(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ComputerCallAction.Serialization.cs b/src/Generated/Models/ComputerCallAction.Serialization.cs new file mode 100644 index 000000000..58acd7239 --- /dev/null +++ b/src/Generated/Models/ComputerCallAction.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class ComputerCallAction : IJsonModel + { + internal ComputerCallAction() + { + } + + 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(ComputerCallAction)} 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 + } + } + } + + ComputerCallAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual 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 ComputerCallAction DeserializeComputerCallAction(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "click": + return InternalResponsesComputerCallClickAction.DeserializeInternalResponsesComputerCallClickAction(element, options); + case "double_click": + return InternalResponsesComputerCallDoubleClickAction.DeserializeInternalResponsesComputerCallDoubleClickAction(element, options); + case "scroll": + return InternalResponsesComputerCallScrollAction.DeserializeInternalResponsesComputerCallScrollAction(element, options); + case "screenshot": + return InternalResponsesComputerCallScreenshotAction.DeserializeInternalResponsesComputerCallScreenshotAction(element, options); + case "type": + return InternalResponsesComputerCallTypeAction.DeserializeInternalResponsesComputerCallTypeAction(element, options); + case "wait": + return InternalResponsesComputerCallWaitAction.DeserializeInternalResponsesComputerCallWaitAction(element, options); + case "keypress": + return InternalResponsesComputerCallKeyPressAction.DeserializeInternalResponsesComputerCallKeyPressAction(element, options); + case "drag": + return InternalResponsesComputerCallDragAction.DeserializeInternalResponsesComputerCallDragAction(element, options); + case "move": + return InternalResponsesComputerCallMoveAction.DeserializeInternalResponsesComputerCallMoveAction(element, options); + } + } + return UnknownResponsesComputerCallItemAction.DeserializeUnknownResponsesComputerCallItemAction(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(ComputerCallAction)} does not support writing '{options.Format}' format."); + } + } + + ComputerCallAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual 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"; + + 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 new file mode 100644 index 000000000..8106f6fa4 --- /dev/null +++ b/src/Generated/Models/ComputerCallAction.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ComputerCallAction + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected ComputerCallAction(ComputerCallActionKind kind) + { + Kind = kind; + } + + internal ComputerCallAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ComputerCallActionKind.Serialization.cs b/src/Generated/Models/ComputerCallActionKind.Serialization.cs new file mode 100644 index 000000000..aca7ca0ea --- /dev/null +++ b/src/Generated/Models/ComputerCallActionKind.Serialization.cs @@ -0,0 +1,66 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + internal static partial class ComputerCallActionKindExtensions + { + public static string ToSerialString(this ComputerCallActionKind value) => value switch + { + ComputerCallActionKind.Screenshot => "screenshot", + ComputerCallActionKind.Click => "click", + ComputerCallActionKind.DoubleClick => "double_click", + ComputerCallActionKind.Scroll => "scroll", + ComputerCallActionKind.Type => "type", + ComputerCallActionKind.Wait => "wait", + ComputerCallActionKind.KeyPress => "keypress", + ComputerCallActionKind.Drag => "drag", + ComputerCallActionKind.Move => "move", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ComputerCallActionKind value.") + }; + + public static ComputerCallActionKind ToComputerCallActionKind(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "screenshot")) + { + return ComputerCallActionKind.Screenshot; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "click")) + { + return ComputerCallActionKind.Click; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "double_click")) + { + return ComputerCallActionKind.DoubleClick; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "scroll")) + { + return ComputerCallActionKind.Scroll; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "type")) + { + return ComputerCallActionKind.Type; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "wait")) + { + return ComputerCallActionKind.Wait; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "keypress")) + { + return ComputerCallActionKind.KeyPress; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "drag")) + { + return ComputerCallActionKind.Drag; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "move")) + { + return ComputerCallActionKind.Move; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ComputerCallActionKind value."); + } + } +} diff --git a/src/Generated/Models/ComputerCallActionMouseButton.Serialization.cs b/src/Generated/Models/ComputerCallActionMouseButton.Serialization.cs new file mode 100644 index 000000000..11dfe658c --- /dev/null +++ b/src/Generated/Models/ComputerCallActionMouseButton.Serialization.cs @@ -0,0 +1,46 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + internal static partial class ComputerCallActionMouseButtonExtensions + { + public static string ToSerialString(this ComputerCallActionMouseButton value) => value switch + { + ComputerCallActionMouseButton.Left => "left", + ComputerCallActionMouseButton.Right => "right", + ComputerCallActionMouseButton.Wheel => "wheel", + ComputerCallActionMouseButton.Back => "back", + ComputerCallActionMouseButton.Forward => "forward,", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ComputerCallActionMouseButton value.") + }; + + public static ComputerCallActionMouseButton ToComputerCallActionMouseButton(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "left")) + { + return ComputerCallActionMouseButton.Left; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "right")) + { + return ComputerCallActionMouseButton.Right; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "wheel")) + { + return ComputerCallActionMouseButton.Wheel; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "back")) + { + return ComputerCallActionMouseButton.Back; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "forward,")) + { + return ComputerCallActionMouseButton.Forward; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ComputerCallActionMouseButton value."); + } + } +} diff --git a/src/Generated/Models/ComputerCallOutputResponseItem.Serialization.cs b/src/Generated/Models/ComputerCallOutputResponseItem.Serialization.cs new file mode 100644 index 000000000..4b4c2fb91 --- /dev/null +++ b/src/Generated/Models/ComputerCallOutputResponseItem.Serialization.cs @@ -0,0 +1,190 @@ +// + +#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 ComputerCallOutputResponseItem : IJsonModel + { + internal ComputerCallOutputResponseItem() + { + } + + 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(ComputerCallOutputResponseItem)} 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("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); + } + if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.Value.ToSerialString()); + } + } + + ComputerCallOutputResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ComputerCallOutputResponseItem)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(ComputerCallOutputResponseItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeComputerCallOutputResponseItem(document.RootElement, options); + } + + internal static ComputerCallOutputResponseItem DeserializeComputerCallOutputResponseItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesItemType @type = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string callId = default; + IList acknowledgedSafetyChecks = default; + ComputerOutput output = default; + ComputerCallOutputStatus? status = 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("call_id"u8)) + { + callId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("acknowledged_safety_checks"u8)) + { + 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; + } + if (prop.NameEquals("status"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + status = prop.Value.GetString().ToComputerCallOutputStatus(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ComputerCallOutputResponseItem( + @type, + id, + additionalBinaryDataProperties, + callId, + acknowledgedSafetyChecks, + output, + status); + } + + 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(ComputerCallOutputResponseItem)} does not support writing '{options.Format}' format."); + } + } + + ComputerCallOutputResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ComputerCallOutputResponseItem)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 DeserializeComputerCallOutputResponseItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ComputerCallOutputResponseItem)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..b045d3eb6 --- /dev/null +++ b/src/Generated/Models/ComputerCallOutputResponseItem.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +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) + { + Argument.AssertNotNull(callId, nameof(callId)); + Argument.AssertNotNull(acknowledgedSafetyChecks, nameof(acknowledgedSafetyChecks)); + Argument.AssertNotNull(output, nameof(output)); + + CallId = callId; + AcknowledgedSafetyChecks = acknowledgedSafetyChecks.ToList(); + Output = output; + } + + internal ComputerCallOutputResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, string callId, IList acknowledgedSafetyChecks, ComputerOutput output, ComputerCallOutputStatus? status) : base(@type, id, additionalBinaryDataProperties) + { + CallId = callId; + AcknowledgedSafetyChecks = acknowledgedSafetyChecks; + Output = output; + Status = status; + } + + public string CallId { get; set; } + + public IList AcknowledgedSafetyChecks { get; } + + public ComputerOutput Output { get; set; } + + public ComputerCallOutputStatus? Status { get; } + } +} diff --git a/src/Generated/Models/ComputerCallOutputStatus.Serialization.cs b/src/Generated/Models/ComputerCallOutputStatus.Serialization.cs new file mode 100644 index 000000000..688b534a0 --- /dev/null +++ b/src/Generated/Models/ComputerCallOutputStatus.Serialization.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + internal static partial class ComputerCallOutputStatusExtensions + { + public static string ToSerialString(this ComputerCallOutputStatus value) => value switch + { + ComputerCallOutputStatus.InProgress => "in_progress", + ComputerCallOutputStatus.Completed => "completed", + ComputerCallOutputStatus.Incomplete => "incomplete", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ComputerCallOutputStatus value.") + }; + + public static ComputerCallOutputStatus ToComputerCallOutputStatus(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) + { + return ComputerCallOutputStatus.InProgress; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "completed")) + { + return ComputerCallOutputStatus.Completed; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "incomplete")) + { + return ComputerCallOutputStatus.Incomplete; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ComputerCallOutputStatus value."); + } + } +} diff --git a/src/Generated/Models/ComputerCallResponseItem.Serialization.cs b/src/Generated/Models/ComputerCallResponseItem.Serialization.cs new file mode 100644 index 000000000..a9e1bd82f --- /dev/null +++ b/src/Generated/Models/ComputerCallResponseItem.Serialization.cs @@ -0,0 +1,186 @@ +// + +#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 ComputerCallResponseItem : IJsonModel + { + internal ComputerCallResponseItem() + { + } + + 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(ComputerCallResponseItem)} 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(); + } + if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToSerialString()); + } + } + + ComputerCallResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ComputerCallResponseItem)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(ComputerCallResponseItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeComputerCallResponseItem(document.RootElement, options); + } + + internal static ComputerCallResponseItem DeserializeComputerCallResponseItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesItemType @type = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string callId = default; + ComputerCallAction action = default; + IList pendingSafetyChecks = default; + ComputerCallStatus status = 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("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; + } + if (prop.NameEquals("status"u8)) + { + status = prop.Value.GetString().ToComputerCallStatus(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ComputerCallResponseItem( + @type, + id, + additionalBinaryDataProperties, + callId, + action, + pendingSafetyChecks, + status); + } + + 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(ComputerCallResponseItem)} does not support writing '{options.Format}' format."); + } + } + + ComputerCallResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ComputerCallResponseItem)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 DeserializeComputerCallResponseItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ComputerCallResponseItem)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..412735e83 --- /dev/null +++ b/src/Generated/Models/ComputerCallResponseItem.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ComputerCallResponseItem : ResponseItem + { + internal ComputerCallResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, string callId, ComputerCallAction action, IList pendingSafetyChecks, ComputerCallStatus status) : base(@type, id, additionalBinaryDataProperties) + { + CallId = callId; + Action = action; + PendingSafetyChecks = pendingSafetyChecks; + Status = status; + } + + public string CallId { get; set; } + + public ComputerCallAction Action { get; set; } + + public IList PendingSafetyChecks { get; } + + public ComputerCallStatus Status { get; } + } +} diff --git a/src/Generated/Models/ComputerCallSafetyCheck.Serialization.cs b/src/Generated/Models/ComputerCallSafetyCheck.Serialization.cs new file mode 100644 index 000000000..c16597217 --- /dev/null +++ b/src/Generated/Models/ComputerCallSafetyCheck.Serialization.cs @@ -0,0 +1,164 @@ +// + +#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 ComputerCallSafetyCheck : IJsonModel + { + internal ComputerCallSafetyCheck() + { + } + + 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(ComputerCallSafetyCheck)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + 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 != 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 + } + } + } + + ComputerCallSafetyCheck IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual ComputerCallSafetyCheck JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ComputerCallSafetyCheck)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeComputerCallSafetyCheck(document.RootElement, options); + } + + internal static ComputerCallSafetyCheck DeserializeComputerCallSafetyCheck(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string id = default; + string code = default; + string message = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("code"u8)) + { + code = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("message"u8)) + { + message = prop.Value.GetString(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ComputerCallSafetyCheck(id, code, 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(ComputerCallSafetyCheck)} does not support writing '{options.Format}' format."); + } + } + + ComputerCallSafetyCheck IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual ComputerCallSafetyCheck PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeComputerCallSafetyCheck(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ComputerCallSafetyCheck)} does not support reading '{options.Format}' format."); + } + } + + 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/ComputerCallSafetyCheck.cs b/src/Generated/Models/ComputerCallSafetyCheck.cs new file mode 100644 index 000000000..e6adbdff3 --- /dev/null +++ b/src/Generated/Models/ComputerCallSafetyCheck.cs @@ -0,0 +1,46 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class ComputerCallSafetyCheck + { + private protected IDictionary _additionalBinaryDataProperties; + + public ComputerCallSafetyCheck(string id, string code, string message) + { + Argument.AssertNotNull(id, nameof(id)); + Argument.AssertNotNull(code, nameof(code)); + Argument.AssertNotNull(message, nameof(message)); + + Id = id; + Code = code; + Message = message; + } + + internal ComputerCallSafetyCheck(string id, string code, string message, IDictionary additionalBinaryDataProperties) + { + Id = id; + Code = code; + Message = message; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Id { get; set; } + + public string Code { get; set; } + + public string Message { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ComputerCallStatus.Serialization.cs b/src/Generated/Models/ComputerCallStatus.Serialization.cs new file mode 100644 index 000000000..375152849 --- /dev/null +++ b/src/Generated/Models/ComputerCallStatus.Serialization.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + internal static partial class ComputerCallStatusExtensions + { + public static string ToSerialString(this ComputerCallStatus value) => value switch + { + ComputerCallStatus.InProgress => "in_progress", + ComputerCallStatus.Completed => "completed", + ComputerCallStatus.Incomplete => "incomplete", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ComputerCallStatus value.") + }; + + public static ComputerCallStatus ToComputerCallStatus(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) + { + return ComputerCallStatus.InProgress; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "completed")) + { + return ComputerCallStatus.Completed; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "incomplete")) + { + return ComputerCallStatus.Incomplete; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ComputerCallStatus value."); + } + } +} diff --git a/src/Generated/Models/ComputerOutput.Serialization.cs b/src/Generated/Models/ComputerOutput.Serialization.cs new file mode 100644 index 000000000..7a02edd2b --- /dev/null +++ b/src/Generated/Models/ComputerOutput.Serialization.cs @@ -0,0 +1,138 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class ComputerOutput : IJsonModel + { + internal ComputerOutput() + { + } + + 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(ComputerOutput)} 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 + } + } + } + + ComputerOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual 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 ComputerOutput DeserializeComputerOutput(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "computer_screenshot": + return InternalResponsesComputerCallOutputItemScreenshot.DeserializeInternalResponsesComputerCallOutputItemScreenshot(element, options); + } + } + return UnknownResponsesComputerCallOutputItemOutput.DeserializeUnknownResponsesComputerCallOutputItemOutput(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(ComputerOutput)} does not support writing '{options.Format}' format."); + } + } + + ComputerOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual 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"; + + 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 new file mode 100644 index 000000000..7f71bbc0f --- /dev/null +++ b/src/Generated/Models/ComputerOutput.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ComputerOutput + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected ComputerOutput(InternalResponsesComputerCallOutputItemOutputType @type) + { + Type = @type; + } + + internal ComputerOutput(InternalResponsesComputerCallOutputItemOutputType @type, IDictionary additionalBinaryDataProperties) + { + Type = @type; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalResponsesComputerCallOutputItemOutputType Type { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ComputerToolEnvironment.cs b/src/Generated/Models/ComputerToolEnvironment.cs new file mode 100644 index 000000000..7a38cc801 --- /dev/null +++ b/src/Generated/Models/ComputerToolEnvironment.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + public readonly partial struct ComputerToolEnvironment : IEquatable + { + private readonly string _value; + private const string WindowsValue = "windows"; + private const string MacValue = "mac"; + private const string UbuntuValue = "ubuntu"; + private const string BrowserValue = "browser"; + + public ComputerToolEnvironment(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static ComputerToolEnvironment Windows { get; } = new ComputerToolEnvironment(WindowsValue); + + public static ComputerToolEnvironment Mac { get; } = new ComputerToolEnvironment(MacValue); + + public static ComputerToolEnvironment Ubuntu { get; } = new ComputerToolEnvironment(UbuntuValue); + + public static ComputerToolEnvironment Browser { get; } = new ComputerToolEnvironment(BrowserValue); + + public static bool operator ==(ComputerToolEnvironment left, ComputerToolEnvironment right) => left.Equals(right); + + public static bool operator !=(ComputerToolEnvironment left, ComputerToolEnvironment right) => !left.Equals(right); + + public static implicit operator ComputerToolEnvironment(string value) => new ComputerToolEnvironment(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is ComputerToolEnvironment other && Equals(other); + + public bool Equals(ComputerToolEnvironment 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 76066d621..0aed7054a 100644 --- a/src/Generated/Models/ConversationContentPart.Serialization.cs +++ b/src/Generated/Models/ConversationContentPart.Serialization.cs @@ -10,8 +10,7 @@ namespace OpenAI.RealtimeConversation { - [PersistableModelProxy(typeof(UnknownRealtimeContentPart))] - public abstract partial class ConversationContentPart : IJsonModel + public partial class ConversationContentPart : IJsonModel { internal ConversationContentPart() { @@ -36,7 +35,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/ConversationContentPart.cs b/src/Generated/Models/ConversationContentPart.cs index fe35eb936..492258a0b 100644 --- a/src/Generated/Models/ConversationContentPart.cs +++ b/src/Generated/Models/ConversationContentPart.cs @@ -7,7 +7,7 @@ namespace OpenAI.RealtimeConversation { - public abstract partial class ConversationContentPart + public partial class ConversationContentPart { private protected IDictionary _additionalBinaryDataProperties; diff --git a/src/Generated/Models/ConversationErrorUpdate.Serialization.cs b/src/Generated/Models/ConversationErrorUpdate.Serialization.cs index 2dc634db0..78e6e7ebc 100644 --- a/src/Generated/Models/ConversationErrorUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationErrorUpdate.Serialization.cs @@ -35,7 +35,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("error") != true) { writer.WritePropertyName("error"u8); - writer.WriteObjectValue(_error, options); + writer.WriteObjectValue(_error, options); } } @@ -59,7 +59,7 @@ internal static ConversationErrorUpdate DeserializeConversationErrorUpdate(JsonE return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRealtimeServerEventErrorError error = default; foreach (var prop in element.EnumerateObject()) @@ -79,10 +79,7 @@ internal static ConversationErrorUpdate DeserializeConversationErrorUpdate(JsonE error = InternalRealtimeServerEventErrorError.DeserializeInternalRealtimeServerEventErrorError(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationErrorUpdate(eventId, kind, additionalBinaryDataProperties, error); } diff --git a/src/Generated/Models/ConversationErrorUpdate.cs b/src/Generated/Models/ConversationErrorUpdate.cs index 706445488..92308e209 100644 --- a/src/Generated/Models/ConversationErrorUpdate.cs +++ b/src/Generated/Models/ConversationErrorUpdate.cs @@ -9,12 +9,12 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationErrorUpdate : ConversationUpdate { - internal ConversationErrorUpdate(string eventId, InternalRealtimeServerEventErrorError error) : base(eventId, RealtimeConversation.ConversationUpdateKind.Error) + internal ConversationErrorUpdate(string eventId, InternalRealtimeServerEventErrorError error) : base(eventId, ConversationUpdateKind.Error) { _error = error; } - internal ConversationErrorUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeServerEventErrorError error) : base(eventId, kind, additionalBinaryDataProperties) + 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 430145248..3b0c33fa9 100644 --- a/src/Generated/Models/ConversationFunctionTool.Serialization.cs +++ b/src/Generated/Models/ConversationFunctionTool.Serialization.cs @@ -102,10 +102,7 @@ internal static ConversationFunctionTool DeserializeConversationFunctionTool(Jso parameters = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationFunctionTool(kind, additionalBinaryDataProperties, name, description, parameters); } diff --git a/src/Generated/Models/ConversationInputAudioClearedUpdate.Serialization.cs b/src/Generated/Models/ConversationInputAudioClearedUpdate.Serialization.cs index 2ea91978a..33ab7c70c 100644 --- a/src/Generated/Models/ConversationInputAudioClearedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationInputAudioClearedUpdate.Serialization.cs @@ -54,7 +54,7 @@ internal static ConversationInputAudioClearedUpdate DeserializeConversationInput return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -68,10 +68,7 @@ internal static ConversationInputAudioClearedUpdate DeserializeConversationInput kind = prop.Value.GetString().ToConversationUpdateKind(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationInputAudioClearedUpdate(eventId, kind, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ConversationInputAudioClearedUpdate.cs b/src/Generated/Models/ConversationInputAudioClearedUpdate.cs index ce6fc9d78..60f01f580 100644 --- a/src/Generated/Models/ConversationInputAudioClearedUpdate.cs +++ b/src/Generated/Models/ConversationInputAudioClearedUpdate.cs @@ -9,11 +9,11 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationInputAudioClearedUpdate : ConversationUpdate { - internal ConversationInputAudioClearedUpdate(string eventId) : base(eventId, RealtimeConversation.ConversationUpdateKind.InputAudioCleared) + internal ConversationInputAudioClearedUpdate(string eventId) : base(eventId, ConversationUpdateKind.InputAudioCleared) { } - internal ConversationInputAudioClearedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties) : base(eventId, kind, additionalBinaryDataProperties) + 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 index f111f6e0c..9395b4931 100644 --- a/src/Generated/Models/ConversationInputAudioCommittedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationInputAudioCommittedUpdate.Serialization.cs @@ -64,7 +64,7 @@ internal static ConversationInputAudioCommittedUpdate DeserializeConversationInp return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string previousItemId = default; string itemId = default; @@ -90,10 +90,7 @@ internal static ConversationInputAudioCommittedUpdate DeserializeConversationInp itemId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationInputAudioCommittedUpdate(eventId, kind, additionalBinaryDataProperties, previousItemId, itemId); } diff --git a/src/Generated/Models/ConversationInputAudioCommittedUpdate.cs b/src/Generated/Models/ConversationInputAudioCommittedUpdate.cs index 7368ff34e..a95ccecf8 100644 --- a/src/Generated/Models/ConversationInputAudioCommittedUpdate.cs +++ b/src/Generated/Models/ConversationInputAudioCommittedUpdate.cs @@ -9,13 +9,13 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationInputAudioCommittedUpdate : ConversationUpdate { - internal ConversationInputAudioCommittedUpdate(string eventId, string previousItemId, string itemId) : base(eventId, RealtimeConversation.ConversationUpdateKind.InputAudioCommitted) + internal ConversationInputAudioCommittedUpdate(string eventId, string previousItemId, string itemId) : base(eventId, ConversationUpdateKind.InputAudioCommitted) { PreviousItemId = previousItemId; ItemId = itemId; } - internal ConversationInputAudioCommittedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string previousItemId, string itemId) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationInputAudioCommittedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string previousItemId, string itemId) : base(eventId, kind, additionalBinaryDataProperties) { PreviousItemId = previousItemId; ItemId = itemId; diff --git a/src/Generated/Models/ConversationInputSpeechFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationInputSpeechFinishedUpdate.Serialization.cs index 3a8e0872c..1165e0b7a 100644 --- a/src/Generated/Models/ConversationInputSpeechFinishedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationInputSpeechFinishedUpdate.Serialization.cs @@ -64,7 +64,7 @@ internal static ConversationInputSpeechFinishedUpdate DeserializeConversationInp return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int audioEndMs = default; @@ -90,10 +90,7 @@ internal static ConversationInputSpeechFinishedUpdate DeserializeConversationInp audioEndMs = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationInputSpeechFinishedUpdate(eventId, kind, additionalBinaryDataProperties, itemId, audioEndMs); } diff --git a/src/Generated/Models/ConversationInputSpeechFinishedUpdate.cs b/src/Generated/Models/ConversationInputSpeechFinishedUpdate.cs index 34f97eeca..8a87f335c 100644 --- a/src/Generated/Models/ConversationInputSpeechFinishedUpdate.cs +++ b/src/Generated/Models/ConversationInputSpeechFinishedUpdate.cs @@ -9,13 +9,13 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationInputSpeechFinishedUpdate : ConversationUpdate { - internal ConversationInputSpeechFinishedUpdate(string eventId, string itemId, int audioEndMs) : base(eventId, RealtimeConversation.ConversationUpdateKind.InputSpeechStopped) + internal ConversationInputSpeechFinishedUpdate(string eventId, string itemId, int audioEndMs) : base(eventId, ConversationUpdateKind.InputSpeechStopped) { ItemId = itemId; _audioEndMs = audioEndMs; } - internal ConversationInputSpeechFinishedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int audioEndMs) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationInputSpeechFinishedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int audioEndMs) : base(eventId, kind, additionalBinaryDataProperties) { ItemId = itemId; _audioEndMs = audioEndMs; diff --git a/src/Generated/Models/ConversationInputSpeechStartedUpdate.Serialization.cs b/src/Generated/Models/ConversationInputSpeechStartedUpdate.Serialization.cs index 69ec19c46..92cba99ef 100644 --- a/src/Generated/Models/ConversationInputSpeechStartedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationInputSpeechStartedUpdate.Serialization.cs @@ -64,7 +64,7 @@ internal static ConversationInputSpeechStartedUpdate DeserializeConversationInpu return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int audioStartMs = default; @@ -90,10 +90,7 @@ internal static ConversationInputSpeechStartedUpdate DeserializeConversationInpu audioStartMs = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationInputSpeechStartedUpdate(eventId, kind, additionalBinaryDataProperties, itemId, audioStartMs); } diff --git a/src/Generated/Models/ConversationInputSpeechStartedUpdate.cs b/src/Generated/Models/ConversationInputSpeechStartedUpdate.cs index 3c66eb859..cad996091 100644 --- a/src/Generated/Models/ConversationInputSpeechStartedUpdate.cs +++ b/src/Generated/Models/ConversationInputSpeechStartedUpdate.cs @@ -9,13 +9,13 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationInputSpeechStartedUpdate : ConversationUpdate { - internal ConversationInputSpeechStartedUpdate(string eventId, string itemId, int audioStartMs) : base(eventId, RealtimeConversation.ConversationUpdateKind.InputSpeechStarted) + internal ConversationInputSpeechStartedUpdate(string eventId, string itemId, int audioStartMs) : base(eventId, ConversationUpdateKind.InputSpeechStarted) { ItemId = itemId; _audioStartMs = audioStartMs; } - internal ConversationInputSpeechStartedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int audioStartMs) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationInputSpeechStartedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int audioStartMs) : base(eventId, kind, additionalBinaryDataProperties) { ItemId = itemId; _audioStartMs = audioStartMs; diff --git a/src/Generated/Models/ConversationInputTokenUsageDetails.Serialization.cs b/src/Generated/Models/ConversationInputTokenUsageDetails.Serialization.cs index f5902b67d..f7224a050 100644 --- a/src/Generated/Models/ConversationInputTokenUsageDetails.Serialization.cs +++ b/src/Generated/Models/ConversationInputTokenUsageDetails.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text_tokens"u8); writer.WriteNumberValue(TextTokenCount); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -115,10 +115,7 @@ internal static ConversationInputTokenUsageDetails DeserializeConversationInputT textTokenCount = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationInputTokenUsageDetails(audioTokenCount, cachedTokenCount, textTokenCount, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.Serialization.cs b/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.Serialization.cs index 885a53b40..e41908367 100644 --- a/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.Serialization.cs @@ -45,7 +45,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("error") != true) { writer.WritePropertyName("error"u8); - writer.WriteObjectValue(_error, options); + writer.WriteObjectValue(_error, options); } } @@ -69,7 +69,7 @@ internal static ConversationInputTranscriptionFailedUpdate DeserializeConversati return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int contentIndex = default; @@ -101,10 +101,7 @@ internal static ConversationInputTranscriptionFailedUpdate DeserializeConversati error = InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.DeserializeInternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationInputTranscriptionFailedUpdate( eventId, diff --git a/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.cs b/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.cs index e9d2017ac..2a5c5d58d 100644 --- a/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.cs +++ b/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.cs @@ -9,14 +9,14 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationInputTranscriptionFailedUpdate : ConversationUpdate { - internal ConversationInputTranscriptionFailedUpdate(string eventId, string itemId, int contentIndex, InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError error) : base(eventId, RealtimeConversation.ConversationUpdateKind.InputTranscriptionFailed) + internal ConversationInputTranscriptionFailedUpdate(string eventId, string itemId, int contentIndex, InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError error) : base(eventId, ConversationUpdateKind.InputTranscriptionFailed) { ItemId = itemId; ContentIndex = contentIndex; _error = error; } - internal ConversationInputTranscriptionFailedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError error) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationInputTranscriptionFailedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError error) : base(eventId, kind, additionalBinaryDataProperties) { ItemId = itemId; ContentIndex = contentIndex; diff --git a/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.Serialization.cs index 03a517a46..d722d838b 100644 --- a/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.Serialization.cs @@ -69,7 +69,7 @@ internal static ConversationInputTranscriptionFinishedUpdate DeserializeConversa return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int contentIndex = default; @@ -101,10 +101,7 @@ internal static ConversationInputTranscriptionFinishedUpdate DeserializeConversa transcript = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationInputTranscriptionFinishedUpdate( eventId, diff --git a/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.cs b/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.cs index d96e14344..261aa9878 100644 --- a/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.cs +++ b/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.cs @@ -9,14 +9,14 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationInputTranscriptionFinishedUpdate : ConversationUpdate { - internal ConversationInputTranscriptionFinishedUpdate(string eventId, string itemId, int contentIndex, string transcript) : base(eventId, RealtimeConversation.ConversationUpdateKind.InputTranscriptionFinished) + internal ConversationInputTranscriptionFinishedUpdate(string eventId, string itemId, int contentIndex, string transcript) : base(eventId, ConversationUpdateKind.InputTranscriptionFinished) { ItemId = itemId; ContentIndex = contentIndex; Transcript = transcript; } - internal ConversationInputTranscriptionFinishedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, string transcript) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationInputTranscriptionFinishedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, string transcript) : base(eventId, kind, additionalBinaryDataProperties) { ItemId = itemId; ContentIndex = contentIndex; diff --git a/src/Generated/Models/ConversationInputTranscriptionOptions.Serialization.cs b/src/Generated/Models/ConversationInputTranscriptionOptions.Serialization.cs index a6183f7b6..eb8b7632d 100644 --- a/src/Generated/Models/ConversationInputTranscriptionOptions.Serialization.cs +++ b/src/Generated/Models/ConversationInputTranscriptionOptions.Serialization.cs @@ -32,7 +32,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("model"u8); writer.WriteStringValue(Model.Value.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static ConversationInputTranscriptionOptions DeserializeConversationInp model = new ConversationTranscriptionModel(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationInputTranscriptionOptions(model, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ConversationItem.Serialization.cs b/src/Generated/Models/ConversationItem.Serialization.cs index 111d83747..458247615 100644 --- a/src/Generated/Models/ConversationItem.Serialization.cs +++ b/src/Generated/Models/ConversationItem.Serialization.cs @@ -10,8 +10,7 @@ namespace OpenAI.RealtimeConversation { - [PersistableModelProxy(typeof(UnknownRealtimeRequestItem))] - public abstract partial class ConversationItem : IJsonModel + public partial class ConversationItem : IJsonModel { internal ConversationItem() { @@ -41,7 +40,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("id"u8); writer.WriteStringValue(Id); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/ConversationItem.cs b/src/Generated/Models/ConversationItem.cs index 90e10fc28..988f94a36 100644 --- a/src/Generated/Models/ConversationItem.cs +++ b/src/Generated/Models/ConversationItem.cs @@ -7,7 +7,7 @@ namespace OpenAI.RealtimeConversation { - public abstract partial class ConversationItem + public partial class ConversationItem { private protected IDictionary _additionalBinaryDataProperties; diff --git a/src/Generated/Models/ConversationItemCreatedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemCreatedUpdate.Serialization.cs index 62b71004a..943a2dc3c 100644 --- a/src/Generated/Models/ConversationItemCreatedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationItemCreatedUpdate.Serialization.cs @@ -40,7 +40,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("item") != true) { writer.WritePropertyName("item"u8); - writer.WriteObjectValue(_internalItem, options); + writer.WriteObjectValue(_internalItem, options); } } @@ -64,7 +64,7 @@ internal static ConversationItemCreatedUpdate DeserializeConversationItemCreated return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string previousItemId = default; InternalRealtimeConversationResponseItem internalItem = default; @@ -90,10 +90,7 @@ internal static ConversationItemCreatedUpdate DeserializeConversationItemCreated internalItem = InternalRealtimeConversationResponseItem.DeserializeInternalRealtimeConversationResponseItem(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationItemCreatedUpdate(eventId, kind, additionalBinaryDataProperties, previousItemId, internalItem); } diff --git a/src/Generated/Models/ConversationItemCreatedUpdate.cs b/src/Generated/Models/ConversationItemCreatedUpdate.cs index 23da0c644..6158ea73c 100644 --- a/src/Generated/Models/ConversationItemCreatedUpdate.cs +++ b/src/Generated/Models/ConversationItemCreatedUpdate.cs @@ -9,13 +9,13 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationItemCreatedUpdate : ConversationUpdate { - internal ConversationItemCreatedUpdate(string eventId, string previousItemId, InternalRealtimeConversationResponseItem internalItem) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemCreated) + internal ConversationItemCreatedUpdate(string eventId, string previousItemId, InternalRealtimeConversationResponseItem internalItem) : base(eventId, ConversationUpdateKind.ItemCreated) { PreviousItemId = previousItemId; _internalItem = internalItem; } - internal ConversationItemCreatedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string previousItemId, InternalRealtimeConversationResponseItem internalItem) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationItemCreatedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string previousItemId, InternalRealtimeConversationResponseItem internalItem) : base(eventId, kind, additionalBinaryDataProperties) { PreviousItemId = previousItemId; _internalItem = internalItem; diff --git a/src/Generated/Models/ConversationItemDeletedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemDeletedUpdate.Serialization.cs index 73928f1ee..60af8a2ea 100644 --- a/src/Generated/Models/ConversationItemDeletedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationItemDeletedUpdate.Serialization.cs @@ -59,7 +59,7 @@ internal static ConversationItemDeletedUpdate DeserializeConversationItemDeleted return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; foreach (var prop in element.EnumerateObject()) @@ -79,10 +79,7 @@ internal static ConversationItemDeletedUpdate DeserializeConversationItemDeleted itemId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationItemDeletedUpdate(eventId, kind, additionalBinaryDataProperties, itemId); } diff --git a/src/Generated/Models/ConversationItemDeletedUpdate.cs b/src/Generated/Models/ConversationItemDeletedUpdate.cs index cf51f880f..c13b7b4fc 100644 --- a/src/Generated/Models/ConversationItemDeletedUpdate.cs +++ b/src/Generated/Models/ConversationItemDeletedUpdate.cs @@ -9,12 +9,12 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationItemDeletedUpdate : ConversationUpdate { - internal ConversationItemDeletedUpdate(string eventId, string itemId) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemDeleted) + internal ConversationItemDeletedUpdate(string eventId, string itemId) : base(eventId, ConversationUpdateKind.ItemDeleted) { ItemId = itemId; } - internal ConversationItemDeletedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationItemDeletedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId) : base(eventId, kind, additionalBinaryDataProperties) { ItemId = itemId; } diff --git a/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.Serialization.cs index ac6ea7c7c..3cfbbea93 100644 --- a/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.Serialization.cs @@ -74,7 +74,7 @@ internal static ConversationItemStreamingAudioFinishedUpdate DeserializeConversa return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -112,10 +112,7 @@ internal static ConversationItemStreamingAudioFinishedUpdate DeserializeConversa contentIndex = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationItemStreamingAudioFinishedUpdate( eventId, diff --git a/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.cs b/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.cs index 95ff09046..13b867c1f 100644 --- a/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.cs +++ b/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationItemStreamingAudioFinishedUpdate : ConversationUpdate { - internal ConversationItemStreamingAudioFinishedUpdate(string eventId, string responseId, string itemId, int outputIndex, int contentIndex) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemStreamingPartAudioFinished) + internal ConversationItemStreamingAudioFinishedUpdate(string eventId, string responseId, string itemId, int outputIndex, int contentIndex) : base(eventId, ConversationUpdateKind.ItemStreamingPartAudioFinished) { ResponseId = responseId; ItemId = itemId; @@ -17,7 +17,7 @@ internal ConversationItemStreamingAudioFinishedUpdate(string eventId, string res ContentIndex = contentIndex; } - internal ConversationItemStreamingAudioFinishedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationItemStreamingAudioFinishedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex) : base(eventId, kind, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.Serialization.cs index 328a2fd15..513873c25 100644 --- a/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.Serialization.cs @@ -79,7 +79,7 @@ internal static ConversationItemStreamingAudioTranscriptionFinishedUpdate Deseri return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -123,10 +123,7 @@ internal static ConversationItemStreamingAudioTranscriptionFinishedUpdate Deseri transcript = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationItemStreamingAudioTranscriptionFinishedUpdate( eventId, diff --git a/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs b/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs index 32c919a71..4fb719863 100644 --- a/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs +++ b/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationItemStreamingAudioTranscriptionFinishedUpdate : ConversationUpdate { - internal ConversationItemStreamingAudioTranscriptionFinishedUpdate(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string transcript) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemStreamingPartAudioTranscriptionFinished) + internal ConversationItemStreamingAudioTranscriptionFinishedUpdate(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string transcript) : base(eventId, ConversationUpdateKind.ItemStreamingPartAudioTranscriptionFinished) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal ConversationItemStreamingAudioTranscriptionFinishedUpdate(string eventI Transcript = transcript; } - internal ConversationItemStreamingAudioTranscriptionFinishedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string transcript) : base(eventId, kind, additionalBinaryDataProperties) + 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; diff --git a/src/Generated/Models/ConversationItemStreamingFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemStreamingFinishedUpdate.Serialization.cs index 6709cf10b..e36fc817a 100644 --- a/src/Generated/Models/ConversationItemStreamingFinishedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationItemStreamingFinishedUpdate.Serialization.cs @@ -45,7 +45,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("item") != true) { writer.WritePropertyName("item"u8); - writer.WriteObjectValue(_internalItem, options); + writer.WriteObjectValue(_internalItem, options); } } @@ -69,7 +69,7 @@ internal static ConversationItemStreamingFinishedUpdate DeserializeConversationI return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; int outputIndex = default; @@ -101,10 +101,7 @@ internal static ConversationItemStreamingFinishedUpdate DeserializeConversationI internalItem = InternalRealtimeConversationResponseItem.DeserializeInternalRealtimeConversationResponseItem(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationItemStreamingFinishedUpdate( eventId, diff --git a/src/Generated/Models/ConversationItemStreamingFinishedUpdate.cs b/src/Generated/Models/ConversationItemStreamingFinishedUpdate.cs index ab9cf68c8..d75edd563 100644 --- a/src/Generated/Models/ConversationItemStreamingFinishedUpdate.cs +++ b/src/Generated/Models/ConversationItemStreamingFinishedUpdate.cs @@ -9,14 +9,14 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationItemStreamingFinishedUpdate : ConversationUpdate { - internal ConversationItemStreamingFinishedUpdate(string eventId, string responseId, int outputIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemStreamingFinished) + internal ConversationItemStreamingFinishedUpdate(string eventId, string responseId, int outputIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, ConversationUpdateKind.ItemStreamingFinished) { ResponseId = responseId; OutputIndex = outputIndex; _internalItem = internalItem; } - internal ConversationItemStreamingFinishedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, int outputIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationItemStreamingFinishedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, int outputIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, kind, additionalBinaryDataProperties) { ResponseId = responseId; OutputIndex = outputIndex; diff --git a/src/Generated/Models/ConversationItemStreamingStartedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemStreamingStartedUpdate.Serialization.cs index 61d947d1e..b3870e13a 100644 --- a/src/Generated/Models/ConversationItemStreamingStartedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationItemStreamingStartedUpdate.Serialization.cs @@ -45,7 +45,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("item") != true) { writer.WritePropertyName("item"u8); - writer.WriteObjectValue(_internalItem, options); + writer.WriteObjectValue(_internalItem, options); } } @@ -69,7 +69,7 @@ internal static ConversationItemStreamingStartedUpdate DeserializeConversationIt return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; int itemIndex = default; @@ -101,10 +101,7 @@ internal static ConversationItemStreamingStartedUpdate DeserializeConversationIt internalItem = InternalRealtimeConversationResponseItem.DeserializeInternalRealtimeConversationResponseItem(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationItemStreamingStartedUpdate( eventId, diff --git a/src/Generated/Models/ConversationItemStreamingStartedUpdate.cs b/src/Generated/Models/ConversationItemStreamingStartedUpdate.cs index ddb0b6e65..9ab47de95 100644 --- a/src/Generated/Models/ConversationItemStreamingStartedUpdate.cs +++ b/src/Generated/Models/ConversationItemStreamingStartedUpdate.cs @@ -9,14 +9,14 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationItemStreamingStartedUpdate : ConversationUpdate { - internal ConversationItemStreamingStartedUpdate(string eventId, string responseId, int itemIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemStreamingStarted) + internal ConversationItemStreamingStartedUpdate(string eventId, string responseId, int itemIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, ConversationUpdateKind.ItemStreamingStarted) { ResponseId = responseId; ItemIndex = itemIndex; _internalItem = internalItem; } - internal ConversationItemStreamingStartedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, int itemIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationItemStreamingStartedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, int itemIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, kind, additionalBinaryDataProperties) { ResponseId = responseId; ItemIndex = itemIndex; diff --git a/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.Serialization.cs index 7fcbc0dbc..4a6c8b82d 100644 --- a/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.Serialization.cs @@ -79,7 +79,7 @@ internal static ConversationItemStreamingTextFinishedUpdate DeserializeConversat return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -123,10 +123,7 @@ internal static ConversationItemStreamingTextFinishedUpdate DeserializeConversat text = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationItemStreamingTextFinishedUpdate( eventId, diff --git a/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.cs b/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.cs index 4fa53a154..43b1b4682 100644 --- a/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.cs +++ b/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationItemStreamingTextFinishedUpdate : ConversationUpdate { - internal ConversationItemStreamingTextFinishedUpdate(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string text) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemStreamingPartTextFinished) + internal ConversationItemStreamingTextFinishedUpdate(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string text) : base(eventId, ConversationUpdateKind.ItemStreamingPartTextFinished) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal ConversationItemStreamingTextFinishedUpdate(string eventId, string resp Text = text; } - internal ConversationItemStreamingTextFinishedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string text) : base(eventId, kind, additionalBinaryDataProperties) + 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; diff --git a/src/Generated/Models/ConversationItemTruncatedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemTruncatedUpdate.Serialization.cs index 8560e0f66..352ec9ca2 100644 --- a/src/Generated/Models/ConversationItemTruncatedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationItemTruncatedUpdate.Serialization.cs @@ -69,7 +69,7 @@ internal static ConversationItemTruncatedUpdate DeserializeConversationItemTrunc return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int contentIndex = default; @@ -101,10 +101,7 @@ internal static ConversationItemTruncatedUpdate DeserializeConversationItemTrunc audioEndMs = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationItemTruncatedUpdate( eventId, diff --git a/src/Generated/Models/ConversationItemTruncatedUpdate.cs b/src/Generated/Models/ConversationItemTruncatedUpdate.cs index af0f9a51a..fab2fc08c 100644 --- a/src/Generated/Models/ConversationItemTruncatedUpdate.cs +++ b/src/Generated/Models/ConversationItemTruncatedUpdate.cs @@ -9,14 +9,14 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationItemTruncatedUpdate : ConversationUpdate { - internal ConversationItemTruncatedUpdate(string eventId, string itemId, int contentIndex, int audioEndMs) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemTruncated) + internal ConversationItemTruncatedUpdate(string eventId, string itemId, int contentIndex, int audioEndMs) : base(eventId, ConversationUpdateKind.ItemTruncated) { ItemId = itemId; ContentIndex = contentIndex; AudioEndMs = audioEndMs; } - internal ConversationItemTruncatedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, int audioEndMs) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationItemTruncatedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, int audioEndMs) : base(eventId, kind, additionalBinaryDataProperties) { ItemId = itemId; ContentIndex = contentIndex; diff --git a/src/Generated/Models/ConversationOutputTokenUsageDetails.Serialization.cs b/src/Generated/Models/ConversationOutputTokenUsageDetails.Serialization.cs index 9661ae7f7..d7a5fc612 100644 --- a/src/Generated/Models/ConversationOutputTokenUsageDetails.Serialization.cs +++ b/src/Generated/Models/ConversationOutputTokenUsageDetails.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("audio_tokens"u8); writer.WriteNumberValue(AudioTokenCount); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static ConversationOutputTokenUsageDetails DeserializeConversationOutpu audioTokenCount = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationOutputTokenUsageDetails(textTokenCount, audioTokenCount, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ConversationRateLimitDetailsItem.Serialization.cs b/src/Generated/Models/ConversationRateLimitDetailsItem.Serialization.cs index 1579cc3cf..acb78d434 100644 --- a/src/Generated/Models/ConversationRateLimitDetailsItem.Serialization.cs +++ b/src/Generated/Models/ConversationRateLimitDetailsItem.Serialization.cs @@ -51,7 +51,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reset_seconds"u8); writer.WriteNumberValue(Convert.ToDouble(TimeUntilReset.ToString("s\\.FFF"))); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -118,10 +118,7 @@ internal static ConversationRateLimitDetailsItem DeserializeConversationRateLimi timeUntilReset = TimeSpan.FromSeconds(prop.Value.GetDouble()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationRateLimitDetailsItem(name, maximumCount, remainingCount, timeUntilReset, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ConversationRateLimitsUpdate.Serialization.cs b/src/Generated/Models/ConversationRateLimitsUpdate.Serialization.cs index b5f2a7e07..2000e13fa 100644 --- a/src/Generated/Models/ConversationRateLimitsUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationRateLimitsUpdate.Serialization.cs @@ -64,7 +64,7 @@ internal static ConversationRateLimitsUpdate DeserializeConversationRateLimitsUp return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); IReadOnlyList allDetails = default; foreach (var prop in element.EnumerateObject()) @@ -89,10 +89,7 @@ internal static ConversationRateLimitsUpdate DeserializeConversationRateLimitsUp allDetails = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationRateLimitsUpdate(eventId, kind, additionalBinaryDataProperties, allDetails); } diff --git a/src/Generated/Models/ConversationRateLimitsUpdate.cs b/src/Generated/Models/ConversationRateLimitsUpdate.cs index 446f87f45..dfe49bd87 100644 --- a/src/Generated/Models/ConversationRateLimitsUpdate.cs +++ b/src/Generated/Models/ConversationRateLimitsUpdate.cs @@ -10,12 +10,12 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationRateLimitsUpdate : ConversationUpdate { - internal ConversationRateLimitsUpdate(string eventId, IEnumerable allDetails) : base(eventId, RealtimeConversation.ConversationUpdateKind.RateLimitsUpdated) + internal ConversationRateLimitsUpdate(string eventId, IEnumerable allDetails) : base(eventId, ConversationUpdateKind.RateLimitsUpdated) { AllDetails = allDetails.ToList(); } - internal ConversationRateLimitsUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, IReadOnlyList allDetails) : base(eventId, kind, additionalBinaryDataProperties) + 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 index 4f77c879b..8d24424fe 100644 --- a/src/Generated/Models/ConversationResponseFinishedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationResponseFinishedUpdate.Serialization.cs @@ -35,7 +35,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("response") != true) { writer.WritePropertyName("response"u8); - writer.WriteObjectValue(_internalResponse, options); + writer.WriteObjectValue(_internalResponse, options); } } @@ -59,7 +59,7 @@ internal static ConversationResponseFinishedUpdate DeserializeConversationRespon return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRealtimeResponse internalResponse = default; foreach (var prop in element.EnumerateObject()) @@ -79,10 +79,7 @@ internal static ConversationResponseFinishedUpdate DeserializeConversationRespon internalResponse = InternalRealtimeResponse.DeserializeInternalRealtimeResponse(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationResponseFinishedUpdate(eventId, kind, additionalBinaryDataProperties, internalResponse); } diff --git a/src/Generated/Models/ConversationResponseFinishedUpdate.cs b/src/Generated/Models/ConversationResponseFinishedUpdate.cs index 9f8a13be7..ceb4b6c23 100644 --- a/src/Generated/Models/ConversationResponseFinishedUpdate.cs +++ b/src/Generated/Models/ConversationResponseFinishedUpdate.cs @@ -9,12 +9,12 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationResponseFinishedUpdate : ConversationUpdate { - internal ConversationResponseFinishedUpdate(string eventId, InternalRealtimeResponse internalResponse) : base(eventId, RealtimeConversation.ConversationUpdateKind.ResponseFinished) + internal ConversationResponseFinishedUpdate(string eventId, InternalRealtimeResponse internalResponse) : base(eventId, ConversationUpdateKind.ResponseFinished) { _internalResponse = internalResponse; } - internal ConversationResponseFinishedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeResponse internalResponse) : base(eventId, kind, additionalBinaryDataProperties) + 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 e7772a67b..7733221a5 100644 --- a/src/Generated/Models/ConversationResponseOptions.Serialization.cs +++ b/src/Generated/Models/ConversationResponseOptions.Serialization.cs @@ -81,7 +81,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(MaxOutputTokens) && _additionalBinaryDataProperties?.ContainsKey("max_output_tokens") != true) { writer.WritePropertyName("max_output_tokens"u8); - writer.WriteObjectValue(MaxOutputTokens, options); + writer.WriteObjectValue(MaxOutputTokens, options); } if (Optional.IsCollectionDefined(OverrideItems) && _additionalBinaryDataProperties?.ContainsKey("input") != true) { @@ -115,7 +115,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -162,7 +162,7 @@ internal static ConversationResponseOptions DeserializeConversationResponseOptio float? temperature = default; IDictionary metadata = default; ResponseConversationSelection? conversationSelection = default; - RealtimeConversation.ConversationMaxTokensChoice maxOutputTokens = default; + ConversationMaxTokensChoice maxOutputTokens = default; IList overrideItems = default; IList internalModalities = default; BinaryData internalToolChoice = default; @@ -251,7 +251,7 @@ internal static ConversationResponseOptions DeserializeConversationResponseOptio { continue; } - maxOutputTokens = RealtimeConversation.ConversationMaxTokensChoice.DeserializeConversationMaxTokensChoice(prop.Value, options); + maxOutputTokens = ConversationMaxTokensChoice.DeserializeConversationMaxTokensChoice(prop.Value, options); continue; } if (prop.NameEquals("input"u8)) @@ -291,10 +291,7 @@ internal static ConversationResponseOptions DeserializeConversationResponseOptio internalToolChoice = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationResponseOptions( instructions, diff --git a/src/Generated/Models/ConversationResponseOptions.cs b/src/Generated/Models/ConversationResponseOptions.cs index bf44530bc..e9b16d16d 100644 --- a/src/Generated/Models/ConversationResponseOptions.cs +++ b/src/Generated/Models/ConversationResponseOptions.cs @@ -20,7 +20,7 @@ public ConversationResponseOptions() _internalModalities = new ChangeTrackingList(); } - internal ConversationResponseOptions(string instructions, ConversationVoice? voice, ConversationAudioFormat? outputAudioFormat, IList tools, float? temperature, IDictionary metadata, ResponseConversationSelection? conversationSelection, RealtimeConversation.ConversationMaxTokensChoice maxOutputTokens, IList overrideItems, IList internalModalities, BinaryData internalToolChoice, IDictionary additionalBinaryDataProperties) + 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) { Instructions = instructions; Voice = voice; diff --git a/src/Generated/Models/ConversationResponseStartedUpdate.Serialization.cs b/src/Generated/Models/ConversationResponseStartedUpdate.Serialization.cs index c449ef621..fef5d774b 100644 --- a/src/Generated/Models/ConversationResponseStartedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationResponseStartedUpdate.Serialization.cs @@ -35,7 +35,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("response") != true) { writer.WritePropertyName("response"u8); - writer.WriteObjectValue(_internalResponse, options); + writer.WriteObjectValue(_internalResponse, options); } } @@ -59,7 +59,7 @@ internal static ConversationResponseStartedUpdate DeserializeConversationRespons return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRealtimeResponse internalResponse = default; foreach (var prop in element.EnumerateObject()) @@ -79,10 +79,7 @@ internal static ConversationResponseStartedUpdate DeserializeConversationRespons internalResponse = InternalRealtimeResponse.DeserializeInternalRealtimeResponse(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationResponseStartedUpdate(eventId, kind, additionalBinaryDataProperties, internalResponse); } diff --git a/src/Generated/Models/ConversationResponseStartedUpdate.cs b/src/Generated/Models/ConversationResponseStartedUpdate.cs index 38759ffc4..88ac087b9 100644 --- a/src/Generated/Models/ConversationResponseStartedUpdate.cs +++ b/src/Generated/Models/ConversationResponseStartedUpdate.cs @@ -9,12 +9,12 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationResponseStartedUpdate : ConversationUpdate { - internal ConversationResponseStartedUpdate(string eventId, InternalRealtimeResponse internalResponse) : base(eventId, RealtimeConversation.ConversationUpdateKind.ResponseStarted) + internal ConversationResponseStartedUpdate(string eventId, InternalRealtimeResponse internalResponse) : base(eventId, ConversationUpdateKind.ResponseStarted) { _internalResponse = internalResponse; } - internal ConversationResponseStartedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeResponse internalResponse) : base(eventId, kind, additionalBinaryDataProperties) + 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 ee62e9ca5..bb455794c 100644 --- a/src/Generated/Models/ConversationSessionConfiguredUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationSessionConfiguredUpdate.Serialization.cs @@ -35,7 +35,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("session") != true) { writer.WritePropertyName("session"u8); - writer.WriteObjectValue(_internalSession, options); + writer.WriteObjectValue(_internalSession, options); } } @@ -59,7 +59,7 @@ internal static ConversationSessionConfiguredUpdate DeserializeConversationSessi return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRealtimeResponseSession internalSession = default; foreach (var prop in element.EnumerateObject()) @@ -79,10 +79,7 @@ internal static ConversationSessionConfiguredUpdate DeserializeConversationSessi internalSession = InternalRealtimeResponseSession.DeserializeInternalRealtimeResponseSession(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationSessionConfiguredUpdate(eventId, kind, additionalBinaryDataProperties, internalSession); } diff --git a/src/Generated/Models/ConversationSessionConfiguredUpdate.cs b/src/Generated/Models/ConversationSessionConfiguredUpdate.cs index 65a084a4b..dc270af26 100644 --- a/src/Generated/Models/ConversationSessionConfiguredUpdate.cs +++ b/src/Generated/Models/ConversationSessionConfiguredUpdate.cs @@ -9,12 +9,12 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationSessionConfiguredUpdate : ConversationUpdate { - internal ConversationSessionConfiguredUpdate(string eventId, InternalRealtimeResponseSession internalSession) : base(eventId, RealtimeConversation.ConversationUpdateKind.SessionConfigured) + internal ConversationSessionConfiguredUpdate(string eventId, InternalRealtimeResponseSession internalSession) : base(eventId, ConversationUpdateKind.SessionConfigured) { _internalSession = internalSession; } - internal ConversationSessionConfiguredUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeResponseSession internalSession) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationSessionConfiguredUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeResponseSession internalSession) : base(eventId, kind, additionalBinaryDataProperties) { _internalSession = internalSession; } diff --git a/src/Generated/Models/ConversationSessionOptions.Serialization.cs b/src/Generated/Models/ConversationSessionOptions.Serialization.cs index b02b97b35..c91fc9863 100644 --- a/src/Generated/Models/ConversationSessionOptions.Serialization.cs +++ b/src/Generated/Models/ConversationSessionOptions.Serialization.cs @@ -69,27 +69,13 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(TurnDetectionOptions) && _additionalBinaryDataProperties?.ContainsKey("turn_detection") != true) { - if (TurnDetectionOptions != null) - { - writer.WritePropertyName("turn_detection"u8); - writer.WriteObjectValue(TurnDetectionOptions, options); - } - else - { - writer.WriteNull("turnDetection"u8); - } + writer.WritePropertyName("turn_detection"u8); + writer.WriteObjectValue(TurnDetectionOptions, options); } if (Optional.IsDefined(InputTranscriptionOptions) && _additionalBinaryDataProperties?.ContainsKey("input_audio_transcription") != true) { - if (InputTranscriptionOptions != null) - { - writer.WritePropertyName("input_audio_transcription"u8); - writer.WriteObjectValue(InputTranscriptionOptions, options); - } - else - { - writer.WriteNull("inputAudioTranscription"u8); - } + writer.WritePropertyName("input_audio_transcription"u8); + writer.WriteObjectValue(InputTranscriptionOptions, options); } if (Optional.IsCollectionDefined(_internalModalities) && _additionalBinaryDataProperties?.ContainsKey("modalities") != true) { @@ -125,7 +111,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -296,10 +282,7 @@ internal static ConversationSessionOptions DeserializeConversationSessionOptions maxResponseOutputTokens = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationSessionOptions( instructions, diff --git a/src/Generated/Models/ConversationSessionStartedUpdate.Serialization.cs b/src/Generated/Models/ConversationSessionStartedUpdate.Serialization.cs index af0750875..b1f22da01 100644 --- a/src/Generated/Models/ConversationSessionStartedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationSessionStartedUpdate.Serialization.cs @@ -35,7 +35,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("session") != true) { writer.WritePropertyName("session"u8); - writer.WriteObjectValue(_internalSession, options); + writer.WriteObjectValue(_internalSession, options); } } @@ -59,7 +59,7 @@ internal static ConversationSessionStartedUpdate DeserializeConversationSessionS return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRealtimeResponseSession internalSession = default; foreach (var prop in element.EnumerateObject()) @@ -79,10 +79,7 @@ internal static ConversationSessionStartedUpdate DeserializeConversationSessionS internalSession = InternalRealtimeResponseSession.DeserializeInternalRealtimeResponseSession(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationSessionStartedUpdate(eventId, kind, additionalBinaryDataProperties, internalSession); } diff --git a/src/Generated/Models/ConversationSessionStartedUpdate.cs b/src/Generated/Models/ConversationSessionStartedUpdate.cs index e3dda4abc..ba2631e10 100644 --- a/src/Generated/Models/ConversationSessionStartedUpdate.cs +++ b/src/Generated/Models/ConversationSessionStartedUpdate.cs @@ -9,12 +9,12 @@ namespace OpenAI.RealtimeConversation { public partial class ConversationSessionStartedUpdate : ConversationUpdate { - internal ConversationSessionStartedUpdate(string eventId, InternalRealtimeResponseSession internalSession) : base(eventId, RealtimeConversation.ConversationUpdateKind.SessionStarted) + internal ConversationSessionStartedUpdate(string eventId, InternalRealtimeResponseSession internalSession) : base(eventId, ConversationUpdateKind.SessionStarted) { _internalSession = internalSession; } - internal ConversationSessionStartedUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeResponseSession internalSession) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationSessionStartedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeResponseSession internalSession) : base(eventId, kind, additionalBinaryDataProperties) { _internalSession = internalSession; } diff --git a/src/Generated/Models/ConversationStatusDetails.Serialization.cs b/src/Generated/Models/ConversationStatusDetails.Serialization.cs index 7a9aaff72..b7b3aa3b1 100644 --- a/src/Generated/Models/ConversationStatusDetails.Serialization.cs +++ b/src/Generated/Models/ConversationStatusDetails.Serialization.cs @@ -40,9 +40,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(Error) && _additionalBinaryDataProperties?.ContainsKey("error") != true) { writer.WritePropertyName("error"u8); - writer.WriteObjectValue(Error, options); + writer.WriteObjectValue(Error, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -115,10 +115,7 @@ internal static ConversationStatusDetails DeserializeConversationStatusDetails(J error = InternalRealtimeResponseStatusDetailsError.DeserializeInternalRealtimeResponseStatusDetailsError(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationStatusDetails(statusKind, incompleteReason, error, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ConversationTokenUsage.Serialization.cs b/src/Generated/Models/ConversationTokenUsage.Serialization.cs index e7c45e9e6..1ca3c5b52 100644 --- a/src/Generated/Models/ConversationTokenUsage.Serialization.cs +++ b/src/Generated/Models/ConversationTokenUsage.Serialization.cs @@ -52,7 +52,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total_tokens"u8); writer.WriteNumberValue(TotalTokenCount); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -145,10 +145,7 @@ internal static ConversationTokenUsage DeserializeConversationTokenUsage(JsonEle totalTokenCount = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationTokenUsage( inputTokenDetails, diff --git a/src/Generated/Models/ConversationTool.Serialization.cs b/src/Generated/Models/ConversationTool.Serialization.cs index b432b57fd..cee9fb1ee 100644 --- a/src/Generated/Models/ConversationTool.Serialization.cs +++ b/src/Generated/Models/ConversationTool.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/ConversationToolChoiceKind.Serialization.cs b/src/Generated/Models/ConversationToolChoiceKind.Serialization.cs index 4d7f2010d..106ef37f7 100644 --- a/src/Generated/Models/ConversationToolChoiceKind.Serialization.cs +++ b/src/Generated/Models/ConversationToolChoiceKind.Serialization.cs @@ -8,27 +8,27 @@ namespace OpenAI.RealtimeConversation { internal static partial class ConversationToolChoiceKindExtensions { - public static string ToSerialString(this RealtimeConversation.ConversationToolChoiceKind value) => value switch + public static string ToSerialString(this ConversationToolChoiceKind value) => value switch { - RealtimeConversation.ConversationToolChoiceKind.Auto => "auto", - RealtimeConversation.ConversationToolChoiceKind.None => "none", - RealtimeConversation.ConversationToolChoiceKind.Required => "required", + ConversationToolChoiceKind.Auto => "auto", + ConversationToolChoiceKind.None => "none", + ConversationToolChoiceKind.Required => "required", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ConversationToolChoiceKind value.") }; - public static RealtimeConversation.ConversationToolChoiceKind ToConversationToolChoiceKind(this string value) + public static ConversationToolChoiceKind ToConversationToolChoiceKind(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "auto")) { - return RealtimeConversation.ConversationToolChoiceKind.Auto; + return ConversationToolChoiceKind.Auto; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "none")) { - return RealtimeConversation.ConversationToolChoiceKind.None; + return ConversationToolChoiceKind.None; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "required")) { - return RealtimeConversation.ConversationToolChoiceKind.Required; + return ConversationToolChoiceKind.Required; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ConversationToolChoiceKind value."); } diff --git a/src/Generated/Models/ConversationTurnDetectionKind.Serialization.cs b/src/Generated/Models/ConversationTurnDetectionKind.Serialization.cs index fd991f4c0..b9c1d3096 100644 --- a/src/Generated/Models/ConversationTurnDetectionKind.Serialization.cs +++ b/src/Generated/Models/ConversationTurnDetectionKind.Serialization.cs @@ -8,17 +8,17 @@ namespace OpenAI.RealtimeConversation { internal static partial class ConversationTurnDetectionKindExtensions { - public static string ToSerialString(this RealtimeConversation.ConversationTurnDetectionKind value) => value switch + public static string ToSerialString(this ConversationTurnDetectionKind value) => value switch { - RealtimeConversation.ConversationTurnDetectionKind.ServerVoiceActivityDetection => "server_vad", + ConversationTurnDetectionKind.ServerVoiceActivityDetection => "server_vad", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ConversationTurnDetectionKind value.") }; - public static RealtimeConversation.ConversationTurnDetectionKind ToConversationTurnDetectionKind(this string value) + public static ConversationTurnDetectionKind ToConversationTurnDetectionKind(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "server_vad")) { - return RealtimeConversation.ConversationTurnDetectionKind.ServerVoiceActivityDetection; + 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 index d308a20ee..f122cafbd 100644 --- a/src/Generated/Models/ConversationTurnDetectionOptions.Serialization.cs +++ b/src/Generated/Models/ConversationTurnDetectionOptions.Serialization.cs @@ -10,8 +10,7 @@ namespace OpenAI.RealtimeConversation { - [PersistableModelProxy(typeof(UnknownRealtimeTurnDetection))] - public abstract partial class ConversationTurnDetectionOptions : IJsonModel + public partial class ConversationTurnDetectionOptions : IJsonModel { internal ConversationTurnDetectionOptions() { @@ -36,7 +35,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -67,7 +66,7 @@ protected virtual ConversationTurnDetectionOptions JsonModelCreateCore(ref Utf8J throw new FormatException($"The model {nameof(ConversationTurnDetectionOptions)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return ConversationTurnDetectionOptions.DeserializeConversationTurnDetectionOptions(document.RootElement, options); + return DeserializeConversationTurnDetectionOptions(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -94,7 +93,7 @@ protected virtual ConversationTurnDetectionOptions PersistableModelCreateCore(Bi case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return ConversationTurnDetectionOptions.DeserializeConversationTurnDetectionOptions(document.RootElement, options); + return DeserializeConversationTurnDetectionOptions(document.RootElement, options); } default: throw new FormatException($"The model {nameof(ConversationTurnDetectionOptions)} does not support reading '{options.Format}' format."); @@ -116,7 +115,7 @@ public static explicit operator ConversationTurnDetectionOptions(ClientResult re { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return ConversationTurnDetectionOptions.DeserializeConversationTurnDetectionOptions(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeConversationTurnDetectionOptions(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/ConversationTurnDetectionOptions.cs b/src/Generated/Models/ConversationTurnDetectionOptions.cs index bf1534995..810d69398 100644 --- a/src/Generated/Models/ConversationTurnDetectionOptions.cs +++ b/src/Generated/Models/ConversationTurnDetectionOptions.cs @@ -7,16 +7,16 @@ namespace OpenAI.RealtimeConversation { - public abstract partial class ConversationTurnDetectionOptions + public partial class ConversationTurnDetectionOptions { private protected IDictionary _additionalBinaryDataProperties; - private protected ConversationTurnDetectionOptions(RealtimeConversation.ConversationTurnDetectionKind kind) + private protected ConversationTurnDetectionOptions(ConversationTurnDetectionKind kind) { Kind = kind; } - internal ConversationTurnDetectionOptions(RealtimeConversation.ConversationTurnDetectionKind kind, IDictionary additionalBinaryDataProperties) + internal ConversationTurnDetectionOptions(ConversationTurnDetectionKind kind, IDictionary additionalBinaryDataProperties) { Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/ConversationUpdate.Serialization.cs b/src/Generated/Models/ConversationUpdate.Serialization.cs index e1256ed33..08fe03b63 100644 --- a/src/Generated/Models/ConversationUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationUpdate.Serialization.cs @@ -10,8 +10,7 @@ namespace OpenAI.RealtimeConversation { - [PersistableModelProxy(typeof(UnknownRealtimeServerEvent))] - public abstract partial class ConversationUpdate : IJsonModel + public partial class ConversationUpdate : IJsonModel { internal ConversationUpdate() { @@ -41,7 +40,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -72,7 +71,7 @@ protected virtual ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader read throw new FormatException($"The model {nameof(ConversationUpdate)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return ConversationUpdate.DeserializeConversationUpdate(document.RootElement, options); + return DeserializeConversationUpdate(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -99,7 +98,7 @@ protected virtual ConversationUpdate PersistableModelCreateCore(BinaryData data, case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return ConversationUpdate.DeserializeConversationUpdate(document.RootElement, options); + return DeserializeConversationUpdate(document.RootElement, options); } default: throw new FormatException($"The model {nameof(ConversationUpdate)} does not support reading '{options.Format}' format."); @@ -121,7 +120,7 @@ public static explicit operator ConversationUpdate(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return ConversationUpdate.DeserializeConversationUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeConversationUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/ConversationUpdate.cs b/src/Generated/Models/ConversationUpdate.cs index 75eb30dc3..8fd2bfb48 100644 --- a/src/Generated/Models/ConversationUpdate.cs +++ b/src/Generated/Models/ConversationUpdate.cs @@ -7,17 +7,17 @@ namespace OpenAI.RealtimeConversation { - public abstract partial class ConversationUpdate + public partial class ConversationUpdate { private protected IDictionary _additionalBinaryDataProperties; - private protected ConversationUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind) + private protected ConversationUpdate(string eventId, ConversationUpdateKind kind) { EventId = eventId; Kind = kind; } - internal ConversationUpdate(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties) + internal ConversationUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties) { EventId = eventId; Kind = kind; diff --git a/src/Generated/Models/DeveloperChatMessage.Serialization.cs b/src/Generated/Models/DeveloperChatMessage.Serialization.cs index 9fa960482..c017616a4 100644 --- a/src/Generated/Models/DeveloperChatMessage.Serialization.cs +++ b/src/Generated/Models/DeveloperChatMessage.Serialization.cs @@ -48,7 +48,7 @@ internal static DeveloperChatMessage DeserializeDeveloperChatMessage(JsonElement return null; } ChatMessageContent content = default; - Chat.ChatMessageRole role = default; + ChatMessageRole role = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string participantName = default; foreach (var prop in element.EnumerateObject()) @@ -68,10 +68,7 @@ internal static DeveloperChatMessage DeserializeDeveloperChatMessage(JsonElement participantName = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new DeveloperChatMessage(content, role, additionalBinaryDataProperties, participantName); } diff --git a/src/Generated/Models/DeveloperChatMessage.cs b/src/Generated/Models/DeveloperChatMessage.cs index b391b2890..5d416bb89 100644 --- a/src/Generated/Models/DeveloperChatMessage.cs +++ b/src/Generated/Models/DeveloperChatMessage.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat { public partial class DeveloperChatMessage : ChatMessage { - internal DeveloperChatMessage(ChatMessageContent content, Chat.ChatMessageRole role, IDictionary additionalBinaryDataProperties, string participantName) : base(content, role, additionalBinaryDataProperties) + 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 c71be3f7c..df010fc12 100644 --- a/src/Generated/Models/EmbeddingGenerationOptions.Serialization.cs +++ b/src/Generated/Models/EmbeddingGenerationOptions.Serialization.cs @@ -59,7 +59,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("user"u8); writer.WriteStringValue(EndUserId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -140,10 +140,7 @@ internal static EmbeddingGenerationOptions DeserializeEmbeddingGenerationOptions endUserId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new EmbeddingGenerationOptions( dimensions, diff --git a/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs b/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs index 49f4c9685..4e0259033 100644 --- a/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs +++ b/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total_tokens"u8); writer.WriteNumberValue(TotalTokenCount); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static EmbeddingTokenUsage DeserializeEmbeddingTokenUsage(JsonElement e totalTokenCount = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new EmbeddingTokenUsage(inputTokenCount, totalTokenCount, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/FileChunkingStrategy.Serialization.cs b/src/Generated/Models/FileChunkingStrategy.Serialization.cs index 42ed82c29..db0c67603 100644 --- a/src/Generated/Models/FileChunkingStrategy.Serialization.cs +++ b/src/Generated/Models/FileChunkingStrategy.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/FileDeletionResult.Serialization.cs b/src/Generated/Models/FileDeletionResult.Serialization.cs index 455776386..060a64dc4 100644 --- a/src/Generated/Models/FileDeletionResult.Serialization.cs +++ b/src/Generated/Models/FileDeletionResult.Serialization.cs @@ -44,9 +44,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static FileDeletionResult DeserializeFileDeletionResult(JsonElement ele @object = new InternalDeleteFileResponseObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileDeletionResult(deleted, fileId, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/FileDeletionResult.cs b/src/Generated/Models/FileDeletionResult.cs index a5b822c49..16dcb93b1 100644 --- a/src/Generated/Models/FileDeletionResult.cs +++ b/src/Generated/Models/FileDeletionResult.cs @@ -21,7 +21,7 @@ internal FileDeletionResult(bool deleted, string fileId, InternalDeleteFileRespo { Deleted = deleted; FileId = fileId; - this.Object = @object; + Object = @object; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/FileFromStoreRemovalResult.Serialization.cs b/src/Generated/Models/FileFromStoreRemovalResult.Serialization.cs index fb331ff03..a7909c761 100644 --- a/src/Generated/Models/FileFromStoreRemovalResult.Serialization.cs +++ b/src/Generated/Models/FileFromStoreRemovalResult.Serialization.cs @@ -44,9 +44,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static FileFromStoreRemovalResult DeserializeFileFromStoreRemovalResult @object = new InternalDeleteVectorStoreFileResponseObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileFromStoreRemovalResult(fileId, removed, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/FileFromStoreRemovalResult.cs b/src/Generated/Models/FileFromStoreRemovalResult.cs index b6d00d34e..d2934eb72 100644 --- a/src/Generated/Models/FileFromStoreRemovalResult.cs +++ b/src/Generated/Models/FileFromStoreRemovalResult.cs @@ -21,7 +21,7 @@ internal FileFromStoreRemovalResult(string fileId, bool removed, InternalDeleteV { FileId = fileId; Removed = removed; - this.Object = @object; + Object = @object; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/FilePurpose.Serialization.cs b/src/Generated/Models/FilePurpose.Serialization.cs index 2fed310a1..e17ab21b2 100644 --- a/src/Generated/Models/FilePurpose.Serialization.cs +++ b/src/Generated/Models/FilePurpose.Serialization.cs @@ -2,55 +2,9 @@ #nullable disable -using System; - namespace OpenAI.Files { internal static partial class FilePurposeExtensions { - public static string ToSerialString(this Files.FilePurpose value) => value switch - { - Files.FilePurpose.Assistants => "assistants", - Files.FilePurpose.AssistantsOutput => "assistants_output", - Files.FilePurpose.Batch => "batch", - Files.FilePurpose.BatchOutput => "batch_output", - Files.FilePurpose.FineTune => "fine-tune", - Files.FilePurpose.FineTuneResults => "fine-tune-results", - Files.FilePurpose.Vision => "vision", - _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FilePurpose value.") - }; - - public static Files.FilePurpose ToFilePurpose(this string value) - { - if (StringComparer.OrdinalIgnoreCase.Equals(value, "assistants")) - { - return Files.FilePurpose.Assistants; - } - if (StringComparer.OrdinalIgnoreCase.Equals(value, "assistants_output")) - { - return Files.FilePurpose.AssistantsOutput; - } - if (StringComparer.OrdinalIgnoreCase.Equals(value, "batch")) - { - return Files.FilePurpose.Batch; - } - if (StringComparer.OrdinalIgnoreCase.Equals(value, "batch_output")) - { - return Files.FilePurpose.BatchOutput; - } - if (StringComparer.OrdinalIgnoreCase.Equals(value, "fine-tune")) - { - return Files.FilePurpose.FineTune; - } - if (StringComparer.OrdinalIgnoreCase.Equals(value, "fine-tune-results")) - { - return Files.FilePurpose.FineTuneResults; - } - if (StringComparer.OrdinalIgnoreCase.Equals(value, "vision")) - { - return Files.FilePurpose.Vision; - } - throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FilePurpose value."); - } } } diff --git a/src/Generated/Models/FileSearchCallResponseItem.Serialization.cs b/src/Generated/Models/FileSearchCallResponseItem.Serialization.cs new file mode 100644 index 000000000..19ede7a6f --- /dev/null +++ b/src/Generated/Models/FileSearchCallResponseItem.Serialization.cs @@ -0,0 +1,208 @@ +// + +#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 FileSearchCallResponseItem : IJsonModel + { + internal FileSearchCallResponseItem() + { + } + + 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(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); + writer.WriteStartArray(); + foreach (string item in Queries) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (_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.WriteNull("results"u8); + } + } + } + + FileSearchCallResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (FileSearchCallResponseItem)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(FileSearchCallResponseItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFileSearchCallResponseItem(document.RootElement, options); + } + + internal static FileSearchCallResponseItem DeserializeFileSearchCallResponseItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesItemType @type = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + FileSearchCallStatus status = default; + IList queries = default; + IList results = 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)) + { + status = prop.Value.GetString().ToFileSearchCallStatus(); + 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) + { + results = new ChangeTrackingList(); + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(FileSearchCallResult.DeserializeFileSearchCallResult(item, options)); + } + results = array; + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new FileSearchCallResponseItem( + @type, + id, + additionalBinaryDataProperties, + status, + queries, + results); + } + + 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(FileSearchCallResponseItem)} does not support writing '{options.Format}' format."); + } + } + + FileSearchCallResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (FileSearchCallResponseItem)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 DeserializeFileSearchCallResponseItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FileSearchCallResponseItem)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..5bac893bb --- /dev/null +++ b/src/Generated/Models/FileSearchCallResponseItem.cs @@ -0,0 +1,25 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class FileSearchCallResponseItem : ResponseItem + { + internal FileSearchCallResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, FileSearchCallStatus status, IList queries, IList results) : base(@type, id, additionalBinaryDataProperties) + { + Status = status; + Queries = queries; + Results = results; + } + + public FileSearchCallStatus Status { get; } + + public IList Queries { get; } + + public IList Results { get; set; } + } +} diff --git a/src/Generated/Models/FileSearchCallResult.Serialization.cs b/src/Generated/Models/FileSearchCallResult.Serialization.cs new file mode 100644 index 000000000..1bbf977ce --- /dev/null +++ b/src/Generated/Models/FileSearchCallResult.Serialization.cs @@ -0,0 +1,226 @@ +// + +#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 FileSearchCallResult : 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(FileSearchCallResult)} 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(Text) && _additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + if (Optional.IsDefined(Filename) && _additionalBinaryDataProperties?.ContainsKey("filename") != true) + { + writer.WritePropertyName("filename"u8); + writer.WriteStringValue(Filename); + } + if (Optional.IsCollectionDefined(Attributes) && _additionalBinaryDataProperties?.ContainsKey("attributes") != true) + { + 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(); + } + if (Optional.IsDefined(Score) && _additionalBinaryDataProperties?.ContainsKey("score") != true) + { + writer.WritePropertyName("score"u8); + writer.WriteNumberValue(Score.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 + } + } + } + + FileSearchCallResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual FileSearchCallResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FileSearchCallResult)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFileSearchCallResult(document.RootElement, options); + } + + internal static FileSearchCallResult DeserializeFileSearchCallResult(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string fileId = default; + string text = default; + string filename = default; + IDictionary attributes = default; + float? score = 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("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("filename"u8)) + { + filename = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("attributes"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())); + } + } + attributes = dictionary; + continue; + } + if (prop.NameEquals("score"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + score = prop.Value.GetSingle(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new FileSearchCallResult( + fileId, + text, + filename, + attributes ?? new ChangeTrackingDictionary(), + score, + 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(FileSearchCallResult)} does not support writing '{options.Format}' format."); + } + } + + FileSearchCallResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual FileSearchCallResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeFileSearchCallResult(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FileSearchCallResult)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..db930c7ba --- /dev/null +++ b/src/Generated/Models/FileSearchCallResult.cs @@ -0,0 +1,46 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class FileSearchCallResult + { + private protected IDictionary _additionalBinaryDataProperties; + + public FileSearchCallResult() + { + Attributes = new ChangeTrackingDictionary(); + } + + internal FileSearchCallResult(string fileId, string text, string filename, IDictionary attributes, float? score, IDictionary additionalBinaryDataProperties) + { + FileId = fileId; + Text = text; + Filename = filename; + Attributes = attributes; + Score = score; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string FileId { get; set; } + + public string Text { get; set; } + + public string Filename { get; set; } + + public IDictionary Attributes { get; } + + public float? Score { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/FileSearchCallStatus.Serialization.cs b/src/Generated/Models/FileSearchCallStatus.Serialization.cs new file mode 100644 index 000000000..82299e7e9 --- /dev/null +++ b/src/Generated/Models/FileSearchCallStatus.Serialization.cs @@ -0,0 +1,46 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + internal static partial class FileSearchCallStatusExtensions + { + public static string ToSerialString(this FileSearchCallStatus value) => value switch + { + FileSearchCallStatus.InProgress => "in_progress", + FileSearchCallStatus.Searching => "searching", + FileSearchCallStatus.Completed => "completed", + FileSearchCallStatus.Incomplete => "incomplete", + FileSearchCallStatus.Failed => "failed", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FileSearchCallStatus value.") + }; + + public static FileSearchCallStatus ToFileSearchCallStatus(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) + { + return FileSearchCallStatus.InProgress; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "searching")) + { + return FileSearchCallStatus.Searching; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "completed")) + { + return FileSearchCallStatus.Completed; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "incomplete")) + { + return FileSearchCallStatus.Incomplete; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "failed")) + { + return FileSearchCallStatus.Failed; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FileSearchCallStatus value."); + } + } +} diff --git a/src/Generated/Models/FileSearchRankingOptions.Serialization.cs b/src/Generated/Models/FileSearchRankingOptions.Serialization.cs index 04fe002e3..d42b59aab 100644 --- a/src/Generated/Models/FileSearchRankingOptions.Serialization.cs +++ b/src/Generated/Models/FileSearchRankingOptions.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("score_threshold"u8); writer.WriteNumberValue(_scoreThreshold); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static FileSearchRankingOptions DeserializeFileSearchRankingOptions(Jso scoreThreshold = prop.Value.GetSingle(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileSearchRankingOptions(ranker, scoreThreshold, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/FileSearchToolDefinition.Serialization.cs b/src/Generated/Models/FileSearchToolDefinition.Serialization.cs index 7fc0595e1..8c8dbc66c 100644 --- a/src/Generated/Models/FileSearchToolDefinition.Serialization.cs +++ b/src/Generated/Models/FileSearchToolDefinition.Serialization.cs @@ -24,7 +24,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (Optional.IsDefined(_fileSearch) && _additionalBinaryDataProperties?.ContainsKey("file_search") != true) { writer.WritePropertyName("file_search"u8); - writer.WriteObjectValue(_fileSearch, options); + writer.WriteObjectValue(_fileSearch, options); } } @@ -66,10 +66,7 @@ internal static FileSearchToolDefinition DeserializeFileSearchToolDefinition(Jso fileSearch = InternalAssistantToolsFileSearchFileSearch.DeserializeInternalAssistantToolsFileSearchFileSearch(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileSearchToolDefinition(@type, additionalBinaryDataProperties, fileSearch); } diff --git a/src/Generated/Models/FileSearchToolRanker.cs b/src/Generated/Models/FileSearchToolRanker.cs new file mode 100644 index 000000000..6af4e03a0 --- /dev/null +++ b/src/Generated/Models/FileSearchToolRanker.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + public readonly partial struct FileSearchToolRanker : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + private const string Default20241115Value = "default-2024-11-15"; + + public FileSearchToolRanker(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static FileSearchToolRanker Auto { get; } = new FileSearchToolRanker(AutoValue); + + public static FileSearchToolRanker Default20241115 { get; } = new FileSearchToolRanker(Default20241115Value); + + public static bool operator ==(FileSearchToolRanker left, FileSearchToolRanker right) => left.Equals(right); + + public static bool operator !=(FileSearchToolRanker left, FileSearchToolRanker right) => !left.Equals(right); + + public static implicit operator FileSearchToolRanker(string value) => new FileSearchToolRanker(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is FileSearchToolRanker other && Equals(other); + + public bool Equals(FileSearchToolRanker 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/FileSearchToolRankingOptions.Serialization.cs b/src/Generated/Models/FileSearchToolRankingOptions.Serialization.cs new file mode 100644 index 000000000..0af5cdad9 --- /dev/null +++ b/src/Generated/Models/FileSearchToolRankingOptions.Serialization.cs @@ -0,0 +1,157 @@ +// + +#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 FileSearchToolRankingOptions : 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(FileSearchToolRankingOptions)} 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); + } + 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 + } + } + } + + FileSearchToolRankingOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual FileSearchToolRankingOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FileSearchToolRankingOptions)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFileSearchToolRankingOptions(document.RootElement, options); + } + + internal static FileSearchToolRankingOptions DeserializeFileSearchToolRankingOptions(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + FileSearchToolRanker? 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 FileSearchToolRanker(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("score_threshold"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + scoreThreshold = prop.Value.GetSingle(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new FileSearchToolRankingOptions(ranker, scoreThreshold, 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(FileSearchToolRankingOptions)} does not support writing '{options.Format}' format."); + } + } + + FileSearchToolRankingOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual FileSearchToolRankingOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeFileSearchToolRankingOptions(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FileSearchToolRankingOptions)} does not support reading '{options.Format}' format."); + } + } + + 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/FileSearchToolRankingOptions.cs b/src/Generated/Models/FileSearchToolRankingOptions.cs new file mode 100644 index 000000000..b1569b52b --- /dev/null +++ b/src/Generated/Models/FileSearchToolRankingOptions.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class FileSearchToolRankingOptions + { + private protected IDictionary _additionalBinaryDataProperties; + + public FileSearchToolRankingOptions() + { + } + + internal FileSearchToolRankingOptions(FileSearchToolRanker? ranker, float? scoreThreshold, IDictionary additionalBinaryDataProperties) + { + Ranker = ranker; + ScoreThreshold = scoreThreshold; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public FileSearchToolRanker? Ranker { get; set; } + + public float? ScoreThreshold { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/FileSearchToolResources.Serialization.cs b/src/Generated/Models/FileSearchToolResources.Serialization.cs index df2ec91f8..bb02e68ff 100644 --- a/src/Generated/Models/FileSearchToolResources.Serialization.cs +++ b/src/Generated/Models/FileSearchToolResources.Serialization.cs @@ -45,9 +45,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsCollectionDefined(NewVectorStores) && _additionalBinaryDataProperties?.ContainsKey("vector_stores") != true) { writer.WritePropertyName("vector_stores"u8); - this.SerializeNewVectorStores(writer, options); + SerializeNewVectorStores(writer, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -127,10 +127,7 @@ internal static FileSearchToolResources DeserializeFileSearchToolResources(JsonE newVectorStores = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileSearchToolResources(vectorStoreIds ?? new ChangeTrackingList(), newVectorStores ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/FileStatus.Serialization.cs b/src/Generated/Models/FileStatus.Serialization.cs index cf3193c9f..9823464da 100644 --- a/src/Generated/Models/FileStatus.Serialization.cs +++ b/src/Generated/Models/FileStatus.Serialization.cs @@ -8,27 +8,27 @@ namespace OpenAI.Files { internal static partial class FileStatusExtensions { - public static string ToSerialString(this Files.FileStatus value) => value switch + public static string ToSerialString(this FileStatus value) => value switch { - Files.FileStatus.Uploaded => "uploaded", - Files.FileStatus.Processed => "processed", - Files.FileStatus.Error => "error", + FileStatus.Uploaded => "uploaded", + FileStatus.Processed => "processed", + FileStatus.Error => "error", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FileStatus value.") }; - public static Files.FileStatus ToFileStatus(this string value) + public static FileStatus ToFileStatus(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "uploaded")) { - return Files.FileStatus.Uploaded; + return FileStatus.Uploaded; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "processed")) { - return Files.FileStatus.Processed; + return FileStatus.Processed; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "error")) { - return Files.FileStatus.Error; + return FileStatus.Error; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FileStatus value."); } diff --git a/src/Generated/Models/FileUploadPurpose.cs b/src/Generated/Models/FileUploadPurpose.cs index af423aa35..c2b9151c8 100644 --- a/src/Generated/Models/FileUploadPurpose.cs +++ b/src/Generated/Models/FileUploadPurpose.cs @@ -15,6 +15,8 @@ namespace OpenAI.Files private const string BatchValue = "batch"; private const string FineTuneValue = "fine-tune"; private const string VisionValue = "vision"; + private const string UserDataValue = "user_data"; + private const string EvalsValue = "evals"; public FileUploadPurpose(string value) { @@ -31,6 +33,8 @@ 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/FineTuningIntegration.Serialization.cs b/src/Generated/Models/FineTuningIntegration.Serialization.cs index f70dc849d..25ca2bbb5 100644 --- a/src/Generated/Models/FineTuningIntegration.Serialization.cs +++ b/src/Generated/Models/FineTuningIntegration.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/FineTuningIntegrationWandbWandb.Serialization.cs b/src/Generated/Models/FineTuningIntegrationWandbWandb.Serialization.cs index 1001f4ab3..78f5b9124 100644 --- a/src/Generated/Models/FineTuningIntegrationWandbWandb.Serialization.cs +++ b/src/Generated/Models/FineTuningIntegrationWandbWandb.Serialization.cs @@ -38,27 +38,13 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Name) && _additionalBinaryDataProperties?.ContainsKey("name") != true) { - if (Name != null) - { - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - } - else - { - writer.WriteNull("name"u8); - } + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); } if (Optional.IsDefined(Entity) && _additionalBinaryDataProperties?.ContainsKey("entity") != true) { - if (Entity != null) - { - writer.WritePropertyName("entity"u8); - writer.WriteStringValue(Entity); - } - else - { - writer.WriteNull("entity"u8); - } + writer.WritePropertyName("entity"u8); + writer.WriteStringValue(Entity); } if (Optional.IsCollectionDefined(Tags) && _additionalBinaryDataProperties?.ContainsKey("tags") != true) { @@ -75,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -168,10 +154,7 @@ internal static FineTuningIntegrationWandbWandb DeserializeFineTuningIntegration tags = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FineTuningIntegrationWandbWandb(project, name, entity, tags ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/FineTuningJob.Serialization.cs b/src/Generated/Models/FineTuningJob.Serialization.cs index 69d786bfa..d277df6ed 100644 --- a/src/Generated/Models/FineTuningJob.Serialization.cs +++ b/src/Generated/Models/FineTuningJob.Serialization.cs @@ -33,15 +33,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(UserProvidedSuffix) && _additionalBinaryDataProperties?.ContainsKey("user_provided_suffix") != true) { - if (UserProvidedSuffix != null) - { - writer.WritePropertyName("user_provided_suffix"u8); - writer.WriteStringValue(UserProvidedSuffix); - } - else - { - writer.WriteNull("userProvidedSuffix"u8); - } + writer.WritePropertyName("user_provided_suffix"u8); + writer.WriteStringValue(UserProvidedSuffix); } if (_additionalBinaryDataProperties?.ContainsKey("id") != true) { @@ -55,7 +48,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("error") != true) { - if (Error != null) + if (Optional.IsDefined(Error)) { writer.WritePropertyName("error"u8); writer.WriteObjectValue(Error, options); @@ -67,26 +60,26 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("fine_tuned_model") != true) { - if (FineTunedModel != null) + if (Optional.IsDefined(FineTunedModel)) { writer.WritePropertyName("fine_tuned_model"u8); writer.WriteStringValue(FineTunedModel); } else { - writer.WriteNull("fineTunedModel"u8); + writer.WriteNull("fine_tuned_model"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("finished_at") != true) { - if (FinishedAt != null) + if (Optional.IsDefined(FinishedAt)) { writer.WritePropertyName("finished_at"u8); writer.WriteNumberValue(FinishedAt.Value, "U"); } else { - writer.WriteNull("finishedAt"u8); + writer.WriteNull("finished_at"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("hyperparameters") != true) @@ -131,14 +124,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("trained_tokens") != true) { - if (TrainedTokens != null) + if (Optional.IsDefined(TrainedTokens)) { writer.WritePropertyName("trained_tokens"u8); writer.WriteNumberValue(TrainedTokens.Value); } else { - writer.WriteNull("trainedTokens"u8); + writer.WriteNull("trained_tokens"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("training_file") != true) @@ -148,32 +141,25 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("validation_file") != true) { - if (ValidationFile != null) + if (Optional.IsDefined(ValidationFile)) { writer.WritePropertyName("validation_file"u8); writer.WriteStringValue(ValidationFile); } else { - writer.WriteNull("validationFile"u8); + writer.WriteNull("validation_file"u8); } } if (Optional.IsCollectionDefined(Integrations) && _additionalBinaryDataProperties?.ContainsKey("integrations") != true) { - if (Integrations != null) - { - writer.WritePropertyName("integrations"u8); - writer.WriteStartArray(); - foreach (InternalFineTuningIntegration item in Integrations) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else + writer.WritePropertyName("integrations"u8); + writer.WriteStartArray(); + foreach (InternalFineTuningIntegration item in Integrations) { - writer.WriteNull("integrations"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); } if (_additionalBinaryDataProperties?.ContainsKey("seed") != true) { @@ -182,22 +168,38 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(EstimatedFinish) && _additionalBinaryDataProperties?.ContainsKey("estimated_finish") != true) { - if (EstimatedFinish != null) - { - writer.WritePropertyName("estimated_finish"u8); - writer.WriteNumberValue(EstimatedFinish.Value, "U"); - } - else - { - writer.WriteNull("estimatedFinish"u8); - } + 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 (true && _additionalBinaryDataProperties != null) + 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) { @@ -256,6 +258,7 @@ internal static FineTuningJob DeserializeFineTuningJob(JsonElement element, Mode int seed = default; DateTimeOffset? estimatedFinish = default; InternalTodoFineTuneMethod @method = default; + IDictionary metadata = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -414,10 +417,29 @@ internal static FineTuningJob DeserializeFineTuningJob(JsonElement element, Mode @method = InternalTodoFineTuneMethod.DeserializeInternalTodoFineTuneMethod(prop.Value, options); continue; } - if (true) + if (prop.NameEquals("metadata"u8)) { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + 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, @@ -439,6 +461,7 @@ internal static FineTuningJob DeserializeFineTuningJob(JsonElement element, Mode seed, estimatedFinish, @method, + metadata, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/FineTuningJob.cs b/src/Generated/Models/FineTuningJob.cs index 7c29b6d61..9724f2c58 100644 --- a/src/Generated/Models/FineTuningJob.cs +++ b/src/Generated/Models/FineTuningJob.cs @@ -13,7 +13,7 @@ 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) + 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; @@ -30,9 +30,10 @@ internal FineTuningJob(string id, DateTimeOffset createdAt, FineTuningJobError e 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 additionalBinaryDataProperties) + 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; @@ -53,6 +54,7 @@ internal FineTuningJob(string userProvidedSuffix, string id, DateTimeOffset crea Seed = seed; EstimatedFinish = estimatedFinish; Method = @method; + Metadata = metadata; _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -94,6 +96,8 @@ internal FineTuningJob(string userProvidedSuffix, string id, DateTimeOffset crea public InternalTodoFineTuneMethod Method { get; } + public IDictionary Metadata { get; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/FineTuningJobError.Serialization.cs b/src/Generated/Models/FineTuningJobError.Serialization.cs index 20bbc87e6..f2df1dd73 100644 --- a/src/Generated/Models/FineTuningJobError.Serialization.cs +++ b/src/Generated/Models/FineTuningJobError.Serialization.cs @@ -43,7 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("param") != true) { - if (Param != null) + if (Optional.IsDefined(Param)) { writer.WritePropertyName("param"u8); writer.WriteStringValue(Param); @@ -53,7 +53,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("param"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -119,10 +119,7 @@ internal static FineTuningJobError DeserializeFineTuningJobError(JsonElement ele @param = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FineTuningJobError(code, message, @param, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/FineTuningJobEvent.Serialization.cs b/src/Generated/Models/FineTuningJobEvent.Serialization.cs index ea048b303..a282cf61d 100644 --- a/src/Generated/Models/FineTuningJobEvent.Serialization.cs +++ b/src/Generated/Models/FineTuningJobEvent.Serialization.cs @@ -73,7 +73,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -116,7 +116,7 @@ internal static FineTuningJobEvent DeserializeFineTuningJobEvent(JsonElement ele InternalFineTuningJobEventObject @object = default; string id = default; DateTimeOffset createdAt = default; - FineTuning.FineTuningJobEventLevel level = default; + FineTuningJobEventLevel level = default; string message = default; InternalFineTuningJobEventType? @type = default; BinaryData data = default; @@ -166,10 +166,7 @@ internal static FineTuningJobEvent DeserializeFineTuningJobEvent(JsonElement ele data = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FineTuningJobEvent( @object, diff --git a/src/Generated/Models/FineTuningJobEvent.cs b/src/Generated/Models/FineTuningJobEvent.cs index 0830a329d..0c4f8ec4a 100644 --- a/src/Generated/Models/FineTuningJobEvent.cs +++ b/src/Generated/Models/FineTuningJobEvent.cs @@ -11,7 +11,7 @@ internal partial class FineTuningJobEvent { private protected IDictionary _additionalBinaryDataProperties; - internal FineTuningJobEvent(string id, DateTimeOffset createdAt, FineTuning.FineTuningJobEventLevel level, string message) + internal FineTuningJobEvent(string id, DateTimeOffset createdAt, FineTuningJobEventLevel level, string message) { Id = id; CreatedAt = createdAt; @@ -19,7 +19,7 @@ internal FineTuningJobEvent(string id, DateTimeOffset createdAt, FineTuning.Fine Message = message; } - internal FineTuningJobEvent(InternalFineTuningJobEventObject @object, string id, DateTimeOffset createdAt, FineTuning.FineTuningJobEventLevel level, string message, InternalFineTuningJobEventType? @type, BinaryData data, IDictionary additionalBinaryDataProperties) + internal FineTuningJobEvent(InternalFineTuningJobEventObject @object, string id, DateTimeOffset createdAt, FineTuningJobEventLevel level, string message, InternalFineTuningJobEventType? @type, BinaryData data, IDictionary additionalBinaryDataProperties) { Object = @object; Id = id; @@ -37,7 +37,7 @@ internal FineTuningJobEvent(InternalFineTuningJobEventObject @object, string id, public DateTimeOffset CreatedAt { get; } - public FineTuning.FineTuningJobEventLevel Level { get; } + public FineTuningJobEventLevel Level { get; } public string Message { get; } diff --git a/src/Generated/Models/FineTuningJobEventLevel.Serialization.cs b/src/Generated/Models/FineTuningJobEventLevel.Serialization.cs index 18ef3bc2a..0014a83c8 100644 --- a/src/Generated/Models/FineTuningJobEventLevel.Serialization.cs +++ b/src/Generated/Models/FineTuningJobEventLevel.Serialization.cs @@ -8,27 +8,27 @@ namespace OpenAI.FineTuning { internal static partial class FineTuningJobEventLevelExtensions { - public static string ToSerialString(this FineTuning.FineTuningJobEventLevel value) => value switch + public static string ToSerialString(this FineTuningJobEventLevel value) => value switch { - FineTuning.FineTuningJobEventLevel.Info => "info", - FineTuning.FineTuningJobEventLevel.Warn => "warn", - FineTuning.FineTuningJobEventLevel.Error => "error", + FineTuningJobEventLevel.Info => "info", + FineTuningJobEventLevel.Warn => "warn", + FineTuningJobEventLevel.Error => "error", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FineTuningJobEventLevel value.") }; - public static FineTuning.FineTuningJobEventLevel ToFineTuningJobEventLevel(this string value) + public static FineTuningJobEventLevel ToFineTuningJobEventLevel(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "info")) { - return FineTuning.FineTuningJobEventLevel.Info; + return FineTuningJobEventLevel.Info; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "warn")) { - return FineTuning.FineTuningJobEventLevel.Warn; + return FineTuningJobEventLevel.Warn; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "error")) { - return FineTuning.FineTuningJobEventLevel.Error; + return FineTuningJobEventLevel.Error; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FineTuningJobEventLevel value."); } diff --git a/src/Generated/Models/FineTuningJobHyperparameters.Serialization.cs b/src/Generated/Models/FineTuningJobHyperparameters.Serialization.cs index 4b059813b..0313a08d5 100644 --- a/src/Generated/Models/FineTuningJobHyperparameters.Serialization.cs +++ b/src/Generated/Models/FineTuningJobHyperparameters.Serialization.cs @@ -67,7 +67,7 @@ private void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions } #endif } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -140,10 +140,7 @@ internal static FineTuningJobHyperparameters DeserializeFineTuningJobHyperparame learningRateMultiplier = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FineTuningJobHyperparameters(nEpochs, batchSize, learningRateMultiplier, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/FineTuningOptions.Serialization.cs b/src/Generated/Models/FineTuningOptions.Serialization.cs index 461e0d5ca..56be23c07 100644 --- a/src/Generated/Models/FineTuningOptions.Serialization.cs +++ b/src/Generated/Models/FineTuningOptions.Serialization.cs @@ -48,63 +48,51 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Suffix) && _additionalBinaryDataProperties?.ContainsKey("suffix") != true) { - if (Suffix != null) - { - writer.WritePropertyName("suffix"u8); - writer.WriteStringValue(Suffix); - } - else - { - writer.WriteNull("suffix"u8); - } + writer.WritePropertyName("suffix"u8); + writer.WriteStringValue(Suffix); } if (Optional.IsDefined(ValidationFile) && _additionalBinaryDataProperties?.ContainsKey("validation_file") != true) { - if (ValidationFile != null) - { - writer.WritePropertyName("validation_file"u8); - writer.WriteStringValue(ValidationFile); - } - else - { - writer.WriteNull("validationFile"u8); - } + writer.WritePropertyName("validation_file"u8); + writer.WriteStringValue(ValidationFile); } if (Optional.IsCollectionDefined(Integrations) && _additionalBinaryDataProperties?.ContainsKey("integrations") != true) { - if (Integrations != null) + writer.WritePropertyName("integrations"u8); + writer.WriteStartArray(); + foreach (FineTuningIntegration item in Integrations) { - writer.WritePropertyName("integrations"u8); - writer.WriteStartArray(); - foreach (FineTuningIntegration item in Integrations) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else - { - writer.WriteNull("integrations"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); } if (Optional.IsDefined(Seed) && _additionalBinaryDataProperties?.ContainsKey("seed") != true) { - if (Seed != null) - { - writer.WritePropertyName("seed"u8); - writer.WriteNumberValue(Seed.Value); - } - else - { - writer.WriteNull("seed"u8); - } + writer.WritePropertyName("seed"u8); + writer.WriteNumberValue(Seed.Value); } if (Optional.IsDefined(Method) && _additionalBinaryDataProperties?.ContainsKey("method") != true) { writer.WritePropertyName("method"u8); writer.WriteObjectValue(Method, options); } - if (true && _additionalBinaryDataProperties != null) + 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 != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -152,6 +140,7 @@ internal static FineTuningOptions DeserializeFineTuningOptions(JsonElement eleme IList integrations = default; int? seed = default; InternalTodoFineTuneMethod @method = default; + IDictionary metadata = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -227,10 +216,28 @@ internal static FineTuningOptions DeserializeFineTuningOptions(JsonElement eleme @method = InternalTodoFineTuneMethod.DeserializeInternalTodoFineTuneMethod(prop.Value, options); continue; } - if (true) + if (prop.NameEquals("metadata"u8)) { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + 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; } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FineTuningOptions( model, @@ -241,6 +248,7 @@ internal static FineTuningOptions DeserializeFineTuningOptions(JsonElement eleme integrations ?? new ChangeTrackingList(), seed, @method, + metadata ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/FineTuningOptions.cs b/src/Generated/Models/FineTuningOptions.cs index d3b1e74f5..d3fce23ce 100644 --- a/src/Generated/Models/FineTuningOptions.cs +++ b/src/Generated/Models/FineTuningOptions.cs @@ -19,9 +19,10 @@ public FineTuningOptions(InternalCreateFineTuningJobRequestModel model, string t 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 additionalBinaryDataProperties) + internal FineTuningOptions(InternalCreateFineTuningJobRequestModel model, string trainingFile, HyperparameterOptions hyperparameters, string suffix, string validationFile, IList integrations, int? seed, InternalTodoFineTuneMethod @method, IDictionary metadata, IDictionary additionalBinaryDataProperties) { Model = model; TrainingFile = trainingFile; @@ -31,6 +32,7 @@ internal FineTuningOptions(InternalCreateFineTuningJobRequestModel model, string Integrations = integrations; Seed = seed; Method = @method; + Metadata = metadata; _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -50,6 +52,8 @@ internal FineTuningOptions(InternalCreateFineTuningJobRequestModel model, string public InternalTodoFineTuneMethod Method { get; set; } + public IDictionary Metadata { get; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/FunctionCallOutputResponseItem.Serialization.cs b/src/Generated/Models/FunctionCallOutputResponseItem.Serialization.cs new file mode 100644 index 000000000..48b5192bf --- /dev/null +++ b/src/Generated/Models/FunctionCallOutputResponseItem.Serialization.cs @@ -0,0 +1,168 @@ +// + +#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 FunctionCallOutputResponseItem : IJsonModel + { + internal FunctionCallOutputResponseItem() + { + } + + 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(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); + writer.WriteStringValue(CallId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output") != true) + { + writer.WritePropertyName("output"u8); + writer.WriteStringValue(FunctionOutput); + } + } + + FunctionCallOutputResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (FunctionCallOutputResponseItem)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(FunctionCallOutputResponseItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFunctionCallOutputResponseItem(document.RootElement, options); + } + + internal static FunctionCallOutputResponseItem DeserializeFunctionCallOutputResponseItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesItemType @type = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + FunctionCallOutputStatus? status = default; + string callId = default; + string functionOutput = 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().ToFunctionCallOutputStatus(); + continue; + } + if (prop.NameEquals("call_id"u8)) + { + callId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output"u8)) + { + functionOutput = prop.Value.GetString(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new FunctionCallOutputResponseItem( + @type, + id, + additionalBinaryDataProperties, + status, + callId, + functionOutput); + } + + 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(FunctionCallOutputResponseItem)} does not support writing '{options.Format}' format."); + } + } + + FunctionCallOutputResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (FunctionCallOutputResponseItem)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 DeserializeFunctionCallOutputResponseItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FunctionCallOutputResponseItem)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..ed460a91e --- /dev/null +++ b/src/Generated/Models/FunctionCallOutputResponseItem.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +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) + { + Argument.AssertNotNull(callId, nameof(callId)); + Argument.AssertNotNull(functionOutput, nameof(functionOutput)); + + CallId = callId; + FunctionOutput = functionOutput; + } + + internal FunctionCallOutputResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, FunctionCallOutputStatus? status, string callId, string functionOutput) : base(@type, id, additionalBinaryDataProperties) + { + Status = status; + CallId = callId; + FunctionOutput = functionOutput; + } + + public FunctionCallOutputStatus? Status { get; } + + public string CallId { get; set; } + } +} diff --git a/src/Generated/Models/FunctionCallOutputStatus.Serialization.cs b/src/Generated/Models/FunctionCallOutputStatus.Serialization.cs new file mode 100644 index 000000000..fdf1427c8 --- /dev/null +++ b/src/Generated/Models/FunctionCallOutputStatus.Serialization.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + internal static partial class FunctionCallOutputStatusExtensions + { + public static string ToSerialString(this FunctionCallOutputStatus value) => value switch + { + FunctionCallOutputStatus.InProgress => "in_progress", + FunctionCallOutputStatus.Completed => "completed", + FunctionCallOutputStatus.Incomplete => "incomplete", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FunctionCallOutputStatus value.") + }; + + public static FunctionCallOutputStatus ToFunctionCallOutputStatus(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) + { + return FunctionCallOutputStatus.InProgress; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "completed")) + { + return FunctionCallOutputStatus.Completed; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "incomplete")) + { + return FunctionCallOutputStatus.Incomplete; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FunctionCallOutputStatus value."); + } + } +} diff --git a/src/Generated/Models/FunctionCallResponseItem.Serialization.cs b/src/Generated/Models/FunctionCallResponseItem.Serialization.cs new file mode 100644 index 000000000..c9429aa2e --- /dev/null +++ b/src/Generated/Models/FunctionCallResponseItem.Serialization.cs @@ -0,0 +1,187 @@ +// + +#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 FunctionCallResponseItem : IJsonModel + { + internal FunctionCallResponseItem() + { + } + + 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(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); + writer.WriteStringValue(CallId); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(FunctionName); + } + if (_additionalBinaryDataProperties?.ContainsKey("arguments") != true) + { + writer.WritePropertyName("arguments"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(FunctionArguments); +#else + using (JsonDocument document = JsonDocument.Parse(FunctionArguments)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + + FunctionCallResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (FunctionCallResponseItem)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(FunctionCallResponseItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFunctionCallResponseItem(document.RootElement, options); + } + + internal static FunctionCallResponseItem DeserializeFunctionCallResponseItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesItemType @type = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + FunctionCallStatus? status = default; + string callId = default; + string functionName = default; + BinaryData functionArguments = 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().ToFunctionCallStatus(); + continue; + } + if (prop.NameEquals("call_id"u8)) + { + callId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("name"u8)) + { + functionName = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("arguments"u8)) + { + functionArguments = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new FunctionCallResponseItem( + @type, + id, + additionalBinaryDataProperties, + status, + callId, + functionName, + functionArguments); + } + + 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(FunctionCallResponseItem)} does not support writing '{options.Format}' format."); + } + } + + FunctionCallResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (FunctionCallResponseItem)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 DeserializeFunctionCallResponseItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FunctionCallResponseItem)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..e92b76032 --- /dev/null +++ b/src/Generated/Models/FunctionCallResponseItem.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class FunctionCallResponseItem : ResponseItem + { + internal FunctionCallResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, FunctionCallStatus? status, string callId, string functionName, BinaryData functionArguments) : base(@type, id, additionalBinaryDataProperties) + { + Status = status; + CallId = callId; + FunctionName = functionName; + FunctionArguments = functionArguments; + } + + public FunctionCallStatus? Status { get; } + + public string CallId { get; set; } + } +} diff --git a/src/Generated/Models/FunctionCallStatus.Serialization.cs b/src/Generated/Models/FunctionCallStatus.Serialization.cs new file mode 100644 index 000000000..225abdf18 --- /dev/null +++ b/src/Generated/Models/FunctionCallStatus.Serialization.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + internal static partial class FunctionCallStatusExtensions + { + public static string ToSerialString(this FunctionCallStatus value) => value switch + { + FunctionCallStatus.InProgress => "in_progress", + FunctionCallStatus.Completed => "completed", + FunctionCallStatus.Incomplete => "incomplete", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FunctionCallStatus value.") + }; + + public static FunctionCallStatus ToFunctionCallStatus(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) + { + return FunctionCallStatus.InProgress; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "completed")) + { + return FunctionCallStatus.Completed; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "incomplete")) + { + return FunctionCallStatus.Incomplete; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown FunctionCallStatus value."); + } + } +} diff --git a/src/Generated/Models/FunctionChatMessage.Serialization.cs b/src/Generated/Models/FunctionChatMessage.Serialization.cs index ae92c684e..59e067b67 100644 --- a/src/Generated/Models/FunctionChatMessage.Serialization.cs +++ b/src/Generated/Models/FunctionChatMessage.Serialization.cs @@ -52,7 +52,7 @@ internal static FunctionChatMessage DeserializeFunctionChatMessage(JsonElement e return null; } ChatMessageContent content = default; - Chat.ChatMessageRole role = default; + ChatMessageRole role = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string functionName = default; foreach (var prop in element.EnumerateObject()) @@ -72,13 +72,9 @@ internal static FunctionChatMessage DeserializeFunctionChatMessage(JsonElement e functionName = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - // CUSTOM: Initialize Content collection property. - return new FunctionChatMessage(content ?? new ChatMessageContent(), role, additionalBinaryDataProperties, functionName); + return new FunctionChatMessage(content, role, additionalBinaryDataProperties, functionName); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); diff --git a/src/Generated/Models/FunctionChatMessage.cs b/src/Generated/Models/FunctionChatMessage.cs index 4fa37e086..686508806 100644 --- a/src/Generated/Models/FunctionChatMessage.cs +++ b/src/Generated/Models/FunctionChatMessage.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat { public partial class FunctionChatMessage : ChatMessage { - internal FunctionChatMessage(ChatMessageContent content, Chat.ChatMessageRole role, IDictionary additionalBinaryDataProperties, string functionName) : base(content, role, additionalBinaryDataProperties) + internal FunctionChatMessage(ChatMessageContent content, ChatMessageRole role, IDictionary additionalBinaryDataProperties, string functionName) : base(content, role, additionalBinaryDataProperties) { FunctionName = functionName; } diff --git a/src/Generated/Models/FunctionToolDefinition.Serialization.cs b/src/Generated/Models/FunctionToolDefinition.Serialization.cs index fc2d3992f..6e09ab985 100644 --- a/src/Generated/Models/FunctionToolDefinition.Serialization.cs +++ b/src/Generated/Models/FunctionToolDefinition.Serialization.cs @@ -24,7 +24,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("function") != true) { writer.WritePropertyName("function"u8); - writer.WriteObjectValue(_internalFunction, options); + writer.WriteObjectValue(_internalFunction, options); } } @@ -62,10 +62,7 @@ internal static FunctionToolDefinition DeserializeFunctionToolDefinition(JsonEle internalFunction = InternalFunctionDefinition.DeserializeInternalFunctionDefinition(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FunctionToolDefinition(@type, additionalBinaryDataProperties, internalFunction); } diff --git a/src/Generated/Models/GeneratedImage.Serialization.cs b/src/Generated/Models/GeneratedImage.Serialization.cs index a89305aef..fa6a11c94 100644 --- a/src/Generated/Models/GeneratedImage.Serialization.cs +++ b/src/Generated/Models/GeneratedImage.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("url"u8); writer.WriteStringValue(ImageUri.AbsoluteUri); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -111,10 +111,7 @@ internal static GeneratedImage DeserializeGeneratedImage(JsonElement element, Mo imageUri = new Uri(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new GeneratedImage(revisedPrompt, imageBytes, imageUri, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/GeneratedImageCollection.Serialization.cs b/src/Generated/Models/GeneratedImageCollection.Serialization.cs index b58c56430..ed8c4fed2 100644 --- a/src/Generated/Models/GeneratedImageCollection.Serialization.cs +++ b/src/Generated/Models/GeneratedImageCollection.Serialization.cs @@ -24,7 +24,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("created"u8); writer.WriteNumberValue(CreatedAt, "U"); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -55,7 +55,7 @@ protected virtual GeneratedImageCollection JsonModelCreateCore(ref Utf8JsonReade throw new FormatException($"The model {nameof(GeneratedImageCollection)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return GeneratedImageCollection.DeserializeGeneratedImageCollection(document.RootElement, options); + return DeserializeGeneratedImageCollection(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -82,7 +82,7 @@ protected virtual GeneratedImageCollection PersistableModelCreateCore(BinaryData case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return GeneratedImageCollection.DeserializeGeneratedImageCollection(document.RootElement, options); + return DeserializeGeneratedImageCollection(document.RootElement, options); } default: throw new FormatException($"The model {nameof(GeneratedImageCollection)} does not support reading '{options.Format}' format."); @@ -104,7 +104,7 @@ public static explicit operator GeneratedImageCollection(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return GeneratedImageCollection.DeserializeGeneratedImageCollection(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeGeneratedImageCollection(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/HyperparameterOptions.Serialization.cs b/src/Generated/Models/HyperparameterOptions.Serialization.cs index 5b9bc3c28..7ad18598a 100644 --- a/src/Generated/Models/HyperparameterOptions.Serialization.cs +++ b/src/Generated/Models/HyperparameterOptions.Serialization.cs @@ -63,7 +63,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -136,10 +136,7 @@ internal static HyperparameterOptions DeserializeHyperparameterOptions(JsonEleme nEpochs = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new HyperparameterOptions(batchSize, learningRateMultiplier, nEpochs, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ImageEditOptions.Serialization.cs b/src/Generated/Models/ImageEditOptions.Serialization.cs index 4b56a9f0a..575b51612 100644 --- a/src/Generated/Models/ImageEditOptions.Serialization.cs +++ b/src/Generated/Models/ImageEditOptions.Serialization.cs @@ -29,15 +29,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) { - if (Model != null) - { - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.Value.ToString()); - } - else - { - writer.WriteNull("model"u8); - } + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.Value.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("image") != true) { @@ -56,46 +49,25 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(N) && _additionalBinaryDataProperties?.ContainsKey("n") != true) { - if (N != null) - { - writer.WritePropertyName("n"u8); - writer.WriteNumberValue(N.Value); - } - else - { - writer.WriteNull("n"u8); - } + writer.WritePropertyName("n"u8); + writer.WriteNumberValue(N.Value); } if (Optional.IsDefined(Size) && _additionalBinaryDataProperties?.ContainsKey("size") != true) { - if (Size != null) - { - writer.WritePropertyName("size"u8); - writer.WriteStringValue(Size.Value.ToString()); - } - else - { - writer.WriteNull("size"u8); - } + writer.WritePropertyName("size"u8); + writer.WriteStringValue(Size.Value.ToString()); } if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) { - if (ResponseFormat != null) - { - writer.WritePropertyName("response_format"u8); - writer.WriteStringValue(ResponseFormat.Value.ToString()); - } - else - { - writer.WriteNull("responseFormat"u8); - } + writer.WritePropertyName("response_format"u8); + writer.WriteStringValue(ResponseFormat.Value.ToString()); } if (Optional.IsDefined(EndUserId) && _additionalBinaryDataProperties?.ContainsKey("user") != true) { writer.WritePropertyName("user"u8); writer.WriteStringValue(EndUserId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -210,10 +182,7 @@ internal static ImageEditOptions DeserializeImageEditOptions(JsonElement element endUserId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ImageEditOptions( model, diff --git a/src/Generated/Models/ImageGenerationOptions.Serialization.cs b/src/Generated/Models/ImageGenerationOptions.Serialization.cs index cb8f165d3..f4d097c38 100644 --- a/src/Generated/Models/ImageGenerationOptions.Serialization.cs +++ b/src/Generated/Models/ImageGenerationOptions.Serialization.cs @@ -34,51 +34,23 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) { - if (ResponseFormat != null) - { - writer.WritePropertyName("response_format"u8); - writer.WriteStringValue(ResponseFormat.Value.ToString()); - } - else - { - writer.WriteNull("responseFormat"u8); - } + writer.WritePropertyName("response_format"u8); + writer.WriteStringValue(ResponseFormat.Value.ToString()); } if (Optional.IsDefined(Size) && _additionalBinaryDataProperties?.ContainsKey("size") != true) { - if (Size != null) - { - writer.WritePropertyName("size"u8); - writer.WriteStringValue(Size.Value.ToString()); - } - else - { - writer.WriteNull("size"u8); - } + writer.WritePropertyName("size"u8); + writer.WriteStringValue(Size.Value.ToString()); } if (Optional.IsDefined(Style) && _additionalBinaryDataProperties?.ContainsKey("style") != true) { - if (Style != null) - { - writer.WritePropertyName("style"u8); - writer.WriteStringValue(Style.Value.ToString()); - } - else - { - writer.WriteNull("style"u8); - } + writer.WritePropertyName("style"u8); + writer.WriteStringValue(Style.Value.ToString()); } if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) { - if (Model != null) - { - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.Value.ToString()); - } - else - { - writer.WriteNull("model"u8); - } + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.Value.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("prompt") != true) { @@ -87,22 +59,15 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(N) && _additionalBinaryDataProperties?.ContainsKey("n") != true) { - if (N != null) - { - writer.WritePropertyName("n"u8); - writer.WriteNumberValue(N.Value); - } - else - { - writer.WriteNull("n"u8); - } + writer.WritePropertyName("n"u8); + writer.WriteNumberValue(N.Value); } if (Optional.IsDefined(EndUserId) && _additionalBinaryDataProperties?.ContainsKey("user") != true) { writer.WritePropertyName("user"u8); writer.WriteStringValue(EndUserId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -222,10 +187,7 @@ internal static ImageGenerationOptions DeserializeImageGenerationOptions(JsonEle endUserId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ImageGenerationOptions( quality, diff --git a/src/Generated/Models/ImageVariationOptions.Serialization.cs b/src/Generated/Models/ImageVariationOptions.Serialization.cs index 860fa87f2..9be8aef7c 100644 --- a/src/Generated/Models/ImageVariationOptions.Serialization.cs +++ b/src/Generated/Models/ImageVariationOptions.Serialization.cs @@ -29,15 +29,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) { - if (Model != null) - { - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.Value.ToString()); - } - else - { - writer.WriteNull("model"u8); - } + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.Value.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("image") != true) { @@ -46,46 +39,25 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(N) && _additionalBinaryDataProperties?.ContainsKey("n") != true) { - if (N != null) - { - writer.WritePropertyName("n"u8); - writer.WriteNumberValue(N.Value); - } - else - { - writer.WriteNull("n"u8); - } + writer.WritePropertyName("n"u8); + writer.WriteNumberValue(N.Value); } if (Optional.IsDefined(Size) && _additionalBinaryDataProperties?.ContainsKey("size") != true) { - if (Size != null) - { - writer.WritePropertyName("size"u8); - writer.WriteStringValue(Size.Value.ToString()); - } - else - { - writer.WriteNull("size"u8); - } + writer.WritePropertyName("size"u8); + writer.WriteStringValue(Size.Value.ToString()); } if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) { - if (ResponseFormat != null) - { - writer.WritePropertyName("response_format"u8); - writer.WriteStringValue(ResponseFormat.Value.ToString()); - } - else - { - writer.WriteNull("responseFormat"u8); - } + writer.WritePropertyName("response_format"u8); + writer.WriteStringValue(ResponseFormat.Value.ToString()); } if (Optional.IsDefined(EndUserId) && _additionalBinaryDataProperties?.ContainsKey("user") != true) { writer.WritePropertyName("user"u8); writer.WriteStringValue(EndUserId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -184,10 +156,7 @@ internal static ImageVariationOptions DeserializeImageVariationOptions(JsonEleme endUserId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ImageVariationOptions( model, diff --git a/src/Generated/Models/InternalAddUploadPartRequest.Serialization.cs b/src/Generated/Models/InternalAddUploadPartRequest.Serialization.cs index a8cfb5281..e244636e1 100644 --- a/src/Generated/Models/InternalAddUploadPartRequest.Serialization.cs +++ b/src/Generated/Models/InternalAddUploadPartRequest.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("data"u8); writer.WriteBase64StringValue(Data.ToArray(), "D"); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalAddUploadPartRequest DeserializeInternalAddUploadPartReq data = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAddUploadPartRequest(data, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalAssistantResponseFormatJsonObject.Serialization.cs b/src/Generated/Models/InternalAssistantResponseFormatJsonObject.Serialization.cs index cc5ef9d4a..fa99ded1d 100644 --- a/src/Generated/Models/InternalAssistantResponseFormatJsonObject.Serialization.cs +++ b/src/Generated/Models/InternalAssistantResponseFormatJsonObject.Serialization.cs @@ -58,10 +58,7 @@ internal static InternalAssistantResponseFormatJsonObject DeserializeInternalAss @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAssistantResponseFormatJsonObject(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalAssistantResponseFormatJsonSchema.Serialization.cs b/src/Generated/Models/InternalAssistantResponseFormatJsonSchema.Serialization.cs index b62b36879..7b88fb4da 100644 --- a/src/Generated/Models/InternalAssistantResponseFormatJsonSchema.Serialization.cs +++ b/src/Generated/Models/InternalAssistantResponseFormatJsonSchema.Serialization.cs @@ -74,10 +74,7 @@ internal static InternalAssistantResponseFormatJsonSchema DeserializeInternalAss jsonSchema = InternalResponseFormatJsonSchemaJsonSchema.DeserializeInternalResponseFormatJsonSchemaJsonSchema(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAssistantResponseFormatJsonSchema(@type, additionalBinaryDataProperties, jsonSchema); } diff --git a/src/Generated/Models/InternalAssistantResponseFormatText.Serialization.cs b/src/Generated/Models/InternalAssistantResponseFormatText.Serialization.cs index a7e939ffa..691a9e688 100644 --- a/src/Generated/Models/InternalAssistantResponseFormatText.Serialization.cs +++ b/src/Generated/Models/InternalAssistantResponseFormatText.Serialization.cs @@ -58,10 +58,7 @@ internal static InternalAssistantResponseFormatText DeserializeInternalAssistant @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAssistantResponseFormatText(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalAssistantSupportedModels.cs b/src/Generated/Models/InternalAssistantSupportedModels.cs new file mode 100644 index 000000000..77d90308b --- /dev/null +++ b/src/Generated/Models/InternalAssistantSupportedModels.cs @@ -0,0 +1,128 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal readonly partial struct InternalAssistantSupportedModels : 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 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 Gpt4oMiniValue = "gpt-4o-mini"; + private const string Gpt4oMini20240718Value = "gpt-4o-mini-2024-07-18"; + private const string Gpt45PreviewValue = "gpt-4.5-preview"; + private const string Gpt45Preview20250227Value = "gpt-4.5-preview-2025-02-27"; + 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 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 InternalAssistantSupportedModels(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static InternalAssistantSupportedModels O3Mini { get; } = new InternalAssistantSupportedModels(O3MiniValue); + + public static InternalAssistantSupportedModels O3Mini20250131 { get; } = new InternalAssistantSupportedModels(O3Mini20250131Value); + + public static InternalAssistantSupportedModels O1 { get; } = new InternalAssistantSupportedModels(O1Value); + + public static InternalAssistantSupportedModels O120241217 { get; } = new InternalAssistantSupportedModels(O120241217Value); + + public static InternalAssistantSupportedModels Gpt4o { get; } = new InternalAssistantSupportedModels(Gpt4oValue); + + public static InternalAssistantSupportedModels Gpt4o20241120 { get; } = new InternalAssistantSupportedModels(Gpt4o20241120Value); + + public static InternalAssistantSupportedModels Gpt4o20240806 { get; } = new InternalAssistantSupportedModels(Gpt4o20240806Value); + + public static InternalAssistantSupportedModels Gpt4o20240513 { get; } = new InternalAssistantSupportedModels(Gpt4o20240513Value); + + public static InternalAssistantSupportedModels Gpt4oMini { get; } = new InternalAssistantSupportedModels(Gpt4oMiniValue); + + public static InternalAssistantSupportedModels Gpt4oMini20240718 { get; } = new InternalAssistantSupportedModels(Gpt4oMini20240718Value); + + public static InternalAssistantSupportedModels Gpt45Preview { get; } = new InternalAssistantSupportedModels(Gpt45PreviewValue); + + public static InternalAssistantSupportedModels Gpt45Preview20250227 { get; } = new InternalAssistantSupportedModels(Gpt45Preview20250227Value); + + public static InternalAssistantSupportedModels Gpt4Turbo { get; } = new InternalAssistantSupportedModels(Gpt4TurboValue); + + public static InternalAssistantSupportedModels Gpt4Turbo20240409 { get; } = new InternalAssistantSupportedModels(Gpt4Turbo20240409Value); + + public static InternalAssistantSupportedModels Gpt40125Preview { get; } = new InternalAssistantSupportedModels(Gpt40125PreviewValue); + + public static InternalAssistantSupportedModels Gpt4TurboPreview { get; } = new InternalAssistantSupportedModels(Gpt4TurboPreviewValue); + + public static InternalAssistantSupportedModels Gpt41106Preview { get; } = new InternalAssistantSupportedModels(Gpt41106PreviewValue); + + public static InternalAssistantSupportedModels Gpt4VisionPreview { get; } = new InternalAssistantSupportedModels(Gpt4VisionPreviewValue); + + public static InternalAssistantSupportedModels Gpt4 { get; } = new InternalAssistantSupportedModels(Gpt4Value); + + public static InternalAssistantSupportedModels Gpt40314 { get; } = new InternalAssistantSupportedModels(Gpt40314Value); + + public static InternalAssistantSupportedModels Gpt40613 { get; } = new InternalAssistantSupportedModels(Gpt40613Value); + + public static InternalAssistantSupportedModels Gpt432k { get; } = new InternalAssistantSupportedModels(Gpt432kValue); + + public static InternalAssistantSupportedModels Gpt432k0314 { get; } = new InternalAssistantSupportedModels(Gpt432k0314Value); + + public static InternalAssistantSupportedModels Gpt432k0613 { get; } = new InternalAssistantSupportedModels(Gpt432k0613Value); + + public static InternalAssistantSupportedModels Gpt35Turbo { get; } = new InternalAssistantSupportedModels(Gpt35TurboValue); + + public static InternalAssistantSupportedModels Gpt35Turbo16k { get; } = new InternalAssistantSupportedModels(Gpt35Turbo16kValue); + + public static InternalAssistantSupportedModels Gpt35Turbo0613 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo0613Value); + + public static InternalAssistantSupportedModels Gpt35Turbo1106 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo1106Value); + + public static InternalAssistantSupportedModels Gpt35Turbo0125 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo0125Value); + + public static InternalAssistantSupportedModels Gpt35Turbo16k0613 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo16k0613Value); + + public static bool operator ==(InternalAssistantSupportedModels left, InternalAssistantSupportedModels right) => left.Equals(right); + + public static bool operator !=(InternalAssistantSupportedModels left, InternalAssistantSupportedModels right) => !left.Equals(right); + + public static implicit operator InternalAssistantSupportedModels(string value) => new InternalAssistantSupportedModels(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalAssistantSupportedModels other && Equals(other); + + public bool Equals(InternalAssistantSupportedModels 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 efe91100e..0dbb0a164 100644 --- a/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("max_num_results"u8); writer.WriteNumberValue(InternalMaxNumResults.Value); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static InternalAssistantToolsFileSearchFileSearch DeserializeInternalAs internalMaxNumResults = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAssistantToolsFileSearchFileSearch(rankingOptions, internalMaxNumResults, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs b/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs index c73097323..adebde7f6 100644 --- a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs +++ b/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs @@ -32,7 +32,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -81,10 +81,7 @@ internal static InternalAssistantToolsFileSearchTypeOnly DeserializeInternalAssi @type = new InternalAssistantToolsFileSearchTypeOnlyType(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAssistantToolsFileSearchTypeOnly(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.Serialization.cs b/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.Serialization.cs index bd02f8444..4c4b7495a 100644 --- a/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.Serialization.cs +++ b/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalAssistantsNamedToolChoiceFunction DeserializeInternalAss name = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAssistantsNamedToolChoiceFunction(name, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalAutoChunkingStrategy.Serialization.cs b/src/Generated/Models/InternalAutoChunkingStrategy.Serialization.cs index 2c92732ee..6804f8839 100644 --- a/src/Generated/Models/InternalAutoChunkingStrategy.Serialization.cs +++ b/src/Generated/Models/InternalAutoChunkingStrategy.Serialization.cs @@ -58,10 +58,7 @@ internal static InternalAutoChunkingStrategy DeserializeInternalAutoChunkingStra @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAutoChunkingStrategy(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs b/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs index c258abd77..c0f13df24 100644 --- a/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs +++ b/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs @@ -58,10 +58,7 @@ internal static InternalAutoChunkingStrategyRequestParam DeserializeInternalAuto @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAutoChunkingStrategyRequestParam(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalBatchError.Serialization.cs b/src/Generated/Models/InternalBatchError.Serialization.cs index c3d3f4c0d..0940dccad 100644 --- a/src/Generated/Models/InternalBatchError.Serialization.cs +++ b/src/Generated/Models/InternalBatchError.Serialization.cs @@ -39,29 +39,15 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Param) && _additionalBinaryDataProperties?.ContainsKey("param") != true) { - if (Param != null) - { - writer.WritePropertyName("param"u8); - writer.WriteStringValue(Param); - } - else - { - writer.WriteNull("param"u8); - } + writer.WritePropertyName("param"u8); + writer.WriteStringValue(Param); } if (Optional.IsDefined(Line) && _additionalBinaryDataProperties?.ContainsKey("line") != true) { - if (Line != null) - { - writer.WritePropertyName("line"u8); - writer.WriteNumberValue(Line.Value); - } - else - { - writer.WriteNull("line"u8); - } + writer.WritePropertyName("line"u8); + writer.WriteNumberValue(Line.Value); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -138,10 +124,7 @@ internal static InternalBatchError DeserializeInternalBatchError(JsonElement ele line = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchError(code, message, @param, line, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalBatchErrors.Serialization.cs b/src/Generated/Models/InternalBatchErrors.Serialization.cs index 7d09b6dca..9c03f2263 100644 --- a/src/Generated/Models/InternalBatchErrors.Serialization.cs +++ b/src/Generated/Models/InternalBatchErrors.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -110,10 +110,7 @@ internal static InternalBatchErrors DeserializeInternalBatchErrors(JsonElement e data = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchErrors(@object, data ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalBatchJob.Serialization.cs b/src/Generated/Models/InternalBatchJob.Serialization.cs index 99da02c43..cc9e8cb13 100644 --- a/src/Generated/Models/InternalBatchJob.Serialization.cs +++ b/src/Generated/Models/InternalBatchJob.Serialization.cs @@ -128,7 +128,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (Optional.IsCollectionDefined(Metadata)) { writer.WritePropertyName("metadata"u8); writer.WriteStartObject(); @@ -149,7 +149,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("metadata"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -369,10 +369,7 @@ internal static InternalBatchJob DeserializeInternalBatchJob(JsonElement element metadata = dictionary; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchJob( id, diff --git a/src/Generated/Models/InternalBatchRequestCounts.Serialization.cs b/src/Generated/Models/InternalBatchRequestCounts.Serialization.cs index e1af9a276..61e6b74c4 100644 --- a/src/Generated/Models/InternalBatchRequestCounts.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestCounts.Serialization.cs @@ -46,7 +46,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("failed"u8); writer.WriteNumberValue(Failed); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalBatchRequestCounts DeserializeInternalBatchRequestCounts failed = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchRequestCounts(total, completed, failed, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalBatchRequestInput.Serialization.cs b/src/Generated/Models/InternalBatchRequestInput.Serialization.cs index 103045cb5..356543095 100644 --- a/src/Generated/Models/InternalBatchRequestInput.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestInput.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("url"u8); writer.WriteStringValue(Url.AbsoluteUri); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -111,10 +111,7 @@ internal static InternalBatchRequestInput DeserializeInternalBatchRequestInput(J url = new Uri(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchRequestInput(customId, @method, url, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalBatchRequestOutput.Serialization.cs b/src/Generated/Models/InternalBatchRequestOutput.Serialization.cs index e2f37f4af..6da0cfd42 100644 --- a/src/Generated/Models/InternalBatchRequestOutput.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestOutput.Serialization.cs @@ -39,29 +39,15 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Response) && _additionalBinaryDataProperties?.ContainsKey("response") != true) { - if (Response != null) - { - writer.WritePropertyName("response"u8); - writer.WriteObjectValue(Response, options); - } - else - { - writer.WriteNull("response"u8); - } + writer.WritePropertyName("response"u8); + writer.WriteObjectValue(Response, options); } if (Optional.IsDefined(Error) && _additionalBinaryDataProperties?.ContainsKey("error") != true) { - if (Error != null) - { - writer.WritePropertyName("error"u8); - writer.WriteObjectValue(Error, options); - } - else - { - writer.WriteNull("error"u8); - } + writer.WritePropertyName("error"u8); + writer.WriteObjectValue(Error, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -138,10 +124,7 @@ internal static InternalBatchRequestOutput DeserializeInternalBatchRequestOutput error = InternalBatchRequestOutputError.DeserializeInternalBatchRequestOutputError(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchRequestOutput(id, customId, response, error, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs b/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs index a8c726285..32cfaa289 100644 --- a/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -92,10 +92,7 @@ internal static InternalBatchRequestOutputError DeserializeInternalBatchRequestO message = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchRequestOutputError(code, message, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs b/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs index 435633b71..7e6bc041e 100644 --- a/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs @@ -60,7 +60,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndObject(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -141,10 +141,7 @@ internal static InternalBatchRequestOutputResponse DeserializeInternalBatchReque body = dictionary; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchRequestOutputResponse(statusCode, requestId, body ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs b/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs index c43769045..7a00efa66 100644 --- a/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalChatCompletionFunctionCallOption DeserializeInternalChat name = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionFunctionCallOption(name, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs b/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs index 1f5d4d3ad..ad43dca7d 100644 --- a/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs @@ -35,9 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(Arguments) && _additionalBinaryDataProperties?.ContainsKey("arguments") != true) { writer.WritePropertyName("arguments"u8); - this.SerializeArgumentsValue(writer, options); + SerializeArgumentsValue(writer, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -92,10 +92,7 @@ internal static InternalChatCompletionMessageToolCallChunkFunction DeserializeIn DeserializeArgumentsValue(prop, ref arguments); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionMessageToolCallChunkFunction(name, arguments, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.Serialization.cs b/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.Serialization.cs index 48fde14d1..634017aef 100644 --- a/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.Serialization.cs @@ -39,9 +39,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("arguments") != true) { writer.WritePropertyName("arguments"u8); - this.SerializeArgumentsValue(writer, options); + SerializeArgumentsValue(writer, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalChatCompletionMessageToolCallFunction DeserializeInterna DeserializeArgumentsValue(prop, ref arguments); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionMessageToolCallFunction(name, arguments, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs b/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs index c2d62dcba..85943af54 100644 --- a/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("function"u8); writer.WriteObjectValue(Function, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalChatCompletionNamedToolChoice DeserializeInternalChatCom function = InternalChatCompletionNamedToolChoiceFunction.DeserializeInternalChatCompletionNamedToolChoiceFunction(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionNamedToolChoice(@type, function, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs b/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs index 4c3b8a036..65ccae31d 100644 --- a/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalChatCompletionNamedToolChoiceFunction DeserializeInterna name = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionNamedToolChoiceFunction(name, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudio.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudio.Serialization.cs index 4066d42a3..ff9774e9f 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudio.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudio.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("input_audio"u8); writer.WriteObjectValue(InputAudio, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalChatCompletionRequestMessageContentPartAudio Deserialize inputAudio = InternalChatCompletionRequestMessageContentPartAudioInputAudio.DeserializeInternalChatCompletionRequestMessageContentPartAudioInputAudio(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionRequestMessageContentPartAudio(@type, inputAudio, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudioInputAudio.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudioInputAudio.Serialization.cs index 99ed0481a..419b7b229 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudioInputAudio.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudioInputAudio.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("format"u8); writer.WriteStringValue(Format.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalChatCompletionRequestMessageContentPartAudioInputAudio D format = new ChatInputAudioFormat(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionRequestMessageContentPartAudioInputAudio(data, format, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.Serialization.cs new file mode 100644 index 000000000..f39cfe468 --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.Serialization.cs @@ -0,0 +1,153 @@ +// + +#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 InternalChatCompletionRequestMessageContentPartFile : IJsonModel + { + internal InternalChatCompletionRequestMessageContentPartFile() + { + } + + 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(InternalChatCompletionRequestMessageContentPartFile)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type.ToString()); + } + 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); + + protected virtual InternalChatCompletionRequestMessageContentPartFile JsonModelCreateCore(ref Utf8JsonReader reader, 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 reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalChatCompletionRequestMessageContentPartFile(document.RootElement, options); + } + + internal static InternalChatCompletionRequestMessageContentPartFile DeserializeInternalChatCompletionRequestMessageContentPartFile(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalChatCompletionRequestMessageContentPartFileType @type = default; + InternalChatCompletionRequestMessageContentPartFileFile @file = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + 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; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalChatCompletionRequestMessageContentPartFile(@type, @file, 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(InternalChatCompletionRequestMessageContentPartFile)} does not support writing '{options.Format}' format."); + } + } + + InternalChatCompletionRequestMessageContentPartFile IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual InternalChatCompletionRequestMessageContentPartFile PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalChatCompletionRequestMessageContentPartFile(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartFile)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..0bca8f3d9 --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.cs @@ -0,0 +1,39 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Chat +{ + internal partial class InternalChatCompletionRequestMessageContentPartFile + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalChatCompletionRequestMessageContentPartFile(InternalChatCompletionRequestMessageContentPartFileFile @file) + { + Argument.AssertNotNull(@file, nameof(@file)); + + File = @file; + } + + internal InternalChatCompletionRequestMessageContentPartFile(InternalChatCompletionRequestMessageContentPartFileType @type, InternalChatCompletionRequestMessageContentPartFileFile @file, IDictionary additionalBinaryDataProperties) + { + Type = @type; + File = @file; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public InternalChatCompletionRequestMessageContentPartFileType Type { get; } = "file"; + + public InternalChatCompletionRequestMessageContentPartFileFile File { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.Serialization.cs new file mode 100644 index 000000000..13a130c5e --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.Serialization.cs @@ -0,0 +1,160 @@ +// + +#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 InternalChatCompletionRequestMessageContentPartFileFile : 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(InternalChatCompletionRequestMessageContentPartFileFile)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(FileName) && _additionalBinaryDataProperties?.ContainsKey("file_name") != true) + { + writer.WritePropertyName("file_name"u8); + writer.WriteStringValue(FileName); + } + if (Optional.IsDefined(FileData) && _additionalBinaryDataProperties?.ContainsKey("file_data") != true) + { + writer.WritePropertyName("file_data"u8); + writer.WriteStringValue(FileData); + } + if (Optional.IsDefined(FileId) && _additionalBinaryDataProperties?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + 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 + } + } + } + + InternalChatCompletionRequestMessageContentPartFileFile IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual InternalChatCompletionRequestMessageContentPartFileFile JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartFileFile)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalChatCompletionRequestMessageContentPartFileFile(document.RootElement, options); + } + + internal static InternalChatCompletionRequestMessageContentPartFileFile DeserializeInternalChatCompletionRequestMessageContentPartFileFile(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string fileName = default; + string fileData = default; + string fileId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("file_name"u8)) + { + fileName = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("file_data"u8)) + { + fileData = 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 InternalChatCompletionRequestMessageContentPartFileFile(fileName, fileData, fileId, 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(InternalChatCompletionRequestMessageContentPartFileFile)} does not support writing '{options.Format}' format."); + } + } + + InternalChatCompletionRequestMessageContentPartFileFile IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual InternalChatCompletionRequestMessageContentPartFileFile PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalChatCompletionRequestMessageContentPartFileFile(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartFileFile)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..12b56addf --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Chat +{ + internal partial class InternalChatCompletionRequestMessageContentPartFileFile + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalChatCompletionRequestMessageContentPartFileFile() + { + } + + internal InternalChatCompletionRequestMessageContentPartFileFile(string fileName, string fileData, string fileId, IDictionary additionalBinaryDataProperties) + { + FileName = fileName; + FileData = fileData; + FileId = fileId; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string FileName { get; set; } + + public string FileData { get; set; } + + public string FileId { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileType.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileType.cs new file mode 100644 index 000000000..bac939c73 --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileType.cs @@ -0,0 +1,41 @@ +// + +#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 5c1248e27..3f05dc32d 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("image_url"u8); writer.WriteObjectValue(ImageUrl, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalChatCompletionRequestMessageContentPartImage Deserialize imageUrl = InternalChatCompletionRequestMessageContentPartImageImageUrl.DeserializeInternalChatCompletionRequestMessageContentPartImageImageUrl(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionRequestMessageContentPartImage(@type, imageUrl, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs index 514e40e67..b43eb47a7 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("url"u8); writer.WriteStringValue(Url); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static InternalChatCompletionRequestMessageContentPartImageImageUrl Des url = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionRequestMessageContentPartImageImageUrl(detail, url, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusal.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusal.Serialization.cs index 0bd526080..566a6ccef 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusal.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusal.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("refusal"u8); writer.WriteStringValue(Refusal); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalChatCompletionRequestMessageContentPartRefusal Deseriali refusal = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionRequestMessageContentPartRefusal(@type, refusal, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.Serialization.cs index d318473d8..166dcc2a3 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalChatCompletionRequestMessageContentPartText DeserializeI text = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionRequestMessageContentPartText(@type, text, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionResponseMessage.Serialization.cs b/src/Generated/Models/InternalChatCompletionResponseMessage.Serialization.cs index d9e55f613..421c7a66f 100644 --- a/src/Generated/Models/InternalChatCompletionResponseMessage.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionResponseMessage.Serialization.cs @@ -33,7 +33,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("refusal") != true) { - if (Refusal != null) + if (Optional.IsDefined(Refusal)) { writer.WritePropertyName("refusal"u8); writer.WriteStringValue(Refusal); @@ -43,7 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("refusal"u8); } } - if (true && Optional.IsCollectionDefined(ToolCalls) && _additionalBinaryDataProperties?.ContainsKey("tool_calls") != true) + if (Optional.IsCollectionDefined(ToolCalls) && _additionalBinaryDataProperties?.ContainsKey("tool_calls") != true) { writer.WritePropertyName("tool_calls"u8); writer.WriteStartArray(); @@ -53,17 +53,20 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (Optional.IsDefined(Audio) && _additionalBinaryDataProperties?.ContainsKey("audio") != true) + if (Optional.IsCollectionDefined(Annotations) && _additionalBinaryDataProperties?.ContainsKey("annotations") != true) { - if (Audio != null) - { - writer.WritePropertyName("audio"u8); - writer.WriteObjectValue(Audio, options); - } - else + writer.WritePropertyName("annotations"u8); + writer.WriteStartArray(); + foreach (ChatMessageAnnotation item in Annotations) { - writer.WriteNull("audio"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); + } + if (Optional.IsDefined(Audio) && _additionalBinaryDataProperties?.ContainsKey("audio") != true) + { + writer.WritePropertyName("audio"u8); + writer.WriteObjectValue(Audio, options); } if (_additionalBinaryDataProperties?.ContainsKey("role") != true) { @@ -72,10 +75,10 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("content") != true) { - if (Content != null) + if (Optional.IsDefined(Content)) { writer.WritePropertyName("content"u8); - this.SerializeContentValue(writer, options); + SerializeContentValue(writer, options); } else { @@ -85,9 +88,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(FunctionCall) && _additionalBinaryDataProperties?.ContainsKey("function_call") != true) { writer.WritePropertyName("function_call"u8); - writer.WriteObjectValue(FunctionCall, options); + writer.WriteObjectValue(FunctionCall, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -129,8 +132,9 @@ internal static InternalChatCompletionResponseMessage DeserializeInternalChatCom } string refusal = default; IReadOnlyList toolCalls = default; + IList annotations = default; ChatOutputAudio audio = default; - Chat.ChatMessageRole role = default; + ChatMessageRole role = default; ChatMessageContent content = default; ChatFunctionCall functionCall = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -160,6 +164,20 @@ internal static InternalChatCompletionResponseMessage DeserializeInternalChatCom 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("audio"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -189,18 +207,15 @@ internal static InternalChatCompletionResponseMessage DeserializeInternalChatCom functionCall = ChatFunctionCall.DeserializeChatFunctionCall(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - // CUSTOM: Initialize Content collection property. return new InternalChatCompletionResponseMessage( refusal, toolCalls ?? new ChangeTrackingList(), + annotations ?? new ChangeTrackingList(), audio, role, - content ?? new ChatMessageContent(), + content, functionCall, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionResponseMessage.cs b/src/Generated/Models/InternalChatCompletionResponseMessage.cs index 7b8f87e68..fc63a5473 100644 --- a/src/Generated/Models/InternalChatCompletionResponseMessage.cs +++ b/src/Generated/Models/InternalChatCompletionResponseMessage.cs @@ -16,16 +16,20 @@ internal InternalChatCompletionResponseMessage(string refusal, ChatMessageConten { Refusal = refusal; ToolCalls = new ChangeTrackingList(); - Content = content; + Annotations = new ChangeTrackingList(); + // Plugin customization: ensure initialization of collection + Content = content ?? new ChatMessageContent(); } - internal InternalChatCompletionResponseMessage(string refusal, IReadOnlyList toolCalls, ChatOutputAudio audio, Chat.ChatMessageRole role, ChatMessageContent content, ChatFunctionCall functionCall, IDictionary additionalBinaryDataProperties) + internal InternalChatCompletionResponseMessage(string refusal, IReadOnlyList toolCalls, IList annotations, ChatOutputAudio audio, ChatMessageRole role, ChatMessageContent content, ChatFunctionCall functionCall, IDictionary additionalBinaryDataProperties) { Refusal = refusal; ToolCalls = toolCalls; + Annotations = annotations; Audio = audio; Role = role; - Content = content; + // Plugin customization: ensure initialization of collection + Content = content ?? new ChatMessageContent(); FunctionCall = functionCall; _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -34,6 +38,8 @@ internal InternalChatCompletionResponseMessage(string refusal, IReadOnlyList ToolCalls { get; } + public IList Annotations { get; } + public ChatOutputAudio Audio { get; } internal IDictionary SerializedAdditionalRawData diff --git a/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationType.cs b/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationType.cs new file mode 100644 index 000000000..312ff7502 --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationType.cs @@ -0,0 +1,41 @@ +// + +#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 new file mode 100644 index 000000000..27b7b369f --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationUrlCitation.Serialization.cs @@ -0,0 +1,175 @@ +// + +#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 InternalChatCompletionResponseMessageAnnotationUrlCitation : IJsonModel + { + internal InternalChatCompletionResponseMessageAnnotationUrlCitation() + { + } + + 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(InternalChatCompletionResponseMessageAnnotationUrlCitation)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("end_index") != true) + { + writer.WritePropertyName("end_index"u8); + writer.WriteNumberValue(EndIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("start_index") != true) + { + writer.WritePropertyName("start_index"u8); + writer.WriteNumberValue(StartIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("url") != true) + { + writer.WritePropertyName("url"u8); + writer.WriteStringValue(Url.AbsoluteUri); + } + if (_additionalBinaryDataProperties?.ContainsKey("title") != true) + { + writer.WritePropertyName("title"u8); + writer.WriteStringValue(Title); + } + 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 + } + } + } + + InternalChatCompletionResponseMessageAnnotationUrlCitation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual InternalChatCompletionResponseMessageAnnotationUrlCitation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChatCompletionResponseMessageAnnotationUrlCitation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalChatCompletionResponseMessageAnnotationUrlCitation(document.RootElement, options); + } + + internal static InternalChatCompletionResponseMessageAnnotationUrlCitation DeserializeInternalChatCompletionResponseMessageAnnotationUrlCitation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + int endIndex = default; + int startIndex = default; + Uri url = default; + string title = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("end_index"u8)) + { + endIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("start_index"u8)) + { + startIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("url"u8)) + { + url = new Uri(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("title"u8)) + { + title = prop.Value.GetString(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalChatCompletionResponseMessageAnnotationUrlCitation(endIndex, startIndex, url, title, 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(InternalChatCompletionResponseMessageAnnotationUrlCitation)} does not support writing '{options.Format}' format."); + } + } + + InternalChatCompletionResponseMessageAnnotationUrlCitation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual InternalChatCompletionResponseMessageAnnotationUrlCitation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalChatCompletionResponseMessageAnnotationUrlCitation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalChatCompletionResponseMessageAnnotationUrlCitation)} does not support reading '{options.Format}' format."); + } + } + + 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/InternalChatCompletionResponseMessageAnnotationUrlCitation.cs b/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationUrlCitation.cs new file mode 100644 index 000000000..fdacc9ec0 --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationUrlCitation.cs @@ -0,0 +1,45 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Chat +{ + internal partial class InternalChatCompletionResponseMessageAnnotationUrlCitation + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalChatCompletionResponseMessageAnnotationUrlCitation(int endIndex, int startIndex, Uri url, string title) + { + EndIndex = endIndex; + StartIndex = startIndex; + Url = url; + Title = title; + } + + internal InternalChatCompletionResponseMessageAnnotationUrlCitation(int endIndex, int startIndex, Uri url, string title, IDictionary additionalBinaryDataProperties) + { + EndIndex = endIndex; + StartIndex = startIndex; + Url = url; + Title = title; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public int EndIndex { get; } + + public int StartIndex { get; } + + public Uri Url { get; } + + public string Title { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.Serialization.cs b/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.Serialization.cs index 4bea570ba..877fb2c5d 100644 --- a/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("arguments"u8); writer.WriteStringValue(Arguments); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalChatCompletionResponseMessageFunctionCall DeserializeInt arguments = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionResponseMessageFunctionCall(name, arguments, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionStreamOptions.Serialization.cs b/src/Generated/Models/InternalChatCompletionStreamOptions.Serialization.cs index cf88a53b3..114129354 100644 --- a/src/Generated/Models/InternalChatCompletionStreamOptions.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionStreamOptions.Serialization.cs @@ -32,7 +32,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("include_usage"u8); writer.WriteBooleanValue(IncludeUsage.Value); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalChatCompletionStreamOptions DeserializeInternalChatCompl includeUsage = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionStreamOptions(includeUsage, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionStreamResponseDelta.Serialization.cs b/src/Generated/Models/InternalChatCompletionStreamResponseDelta.Serialization.cs index de9f8afcb..7d70eb599 100644 --- a/src/Generated/Models/InternalChatCompletionStreamResponseDelta.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionStreamResponseDelta.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("function_call"u8); writer.WriteObjectValue(FunctionCall, options); } - if (true && Optional.IsCollectionDefined(ToolCalls) && _additionalBinaryDataProperties?.ContainsKey("tool_calls") != true) + if (Optional.IsCollectionDefined(ToolCalls) && _additionalBinaryDataProperties?.ContainsKey("tool_calls") != true) { writer.WritePropertyName("tool_calls"u8); writer.WriteStartArray(); @@ -49,35 +49,20 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Refusal) && _additionalBinaryDataProperties?.ContainsKey("refusal") != true) { - if (Refusal != null) - { - writer.WritePropertyName("refusal"u8); - writer.WriteStringValue(Refusal); - } - else - { - writer.WriteNull("refusal"u8); - } + writer.WritePropertyName("refusal"u8); + writer.WriteStringValue(Refusal); } if (Optional.IsDefined(Role) && _additionalBinaryDataProperties?.ContainsKey("role") != true) { writer.WritePropertyName("role"u8); writer.WriteStringValue(Role.Value.ToSerialString()); } - // CUSTOM: Check inner collection is defined. - if (Optional.IsDefined(Content) && _additionalBinaryDataProperties?.ContainsKey("content") != true && Content.IsInnerCollectionDefined()) + if (Optional.IsDefined(Content) && Content.IsInnerCollectionDefined() && _additionalBinaryDataProperties?.ContainsKey("content") != true) { - if (Content != null) - { - writer.WritePropertyName("content"u8); - this.SerializeContentValue(writer, options); - } - else - { - writer.WriteNull("content"u8); - } + writer.WritePropertyName("content"u8); + SerializeContentValue(writer, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -121,7 +106,7 @@ internal static InternalChatCompletionStreamResponseDelta DeserializeInternalCha StreamingChatFunctionCallUpdate functionCall = default; IReadOnlyList toolCalls = default; string refusal = default; - Chat.ChatMessageRole? role = default; + ChatMessageRole? role = default; ChatMessageContent content = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -182,19 +167,15 @@ internal static InternalChatCompletionStreamResponseDelta DeserializeInternalCha DeserializeContentValue(prop, ref content); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - // CUSTOM: Initialize Content collection property. return new InternalChatCompletionStreamResponseDelta( audio, functionCall, toolCalls ?? new ChangeTrackingList(), refusal, role, - content ?? new ChatMessageContent(), + content, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs b/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs index 1cdd4603e..9202a8017 100644 --- a/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs +++ b/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs @@ -11,14 +11,15 @@ internal partial class InternalChatCompletionStreamResponseDelta { private protected IDictionary _additionalBinaryDataProperties; - internal InternalChatCompletionStreamResponseDelta(StreamingChatOutputAudioUpdate audio, StreamingChatFunctionCallUpdate functionCall, IReadOnlyList toolCalls, string refusal, Chat.ChatMessageRole? role, ChatMessageContent content, IDictionary additionalBinaryDataProperties) + internal InternalChatCompletionStreamResponseDelta(StreamingChatOutputAudioUpdate audio, StreamingChatFunctionCallUpdate functionCall, IReadOnlyList toolCalls, string refusal, ChatMessageRole? role, ChatMessageContent content, IDictionary additionalBinaryDataProperties) { Audio = audio; FunctionCall = functionCall; ToolCalls = toolCalls; Refusal = refusal; Role = role; - Content = content; + // 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 index c39d97b59..666eced49 100644 --- a/src/Generated/Models/InternalChatCompletionStreamResponseDeltaRole.cs +++ b/src/Generated/Models/InternalChatCompletionStreamResponseDeltaRole.cs @@ -11,6 +11,7 @@ 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"; @@ -23,6 +24,8 @@ public InternalChatCompletionStreamResponseDeltaRole(string 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); diff --git a/src/Generated/Models/InternalChatOutputPredictionContent.Serialization.cs b/src/Generated/Models/InternalChatOutputPredictionContent.Serialization.cs index b87396419..166949e74 100644 --- a/src/Generated/Models/InternalChatOutputPredictionContent.Serialization.cs +++ b/src/Generated/Models/InternalChatOutputPredictionContent.Serialization.cs @@ -32,11 +32,10 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(InternalChatOutputPredictionContent)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - // CUSTOM: Check inner collection is defined. - if (Content.IsInnerCollectionDefined() && _additionalBinaryDataProperties?.ContainsKey("content") != true) + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) { writer.WritePropertyName("content"u8); - this.SerializeContentValue(writer, options); + SerializeContentValue(writer, options); } } @@ -74,10 +73,7 @@ internal static InternalChatOutputPredictionContent DeserializeInternalChatOutpu DeserializeContentValue(prop, ref content); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatOutputPredictionContent(@type, additionalBinaryDataProperties, content); } diff --git a/src/Generated/Models/InternalChatOutputPredictionContent.cs b/src/Generated/Models/InternalChatOutputPredictionContent.cs index e23a7c124..7b56552b5 100644 --- a/src/Generated/Models/InternalChatOutputPredictionContent.cs +++ b/src/Generated/Models/InternalChatOutputPredictionContent.cs @@ -14,12 +14,14 @@ public InternalChatOutputPredictionContent(ChatMessageContent content) : base(In { Argument.AssertNotNull(content, nameof(content)); - Content = content; + // Plugin customization: ensure initialization of collection + Content = content ?? new ChatMessageContent(); } internal InternalChatOutputPredictionContent(InternalChatOutputPredictionKind @type, IDictionary additionalBinaryDataProperties, ChatMessageContent content) : base(@type, additionalBinaryDataProperties) { - Content = content; + // Plugin customization: ensure initialization of collection + Content = content ?? new ChatMessageContent(); } } } diff --git a/src/Generated/Models/InternalChatResponseFormatJsonObject.Serialization.cs b/src/Generated/Models/InternalChatResponseFormatJsonObject.Serialization.cs index 22c9f1605..577c68ce8 100644 --- a/src/Generated/Models/InternalChatResponseFormatJsonObject.Serialization.cs +++ b/src/Generated/Models/InternalChatResponseFormatJsonObject.Serialization.cs @@ -51,10 +51,7 @@ internal static InternalChatResponseFormatJsonObject DeserializeInternalChatResp @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatResponseFormatJsonObject(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalChatResponseFormatJsonSchema.Serialization.cs b/src/Generated/Models/InternalChatResponseFormatJsonSchema.Serialization.cs index a22d9777b..47a5db24d 100644 --- a/src/Generated/Models/InternalChatResponseFormatJsonSchema.Serialization.cs +++ b/src/Generated/Models/InternalChatResponseFormatJsonSchema.Serialization.cs @@ -67,10 +67,7 @@ internal static InternalChatResponseFormatJsonSchema DeserializeInternalChatResp jsonSchema = InternalResponseFormatJsonSchemaJsonSchema.DeserializeInternalResponseFormatJsonSchemaJsonSchema(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatResponseFormatJsonSchema(@type, additionalBinaryDataProperties, jsonSchema); } diff --git a/src/Generated/Models/InternalChatResponseFormatText.Serialization.cs b/src/Generated/Models/InternalChatResponseFormatText.Serialization.cs index 2100a5dfd..dbf3ffada 100644 --- a/src/Generated/Models/InternalChatResponseFormatText.Serialization.cs +++ b/src/Generated/Models/InternalChatResponseFormatText.Serialization.cs @@ -51,10 +51,7 @@ internal static InternalChatResponseFormatText DeserializeInternalChatResponseFo @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatResponseFormatText(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCompleteUploadRequest.Serialization.cs b/src/Generated/Models/InternalCompleteUploadRequest.Serialization.cs index 20bd2f55e..e5f4dbea2 100644 --- a/src/Generated/Models/InternalCompleteUploadRequest.Serialization.cs +++ b/src/Generated/Models/InternalCompleteUploadRequest.Serialization.cs @@ -51,7 +51,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("md5"u8); writer.WriteStringValue(Md5); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -118,10 +118,7 @@ internal static InternalCompleteUploadRequest DeserializeInternalCompleteUploadR md5 = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCompleteUploadRequest(partIds, md5, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateAssistantRequestModel.cs b/src/Generated/Models/InternalCreateAssistantRequestModel.cs deleted file mode 100644 index 409d14569..000000000 --- a/src/Generated/Models/InternalCreateAssistantRequestModel.cs +++ /dev/null @@ -1,110 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalCreateAssistantRequestModel : IEquatable - { - private readonly string _value; - 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 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 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 InternalCreateAssistantRequestModel(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateAssistantRequestModel Gpt4o { get; } = new InternalCreateAssistantRequestModel(Gpt4oValue); - - public static InternalCreateAssistantRequestModel Gpt4o20241120 { get; } = new InternalCreateAssistantRequestModel(Gpt4o20241120Value); - - public static InternalCreateAssistantRequestModel Gpt4o20240806 { get; } = new InternalCreateAssistantRequestModel(Gpt4o20240806Value); - - public static InternalCreateAssistantRequestModel Gpt4o20240513 { get; } = new InternalCreateAssistantRequestModel(Gpt4o20240513Value); - - public static InternalCreateAssistantRequestModel Gpt4oMini { get; } = new InternalCreateAssistantRequestModel(Gpt4oMiniValue); - - public static InternalCreateAssistantRequestModel Gpt4oMini20240718 { get; } = new InternalCreateAssistantRequestModel(Gpt4oMini20240718Value); - - public static InternalCreateAssistantRequestModel Gpt4Turbo { get; } = new InternalCreateAssistantRequestModel(Gpt4TurboValue); - - public static InternalCreateAssistantRequestModel Gpt4Turbo20240409 { get; } = new InternalCreateAssistantRequestModel(Gpt4Turbo20240409Value); - - public static InternalCreateAssistantRequestModel Gpt40125Preview { get; } = new InternalCreateAssistantRequestModel(Gpt40125PreviewValue); - - public static InternalCreateAssistantRequestModel Gpt4TurboPreview { get; } = new InternalCreateAssistantRequestModel(Gpt4TurboPreviewValue); - - public static InternalCreateAssistantRequestModel Gpt41106Preview { get; } = new InternalCreateAssistantRequestModel(Gpt41106PreviewValue); - - public static InternalCreateAssistantRequestModel Gpt4VisionPreview { get; } = new InternalCreateAssistantRequestModel(Gpt4VisionPreviewValue); - - public static InternalCreateAssistantRequestModel Gpt4 { get; } = new InternalCreateAssistantRequestModel(Gpt4Value); - - public static InternalCreateAssistantRequestModel Gpt40314 { get; } = new InternalCreateAssistantRequestModel(Gpt40314Value); - - public static InternalCreateAssistantRequestModel Gpt40613 { get; } = new InternalCreateAssistantRequestModel(Gpt40613Value); - - public static InternalCreateAssistantRequestModel Gpt432k { get; } = new InternalCreateAssistantRequestModel(Gpt432kValue); - - public static InternalCreateAssistantRequestModel Gpt432k0314 { get; } = new InternalCreateAssistantRequestModel(Gpt432k0314Value); - - public static InternalCreateAssistantRequestModel Gpt432k0613 { get; } = new InternalCreateAssistantRequestModel(Gpt432k0613Value); - - public static InternalCreateAssistantRequestModel Gpt35Turbo { get; } = new InternalCreateAssistantRequestModel(Gpt35TurboValue); - - public static InternalCreateAssistantRequestModel Gpt35Turbo16k { get; } = new InternalCreateAssistantRequestModel(Gpt35Turbo16kValue); - - public static InternalCreateAssistantRequestModel Gpt35Turbo0613 { get; } = new InternalCreateAssistantRequestModel(Gpt35Turbo0613Value); - - public static InternalCreateAssistantRequestModel Gpt35Turbo1106 { get; } = new InternalCreateAssistantRequestModel(Gpt35Turbo1106Value); - - public static InternalCreateAssistantRequestModel Gpt35Turbo0125 { get; } = new InternalCreateAssistantRequestModel(Gpt35Turbo0125Value); - - public static InternalCreateAssistantRequestModel Gpt35Turbo16k0613 { get; } = new InternalCreateAssistantRequestModel(Gpt35Turbo16k0613Value); - - public static bool operator ==(InternalCreateAssistantRequestModel left, InternalCreateAssistantRequestModel right) => left.Equals(right); - - public static bool operator !=(InternalCreateAssistantRequestModel left, InternalCreateAssistantRequestModel right) => !left.Equals(right); - - public static implicit operator InternalCreateAssistantRequestModel(string value) => new InternalCreateAssistantRequestModel(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateAssistantRequestModel other && Equals(other); - - public bool Equals(InternalCreateAssistantRequestModel 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/InternalCreateAssistantRequestToolResources.Serialization.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResources.Serialization.cs index 685addea4..aa7a982d8 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResources.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static InternalCreateAssistantRequestToolResources DeserializeInternalC fileSearch = FileSearchToolResources.DeserializeFileSearchToolResources(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateAssistantRequestToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs index 36c62aac1..7c1321157 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalCreateAssistantRequestToolResourcesCodeInterpreter Deser fileIds = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateAssistantRequestToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs b/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs index 5dc6f5e4f..6a9a7aaf9 100644 --- a/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs @@ -62,7 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndObject(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -145,10 +145,7 @@ internal static InternalCreateBatchRequest DeserializeInternalCreateBatchRequest metadata = dictionary; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateBatchRequest(inputFileId, endpoint, completionWindow, metadata ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.Serialization.cs index 327b4890c..7e5773244 100644 --- a/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.Serialization.cs @@ -71,7 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("usage"u8); writer.WriteObjectValue(Usage, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -165,10 +165,7 @@ internal static InternalCreateChatCompletionFunctionResponse DeserializeInternal usage = ChatTokenUsage.DeserializeChatTokenUsage(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateChatCompletionFunctionResponse( id, diff --git a/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.Serialization.cs index b4f1f585e..32e64ba51 100644 --- a/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.Serialization.cs @@ -46,7 +46,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message"u8); writer.WriteObjectValue(Message, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalCreateChatCompletionFunctionResponseChoice DeserializeIn message = InternalChatCompletionResponseMessage.DeserializeInternalChatCompletionResponseMessage(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateChatCompletionFunctionResponseChoice(finishReason, index, message, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateChatCompletionRequestModel.cs b/src/Generated/Models/InternalCreateChatCompletionRequestModel.cs index cf542074f..fed976d93 100644 --- a/src/Generated/Models/InternalCreateChatCompletionRequestModel.cs +++ b/src/Generated/Models/InternalCreateChatCompletionRequestModel.cs @@ -19,6 +19,11 @@ namespace OpenAI.Chat 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"; @@ -74,6 +79,16 @@ public InternalCreateChatCompletionRequestModel(string value) 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); diff --git a/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.Serialization.cs new file mode 100644 index 000000000..055a3ffea --- /dev/null +++ b/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.Serialization.cs @@ -0,0 +1,154 @@ +// + +#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 InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 : IJsonModel + { + internal InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1() + { + } + + 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(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Type.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("approximate") != true) + { + writer.WritePropertyName("approximate"u8); + writer.WriteObjectValue(Approximate, 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 + } + } + } + + InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(document.RootElement, options); + } + + internal static InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 DeserializeInternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type @type = 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()); + continue; + } + if (prop.NameEquals("approximate"u8)) + { + approximate = InternalWebSearchLocation.DeserializeInternalWebSearchLocation(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(@type, approximate, 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(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1)} does not support writing '{options.Format}' format."); + } + } + + InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..60833a036 --- /dev/null +++ b/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Chat +{ + internal partial class InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(InternalWebSearchLocation approximate) + { + Argument.AssertNotNull(approximate, nameof(approximate)); + + Approximate = approximate; + } + + internal InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type @type, InternalWebSearchLocation approximate, IDictionary additionalBinaryDataProperties) + { + Type = @type; + Approximate = approximate; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type Type { get; } = "approximate"; + + public InternalWebSearchLocation Approximate { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type.cs b/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type.cs new file mode 100644 index 000000000..867e5f9a8 --- /dev/null +++ b/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type.cs @@ -0,0 +1,41 @@ +// + +#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 69403c77f..497faa34a 100644 --- a/src/Generated/Models/InternalCreateChatCompletionResponseChoice.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionResponseChoice.Serialization.cs @@ -48,7 +48,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("logprobs") != true) { - if (Logprobs != null) + if (Optional.IsDefined(Logprobs)) { writer.WritePropertyName("logprobs"u8); writer.WriteObjectValue(Logprobs, options); @@ -58,7 +58,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("logprobs"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -98,7 +98,7 @@ internal static InternalCreateChatCompletionResponseChoice DeserializeInternalCr { return null; } - Chat.ChatFinishReason finishReason = default; + ChatFinishReason finishReason = default; int index = default; InternalChatCompletionResponseMessage message = default; InternalCreateChatCompletionResponseChoiceLogprobs logprobs = default; @@ -130,10 +130,7 @@ internal static InternalCreateChatCompletionResponseChoice DeserializeInternalCr logprobs = InternalCreateChatCompletionResponseChoiceLogprobs.DeserializeInternalCreateChatCompletionResponseChoiceLogprobs(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateChatCompletionResponseChoice(finishReason, index, message, logprobs, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs b/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs index 42878f48b..974c9356f 100644 --- a/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs +++ b/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs @@ -11,7 +11,7 @@ internal partial class InternalCreateChatCompletionResponseChoice { private protected IDictionary _additionalBinaryDataProperties; - internal InternalCreateChatCompletionResponseChoice(Chat.ChatFinishReason finishReason, int index, InternalChatCompletionResponseMessage message, InternalCreateChatCompletionResponseChoiceLogprobs logprobs) + internal InternalCreateChatCompletionResponseChoice(ChatFinishReason finishReason, int index, InternalChatCompletionResponseMessage message, InternalCreateChatCompletionResponseChoiceLogprobs logprobs) { FinishReason = finishReason; Index = index; @@ -19,7 +19,7 @@ internal InternalCreateChatCompletionResponseChoice(Chat.ChatFinishReason finish Logprobs = logprobs; } - internal InternalCreateChatCompletionResponseChoice(Chat.ChatFinishReason finishReason, int index, InternalChatCompletionResponseMessage message, InternalCreateChatCompletionResponseChoiceLogprobs logprobs, IDictionary additionalBinaryDataProperties) + internal InternalCreateChatCompletionResponseChoice(ChatFinishReason finishReason, int index, InternalChatCompletionResponseMessage message, InternalCreateChatCompletionResponseChoiceLogprobs logprobs, IDictionary additionalBinaryDataProperties) { FinishReason = finishReason; Index = index; @@ -28,7 +28,7 @@ internal InternalCreateChatCompletionResponseChoice(Chat.ChatFinishReason finish _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public Chat.ChatFinishReason FinishReason { get; } + public ChatFinishReason FinishReason { get; } public int Index { get; } diff --git a/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs index f7bb85157..6c5dc43d9 100644 --- a/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs @@ -27,9 +27,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalCreateChatCompletionResponseChoiceLogprobs)} does not support writing '{format}' format."); } - if (true && _additionalBinaryDataProperties?.ContainsKey("content") != true) + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) { - if (Content != null && Optional.IsCollectionDefined(Content)) + if (options.Format != "W" && Optional.IsCollectionDefined(Content)) { writer.WritePropertyName("content"u8); writer.WriteStartArray(); @@ -44,9 +44,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("content"u8); } } - if (true && _additionalBinaryDataProperties?.ContainsKey("refusal") != true) + if (_additionalBinaryDataProperties?.ContainsKey("refusal") != true) { - if (Refusal != null && Optional.IsCollectionDefined(Refusal)) + if (options.Format != "W" && Optional.IsCollectionDefined(Refusal)) { writer.WritePropertyName("refusal"u8); writer.WriteStartArray(); @@ -61,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("refusal"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -136,10 +136,7 @@ internal static InternalCreateChatCompletionResponseChoiceLogprobs DeserializeIn refusal = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateChatCompletionResponseChoiceLogprobs(content, refusal, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs index 62624c359..fe46ae55e 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs @@ -30,15 +30,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Logprobs) && _additionalBinaryDataProperties?.ContainsKey("logprobs") != true) { - if (Logprobs != null) - { - writer.WritePropertyName("logprobs"u8); - writer.WriteObjectValue(Logprobs, options); - } - else - { - writer.WriteNull("logprobs"u8); - } + writer.WritePropertyName("logprobs"u8); + writer.WriteObjectValue(Logprobs, options); } if (_additionalBinaryDataProperties?.ContainsKey("index") != true) { @@ -47,17 +40,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("finish_reason") != true) { - if (FinishReason != null) + if (Optional.IsDefined(FinishReason)) { writer.WritePropertyName("finish_reason"u8); writer.WriteStringValue(FinishReason.Value.ToSerialString()); } else { - writer.WriteNull("finishReason"u8); + writer.WriteNull("finish_reason"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -88,7 +81,7 @@ protected virtual InternalCreateChatCompletionStreamResponseChoice JsonModelCrea throw new FormatException($"The model {nameof(InternalCreateChatCompletionStreamResponseChoice)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return InternalCreateChatCompletionStreamResponseChoice.DeserializeInternalCreateChatCompletionStreamResponseChoice(document.RootElement, options); + return DeserializeInternalCreateChatCompletionStreamResponseChoice(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -115,7 +108,7 @@ protected virtual InternalCreateChatCompletionStreamResponseChoice PersistableMo case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return InternalCreateChatCompletionStreamResponseChoice.DeserializeInternalCreateChatCompletionStreamResponseChoice(document.RootElement, options); + return DeserializeInternalCreateChatCompletionStreamResponseChoice(document.RootElement, options); } default: throw new FormatException($"The model {nameof(InternalCreateChatCompletionStreamResponseChoice)} does not support reading '{options.Format}' format."); @@ -137,7 +130,7 @@ public static explicit operator InternalCreateChatCompletionStreamResponseChoice { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return InternalCreateChatCompletionStreamResponseChoice.DeserializeInternalCreateChatCompletionStreamResponseChoice(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeInternalCreateChatCompletionStreamResponseChoice(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs index c81fe2ab0..988a4a3c8 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs @@ -11,14 +11,14 @@ internal partial class InternalCreateChatCompletionStreamResponseChoice { private protected IDictionary _additionalBinaryDataProperties; - internal InternalCreateChatCompletionStreamResponseChoice(InternalChatCompletionStreamResponseDelta delta, int index, Chat.ChatFinishReason? finishReason) + internal InternalCreateChatCompletionStreamResponseChoice(InternalChatCompletionStreamResponseDelta delta, int index, ChatFinishReason? finishReason) { Delta = delta; Index = index; FinishReason = finishReason; } - internal InternalCreateChatCompletionStreamResponseChoice(InternalChatCompletionStreamResponseDelta delta, InternalCreateChatCompletionStreamResponseChoiceLogprobs logprobs, int index, Chat.ChatFinishReason? finishReason, IDictionary additionalBinaryDataProperties) + internal InternalCreateChatCompletionStreamResponseChoice(InternalChatCompletionStreamResponseDelta delta, InternalCreateChatCompletionStreamResponseChoiceLogprobs logprobs, int index, ChatFinishReason? finishReason, IDictionary additionalBinaryDataProperties) { Delta = delta; Logprobs = logprobs; diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs index 4c7d91664..bced98975 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs @@ -27,9 +27,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalCreateChatCompletionStreamResponseChoiceLogprobs)} does not support writing '{format}' format."); } - if (true && _additionalBinaryDataProperties?.ContainsKey("content") != true) + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) { - if (Content != null && Optional.IsCollectionDefined(Content)) + if (options.Format != "W" && Optional.IsCollectionDefined(Content)) { writer.WritePropertyName("content"u8); writer.WriteStartArray(); @@ -44,9 +44,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("content"u8); } } - if (true && _additionalBinaryDataProperties?.ContainsKey("refusal") != true) + if (_additionalBinaryDataProperties?.ContainsKey("refusal") != true) { - if (Refusal != null && Optional.IsCollectionDefined(Refusal)) + if (options.Format != "W" && Optional.IsCollectionDefined(Refusal)) { writer.WritePropertyName("refusal"u8); writer.WriteStartArray(); @@ -61,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("refusal"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -136,10 +136,7 @@ internal static InternalCreateChatCompletionStreamResponseChoiceLogprobs Deseria refusal = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateChatCompletionStreamResponseChoiceLogprobs(content, refusal, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.Serialization.cs index 2729b9e7c..51f28dbe1 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.Serialization.cs @@ -46,7 +46,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total_tokens"u8); writer.WriteNumberValue(TotalTokens); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalCreateChatCompletionStreamResponseUsage DeserializeInter totalTokens = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateChatCompletionStreamResponseUsage(completionTokens, promptTokens, totalTokens, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs b/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs index ea5ce997e..855cf3d6e 100644 --- a/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs @@ -39,7 +39,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("prompt") != true) { - if (Prompt != null) + if (Optional.IsDefined(Prompt)) { writer.WritePropertyName("prompt"u8); #if NET6_0_OR_GREATER @@ -58,203 +58,98 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(BestOf) && _additionalBinaryDataProperties?.ContainsKey("best_of") != true) { - if (BestOf != null) - { - writer.WritePropertyName("best_of"u8); - writer.WriteNumberValue(BestOf.Value); - } - else - { - writer.WriteNull("bestOf"u8); - } + writer.WritePropertyName("best_of"u8); + writer.WriteNumberValue(BestOf.Value); } if (Optional.IsDefined(Echo) && _additionalBinaryDataProperties?.ContainsKey("echo") != true) { - if (Echo != null) - { - writer.WritePropertyName("echo"u8); - writer.WriteBooleanValue(Echo.Value); - } - else - { - writer.WriteNull("echo"u8); - } + writer.WritePropertyName("echo"u8); + writer.WriteBooleanValue(Echo.Value); } if (Optional.IsDefined(FrequencyPenalty) && _additionalBinaryDataProperties?.ContainsKey("frequency_penalty") != true) { - if (FrequencyPenalty != null) - { - writer.WritePropertyName("frequency_penalty"u8); - writer.WriteNumberValue(FrequencyPenalty.Value); - } - else - { - writer.WriteNull("frequencyPenalty"u8); - } + writer.WritePropertyName("frequency_penalty"u8); + writer.WriteNumberValue(FrequencyPenalty.Value); } if (Optional.IsCollectionDefined(LogitBias) && _additionalBinaryDataProperties?.ContainsKey("logit_bias") != true) { - if (LogitBias != null) - { - writer.WritePropertyName("logit_bias"u8); - writer.WriteStartObject(); - foreach (var item in LogitBias) - { - writer.WritePropertyName(item.Key); - writer.WriteNumberValue(item.Value); - } - writer.WriteEndObject(); - } - else + writer.WritePropertyName("logit_bias"u8); + writer.WriteStartObject(); + foreach (var item in LogitBias) { - writer.WriteNull("logitBias"u8); + writer.WritePropertyName(item.Key); + writer.WriteNumberValue(item.Value); } + writer.WriteEndObject(); } if (Optional.IsDefined(Logprobs) && _additionalBinaryDataProperties?.ContainsKey("logprobs") != true) { - if (Logprobs != null) - { - writer.WritePropertyName("logprobs"u8); - writer.WriteNumberValue(Logprobs.Value); - } - else - { - writer.WriteNull("logprobs"u8); - } + writer.WritePropertyName("logprobs"u8); + writer.WriteNumberValue(Logprobs.Value); } if (Optional.IsDefined(MaxTokens) && _additionalBinaryDataProperties?.ContainsKey("max_tokens") != true) { - if (MaxTokens != null) - { - writer.WritePropertyName("max_tokens"u8); - writer.WriteNumberValue(MaxTokens.Value); - } - else - { - writer.WriteNull("maxTokens"u8); - } + writer.WritePropertyName("max_tokens"u8); + writer.WriteNumberValue(MaxTokens.Value); } if (Optional.IsDefined(N) && _additionalBinaryDataProperties?.ContainsKey("n") != true) { - if (N != null) - { - writer.WritePropertyName("n"u8); - writer.WriteNumberValue(N.Value); - } - else - { - writer.WriteNull("n"u8); - } + writer.WritePropertyName("n"u8); + writer.WriteNumberValue(N.Value); } if (Optional.IsDefined(PresencePenalty) && _additionalBinaryDataProperties?.ContainsKey("presence_penalty") != true) { - if (PresencePenalty != null) - { - writer.WritePropertyName("presence_penalty"u8); - writer.WriteNumberValue(PresencePenalty.Value); - } - else - { - writer.WriteNull("presencePenalty"u8); - } + writer.WritePropertyName("presence_penalty"u8); + writer.WriteNumberValue(PresencePenalty.Value); } if (Optional.IsDefined(Seed) && _additionalBinaryDataProperties?.ContainsKey("seed") != true) { - if (Seed != null) - { - writer.WritePropertyName("seed"u8); - writer.WriteNumberValue(Seed.Value); - } - else - { - writer.WriteNull("seed"u8); - } + writer.WritePropertyName("seed"u8); + writer.WriteNumberValue(Seed.Value); } if (Optional.IsDefined(Stop) && _additionalBinaryDataProperties?.ContainsKey("stop") != true) { - if (Stop != null) - { - writer.WritePropertyName("stop"u8); + writer.WritePropertyName("stop"u8); #if NET6_0_OR_GREATER - writer.WriteRawValue(Stop); + writer.WriteRawValue(Stop); #else - using (JsonDocument document = JsonDocument.Parse(Stop)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - else + using (JsonDocument document = JsonDocument.Parse(Stop)) { - writer.WriteNull("stop"u8); + JsonSerializer.Serialize(writer, document.RootElement); } +#endif } if (Optional.IsDefined(Stream) && _additionalBinaryDataProperties?.ContainsKey("stream") != true) { - if (Stream != null) - { - writer.WritePropertyName("stream"u8); - writer.WriteBooleanValue(Stream.Value); - } - else - { - writer.WriteNull("stream"u8); - } + writer.WritePropertyName("stream"u8); + writer.WriteBooleanValue(Stream.Value); } if (Optional.IsDefined(StreamOptions) && _additionalBinaryDataProperties?.ContainsKey("stream_options") != true) { - if (StreamOptions != null) - { - writer.WritePropertyName("stream_options"u8); - writer.WriteObjectValue(StreamOptions, options); - } - else - { - writer.WriteNull("streamOptions"u8); - } + writer.WritePropertyName("stream_options"u8); + writer.WriteObjectValue(StreamOptions, options); } if (Optional.IsDefined(Suffix) && _additionalBinaryDataProperties?.ContainsKey("suffix") != true) { - if (Suffix != null) - { - writer.WritePropertyName("suffix"u8); - writer.WriteStringValue(Suffix); - } - else - { - writer.WriteNull("suffix"u8); - } + writer.WritePropertyName("suffix"u8); + writer.WriteStringValue(Suffix); } if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) { - if (Temperature != null) - { - writer.WritePropertyName("temperature"u8); - writer.WriteNumberValue(Temperature.Value); - } - else - { - writer.WriteNull("temperature"u8); - } + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); } if (Optional.IsDefined(TopP) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) { - if (TopP != null) - { - writer.WritePropertyName("top_p"u8); - writer.WriteNumberValue(TopP.Value); - } - else - { - writer.WriteNull("topP"u8); - } + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(TopP.Value); } if (Optional.IsDefined(User) && _additionalBinaryDataProperties?.ContainsKey("user") != true) { writer.WritePropertyName("user"u8); writer.WriteStringValue(User); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -489,10 +384,7 @@ internal static InternalCreateCompletionRequest DeserializeInternalCreateComplet user = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateCompletionRequest( model, diff --git a/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs b/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs index 8ff5921f9..ff4c4fa58 100644 --- a/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs +++ b/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs @@ -72,7 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("usage"u8); writer.WriteObjectValue(Usage, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -166,10 +166,7 @@ internal static InternalCreateCompletionResponse DeserializeInternalCreateComple usage = ChatTokenUsage.DeserializeChatTokenUsage(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateCompletionResponse( id, diff --git a/src/Generated/Models/InternalCreateCompletionResponseChoice.Serialization.cs b/src/Generated/Models/InternalCreateCompletionResponseChoice.Serialization.cs index 1979a5fe2..557339b99 100644 --- a/src/Generated/Models/InternalCreateCompletionResponseChoice.Serialization.cs +++ b/src/Generated/Models/InternalCreateCompletionResponseChoice.Serialization.cs @@ -43,7 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("logprobs") != true) { - if (Logprobs != null) + if (Optional.IsDefined(Logprobs)) { writer.WritePropertyName("logprobs"u8); writer.WriteObjectValue(Logprobs, options); @@ -58,7 +58,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -130,10 +130,7 @@ internal static InternalCreateCompletionResponseChoice DeserializeInternalCreate text = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateCompletionResponseChoice(finishReason, index, logprobs, text, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs b/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs index c47f11632..8c39e5a8e 100644 --- a/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs +++ b/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs @@ -83,7 +83,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -205,10 +205,7 @@ internal static InternalCreateCompletionResponseChoiceLogprobs DeserializeIntern topLogprobs = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + 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); } diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.Serialization.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.Serialization.cs index ebea86565..ac777618b 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.Serialization.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.Serialization.cs @@ -33,27 +33,13 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Name) && _additionalBinaryDataProperties?.ContainsKey("name") != true) { - if (Name != null) - { - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - } - else - { - writer.WriteNull("name"u8); - } + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); } if (Optional.IsDefined(Entity) && _additionalBinaryDataProperties?.ContainsKey("entity") != true) { - if (Entity != null) - { - writer.WritePropertyName("entity"u8); - writer.WriteStringValue(Entity); - } - else - { - writer.WriteNull("entity"u8); - } + writer.WritePropertyName("entity"u8); + writer.WriteStringValue(Entity); } if (Optional.IsCollectionDefined(Tags) && _additionalBinaryDataProperties?.ContainsKey("tags") != true) { @@ -75,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("project"u8); writer.WriteStringValue(Project); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -168,10 +154,7 @@ internal static InternalCreateFineTuningJobRequestWandbIntegrationWandb Deserial project = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateFineTuningJobRequestWandbIntegrationWandb(name, entity, tags ?? new ChangeTrackingList(), project, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateModerationRequestInput2.Serialization.cs b/src/Generated/Models/InternalCreateModerationRequestInput2.Serialization.cs index 7c71777ad..4f0f2a627 100644 --- a/src/Generated/Models/InternalCreateModerationRequestInput2.Serialization.cs +++ b/src/Generated/Models/InternalCreateModerationRequestInput2.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("image_url"u8); writer.WriteObjectValue(ImageUrl, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalCreateModerationRequestInput2 DeserializeInternalCreateM imageUrl = InternalCreateModerationRequestInputImageUrl.DeserializeInternalCreateModerationRequestInputImageUrl(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateModerationRequestInput2(@type, imageUrl, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateModerationRequestInput3.Serialization.cs b/src/Generated/Models/InternalCreateModerationRequestInput3.Serialization.cs index 878c6f0be..2d4e3f374 100644 --- a/src/Generated/Models/InternalCreateModerationRequestInput3.Serialization.cs +++ b/src/Generated/Models/InternalCreateModerationRequestInput3.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalCreateModerationRequestInput3 DeserializeInternalCreateM text = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateModerationRequestInput3(@type, text, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateModerationRequestInputImageUrl.Serialization.cs b/src/Generated/Models/InternalCreateModerationRequestInputImageUrl.Serialization.cs index b65ae8776..5d763edfc 100644 --- a/src/Generated/Models/InternalCreateModerationRequestInputImageUrl.Serialization.cs +++ b/src/Generated/Models/InternalCreateModerationRequestInputImageUrl.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("url"u8); writer.WriteStringValue(Url); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalCreateModerationRequestInputImageUrl DeserializeInternal url = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateModerationRequestInputImageUrl(url, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.Serialization.cs b/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.Serialization.cs index 7e26ddd19..2075fc7bb 100644 --- a/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.Serialization.cs +++ b/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.Serialization.cs @@ -226,7 +226,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -503,10 +503,7 @@ internal static InternalCreateModerationResponseResultCategoryAppliedInputTypes violenceGraphic = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateModerationResponseResultCategoryAppliedInputTypes( hate, diff --git a/src/Generated/Models/InternalCreateResponsesRequestIncludable.cs b/src/Generated/Models/InternalCreateResponsesRequestIncludable.cs new file mode 100644 index 000000000..3c4902e14 --- /dev/null +++ b/src/Generated/Models/InternalCreateResponsesRequestIncludable.cs @@ -0,0 +1,47 @@ +// + +#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 new file mode 100644 index 000000000..b5b312d8b --- /dev/null +++ b/src/Generated/Models/InternalCreateResponsesRequestModel.cs @@ -0,0 +1,170 @@ +// + +#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 new file mode 100644 index 000000000..cc9646a32 --- /dev/null +++ b/src/Generated/Models/InternalCreateResponsesResponseObject.cs @@ -0,0 +1,41 @@ +// + +#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/InternalCreateRunRequestModel.cs b/src/Generated/Models/InternalCreateRunRequestModel.cs deleted file mode 100644 index 7d3b0dbf0..000000000 --- a/src/Generated/Models/InternalCreateRunRequestModel.cs +++ /dev/null @@ -1,110 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalCreateRunRequestModel : IEquatable - { - private readonly string _value; - 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 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 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 InternalCreateRunRequestModel(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateRunRequestModel Gpt4o { get; } = new InternalCreateRunRequestModel(Gpt4oValue); - - public static InternalCreateRunRequestModel Gpt4o20241120 { get; } = new InternalCreateRunRequestModel(Gpt4o20241120Value); - - public static InternalCreateRunRequestModel Gpt4o20240806 { get; } = new InternalCreateRunRequestModel(Gpt4o20240806Value); - - public static InternalCreateRunRequestModel Gpt4o20240513 { get; } = new InternalCreateRunRequestModel(Gpt4o20240513Value); - - public static InternalCreateRunRequestModel Gpt4oMini { get; } = new InternalCreateRunRequestModel(Gpt4oMiniValue); - - public static InternalCreateRunRequestModel Gpt4oMini20240718 { get; } = new InternalCreateRunRequestModel(Gpt4oMini20240718Value); - - public static InternalCreateRunRequestModel Gpt4Turbo { get; } = new InternalCreateRunRequestModel(Gpt4TurboValue); - - public static InternalCreateRunRequestModel Gpt4Turbo20240409 { get; } = new InternalCreateRunRequestModel(Gpt4Turbo20240409Value); - - public static InternalCreateRunRequestModel Gpt40125Preview { get; } = new InternalCreateRunRequestModel(Gpt40125PreviewValue); - - public static InternalCreateRunRequestModel Gpt4TurboPreview { get; } = new InternalCreateRunRequestModel(Gpt4TurboPreviewValue); - - public static InternalCreateRunRequestModel Gpt41106Preview { get; } = new InternalCreateRunRequestModel(Gpt41106PreviewValue); - - public static InternalCreateRunRequestModel Gpt4VisionPreview { get; } = new InternalCreateRunRequestModel(Gpt4VisionPreviewValue); - - public static InternalCreateRunRequestModel Gpt4 { get; } = new InternalCreateRunRequestModel(Gpt4Value); - - public static InternalCreateRunRequestModel Gpt40314 { get; } = new InternalCreateRunRequestModel(Gpt40314Value); - - public static InternalCreateRunRequestModel Gpt40613 { get; } = new InternalCreateRunRequestModel(Gpt40613Value); - - public static InternalCreateRunRequestModel Gpt432k { get; } = new InternalCreateRunRequestModel(Gpt432kValue); - - public static InternalCreateRunRequestModel Gpt432k0314 { get; } = new InternalCreateRunRequestModel(Gpt432k0314Value); - - public static InternalCreateRunRequestModel Gpt432k0613 { get; } = new InternalCreateRunRequestModel(Gpt432k0613Value); - - public static InternalCreateRunRequestModel Gpt35Turbo { get; } = new InternalCreateRunRequestModel(Gpt35TurboValue); - - public static InternalCreateRunRequestModel Gpt35Turbo16k { get; } = new InternalCreateRunRequestModel(Gpt35Turbo16kValue); - - public static InternalCreateRunRequestModel Gpt35Turbo0613 { get; } = new InternalCreateRunRequestModel(Gpt35Turbo0613Value); - - public static InternalCreateRunRequestModel Gpt35Turbo1106 { get; } = new InternalCreateRunRequestModel(Gpt35Turbo1106Value); - - public static InternalCreateRunRequestModel Gpt35Turbo0125 { get; } = new InternalCreateRunRequestModel(Gpt35Turbo0125Value); - - public static InternalCreateRunRequestModel Gpt35Turbo16k0613 { get; } = new InternalCreateRunRequestModel(Gpt35Turbo16k0613Value); - - public static bool operator ==(InternalCreateRunRequestModel left, InternalCreateRunRequestModel right) => left.Equals(right); - - public static bool operator !=(InternalCreateRunRequestModel left, InternalCreateRunRequestModel right) => !left.Equals(right); - - public static implicit operator InternalCreateRunRequestModel(string value) => new InternalCreateRunRequestModel(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateRunRequestModel other && Equals(other); - - public bool Equals(InternalCreateRunRequestModel 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/InternalCreateThreadAndRunRequest.Serialization.cs b/src/Generated/Models/InternalCreateThreadAndRunRequest.Serialization.cs index 8a98c8422..e8e22aec0 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequest.Serialization.cs @@ -43,32 +43,18 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Instructions) && _additionalBinaryDataProperties?.ContainsKey("instructions") != true) { - if (Instructions != null) - { - writer.WritePropertyName("instructions"u8); - writer.WriteStringValue(Instructions); - } - else - { - writer.WriteNull("instructions"u8); - } + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(Instructions); } if (Optional.IsCollectionDefined(Tools) && _additionalBinaryDataProperties?.ContainsKey("tools") != true) { - if (Tools != null) + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (ToolDefinition item in Tools) { - writer.WritePropertyName("tools"u8); - writer.WriteStartArray(); - foreach (ToolDefinition item in Tools) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else - { - writer.WriteNull("tools"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); } if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) { @@ -88,75 +74,33 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) { - if (Temperature != null) - { - writer.WritePropertyName("temperature"u8); - writer.WriteNumberValue(Temperature.Value); - } - else - { - writer.WriteNull("temperature"u8); - } + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); } if (Optional.IsDefined(TopP) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) { - if (TopP != null) - { - writer.WritePropertyName("top_p"u8); - writer.WriteNumberValue(TopP.Value); - } - else - { - writer.WriteNull("topP"u8); - } + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(TopP.Value); } if (Optional.IsDefined(Stream) && _additionalBinaryDataProperties?.ContainsKey("stream") != true) { - if (Stream != null) - { - writer.WritePropertyName("stream"u8); - writer.WriteBooleanValue(Stream.Value); - } - else - { - writer.WriteNull("stream"u8); - } + writer.WritePropertyName("stream"u8); + writer.WriteBooleanValue(Stream.Value); } if (Optional.IsDefined(MaxPromptTokens) && _additionalBinaryDataProperties?.ContainsKey("max_prompt_tokens") != true) { - if (MaxPromptTokens != null) - { - writer.WritePropertyName("max_prompt_tokens"u8); - writer.WriteNumberValue(MaxPromptTokens.Value); - } - else - { - writer.WriteNull("maxPromptTokens"u8); - } + writer.WritePropertyName("max_prompt_tokens"u8); + writer.WriteNumberValue(MaxPromptTokens.Value); } if (Optional.IsDefined(MaxCompletionTokens) && _additionalBinaryDataProperties?.ContainsKey("max_completion_tokens") != true) { - if (MaxCompletionTokens != null) - { - writer.WritePropertyName("max_completion_tokens"u8); - writer.WriteNumberValue(MaxCompletionTokens.Value); - } - else - { - writer.WriteNull("maxCompletionTokens"u8); - } + writer.WritePropertyName("max_completion_tokens"u8); + writer.WriteNumberValue(MaxCompletionTokens.Value); } if (Optional.IsDefined(TruncationStrategy) && _additionalBinaryDataProperties?.ContainsKey("truncation_strategy") != true) { - if (TruncationStrategy != null) - { - writer.WritePropertyName("truncation_strategy"u8); - writer.WriteObjectValue(TruncationStrategy, options); - } - else - { - writer.WriteNull("truncationStrategy"u8); - } + writer.WritePropertyName("truncation_strategy"u8); + writer.WriteObjectValue(TruncationStrategy, options); } if (Optional.IsDefined(ParallelToolCalls) && _additionalBinaryDataProperties?.ContainsKey("parallel_tool_calls") != true) { @@ -165,53 +109,25 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) { - if (Model != null) - { - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - } - else - { - writer.WriteNull("model"u8); - } + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); } if (Optional.IsDefined(ToolResources) && _additionalBinaryDataProperties?.ContainsKey("tool_resources") != true) { - if (ToolResources != null) - { - writer.WritePropertyName("tool_resources"u8); - writer.WriteObjectValue(ToolResources, options); - } - else - { - writer.WriteNull("toolResources"u8); - } + writer.WritePropertyName("tool_resources"u8); + writer.WriteObjectValue(ToolResources, options); } if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) { - if (ResponseFormat != null) - { - writer.WritePropertyName("response_format"u8); - writer.WriteObjectValue(ResponseFormat, options); - } - else - { - writer.WriteNull("responseFormat"u8); - } + writer.WritePropertyName("response_format"u8); + writer.WriteObjectValue(ResponseFormat, options); } if (Optional.IsDefined(ToolChoice) && _additionalBinaryDataProperties?.ContainsKey("tool_choice") != true) { - if (ToolChoice != null) - { - writer.WritePropertyName("tool_choice"u8); - writer.WriteObjectValue(ToolChoice, options); - } - else - { - writer.WriteNull("toolChoice"u8); - } + writer.WritePropertyName("tool_choice"u8); + writer.WriteObjectValue(ToolChoice, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -438,10 +354,7 @@ internal static InternalCreateThreadAndRunRequest DeserializeInternalCreateThrea toolChoice = ToolConstraint.DeserializeToolConstraint(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadAndRunRequest( assistantId, diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestModel.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestModel.cs index d04dc1226..7a540c6f2 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestModel.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestModel.cs @@ -17,6 +17,8 @@ namespace OpenAI.Assistants private const string Gpt4o20240513Value = "gpt-4o-2024-05-13"; private const string Gpt4oMiniValue = "gpt-4o-mini"; private const string Gpt4oMini20240718Value = "gpt-4o-mini-2024-07-18"; + private const string Gpt45PreviewValue = "gpt-4.5-preview"; + private const string Gpt45Preview20250227Value = "gpt-4.5-preview-2025-02-27"; 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"; @@ -55,6 +57,10 @@ public InternalCreateThreadAndRunRequestModel(string value) public static InternalCreateThreadAndRunRequestModel Gpt4oMini20240718 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4oMini20240718Value); + public static InternalCreateThreadAndRunRequestModel Gpt45Preview { get; } = new InternalCreateThreadAndRunRequestModel(Gpt45PreviewValue); + + public static InternalCreateThreadAndRunRequestModel Gpt45Preview20250227 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt45Preview20250227Value); + public static InternalCreateThreadAndRunRequestModel Gpt4Turbo { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4TurboValue); public static InternalCreateThreadAndRunRequestModel Gpt4Turbo20240409 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4Turbo20240409Value); diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs index ded12e75f..ea3d59e55 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static InternalCreateThreadAndRunRequestToolResources DeserializeIntern fileSearch = InternalToolResourcesFileSearchIdsOnly.DeserializeInternalToolResourcesFileSearchIdsOnly(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadAndRunRequestToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs index 141e218cd..465600247 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter De fileIds = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs index b9e1a4ee7..1b2c7f3f9 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static InternalCreateThreadRequestToolResources DeserializeInternalCrea fileSearch = FileSearchToolResources.DeserializeFileSearchToolResources(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadRequestToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs index 1e6146b9e..ce25a6869 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalCreateThreadRequestToolResourcesCodeInterpreter Deserial fileIds = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadRequestToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs index e432b91e0..af5668d00 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs @@ -27,7 +27,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalCreateThreadRequestToolResourcesFileSearchBase)} does not support writing '{format}' format."); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -70,10 +70,7 @@ internal static InternalCreateThreadRequestToolResourcesFileSearchBase Deseriali IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadRequestToolResourcesFileSearchBase(additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs b/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs index 14ed7a98e..282248ae1 100644 --- a/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs +++ b/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalCreateTranscriptionResponseJson DeserializeInternalCreat text = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateTranscriptionResponseJson(text, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs b/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs index ddaff2f1a..1499fbd37 100644 --- a/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs +++ b/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalCreateTranslationResponseJson DeserializeInternalCreateT text = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateTranslationResponseJson(text, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateUploadRequest.Serialization.cs b/src/Generated/Models/InternalCreateUploadRequest.Serialization.cs index 121cd3ce8..d1ddbe246 100644 --- a/src/Generated/Models/InternalCreateUploadRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateUploadRequest.Serialization.cs @@ -51,7 +51,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("mime_type"u8); writer.WriteStringValue(MimeType); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -118,10 +118,7 @@ internal static InternalCreateUploadRequest DeserializeInternalCreateUploadReque mimeType = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateUploadRequest(filename, purpose, bytes, mimeType, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs index 792fe9f39..9499f88c6 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs @@ -58,7 +58,12 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } - if (true && _additionalBinaryDataProperties != null) + if (Optional.IsDefined(Attributes) && _additionalBinaryDataProperties?.ContainsKey("attributes") != true) + { + writer.WritePropertyName("attributes"u8); + writer.WriteObjectValue(Attributes, options); + } + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,6 +105,7 @@ internal static InternalCreateVectorStoreFileBatchRequest DeserializeInternalCre } IList fileIds = default; BinaryData chunkingStrategy = default; + InternalVectorStoreFileAttributes attributes = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -129,12 +135,19 @@ internal static InternalCreateVectorStoreFileBatchRequest DeserializeInternalCre chunkingStrategy = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) + if (prop.NameEquals("attributes"u8)) { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + if (prop.Value.ValueKind == JsonValueKind.Null) + { + attributes = null; + continue; + } + attributes = InternalVectorStoreFileAttributes.DeserializeInternalVectorStoreFileAttributes(prop.Value, options); + continue; } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalCreateVectorStoreFileBatchRequest(fileIds, chunkingStrategy, additionalBinaryDataProperties); + return new InternalCreateVectorStoreFileBatchRequest(fileIds, chunkingStrategy, attributes, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); diff --git a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs index 05db1f8a6..e97c60b2f 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs @@ -20,10 +20,11 @@ public InternalCreateVectorStoreFileBatchRequest(IEnumerable fileIds) FileIds = fileIds.ToList(); } - internal InternalCreateVectorStoreFileBatchRequest(IList fileIds, BinaryData chunkingStrategy, IDictionary additionalBinaryDataProperties) + internal InternalCreateVectorStoreFileBatchRequest(IList fileIds, BinaryData chunkingStrategy, InternalVectorStoreFileAttributes attributes, IDictionary additionalBinaryDataProperties) { FileIds = fileIds; ChunkingStrategy = chunkingStrategy; + Attributes = attributes; _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -31,6 +32,8 @@ internal InternalCreateVectorStoreFileBatchRequest(IList fileIds, Binary public BinaryData ChunkingStrategy { get; set; } + public InternalVectorStoreFileAttributes Attributes { get; set; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs b/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs index ea7862847..6a18275af 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs @@ -36,12 +36,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } + if (Optional.IsDefined(Attributes) && _additionalBinaryDataProperties?.ContainsKey("attributes") != true) + { + writer.WritePropertyName("attributes"u8); + writer.WriteObjectValue(Attributes, options); + } if (Optional.IsDefined(ChunkingStrategy) && _additionalBinaryDataProperties?.ContainsKey("chunking_strategy") != true) { writer.WritePropertyName("chunking_strategy"u8); - writer.WriteObjectValue(ChunkingStrategy, options); + writer.WriteObjectValue(ChunkingStrategy, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -82,6 +87,7 @@ internal static InternalCreateVectorStoreFileRequest DeserializeInternalCreateVe return null; } string fileId = default; + InternalVectorStoreFileAttributes attributes = default; FileChunkingStrategy chunkingStrategy = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -91,21 +97,28 @@ internal static InternalCreateVectorStoreFileRequest DeserializeInternalCreateVe fileId = prop.Value.GetString(); continue; } - if (prop.NameEquals("chunking_strategy"u8)) + if (prop.NameEquals("attributes"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { + attributes = null; continue; } - chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(prop.Value, options); + attributes = InternalVectorStoreFileAttributes.DeserializeInternalVectorStoreFileAttributes(prop.Value, options); continue; } - if (true) + if (prop.NameEquals("chunking_strategy"u8)) { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(prop.Value, options); + continue; } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalCreateVectorStoreFileRequest(fileId, chunkingStrategy, additionalBinaryDataProperties); + return new InternalCreateVectorStoreFileRequest(fileId, attributes, chunkingStrategy, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); diff --git a/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs b/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs index 22b73113b..74bed12e4 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs @@ -19,15 +19,18 @@ public InternalCreateVectorStoreFileRequest(string fileId) FileId = fileId; } - internal InternalCreateVectorStoreFileRequest(string fileId, FileChunkingStrategy chunkingStrategy, IDictionary additionalBinaryDataProperties) + internal InternalCreateVectorStoreFileRequest(string fileId, InternalVectorStoreFileAttributes attributes, FileChunkingStrategy chunkingStrategy, IDictionary additionalBinaryDataProperties) { FileId = fileId; + Attributes = attributes; ChunkingStrategy = chunkingStrategy; _additionalBinaryDataProperties = additionalBinaryDataProperties; } public string FileId { get; } + public InternalVectorStoreFileAttributes Attributes { get; set; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/InternalDeleteResponseResponseObject.cs b/src/Generated/Models/InternalDeleteResponseResponseObject.cs new file mode 100644 index 000000000..a6818caea --- /dev/null +++ b/src/Generated/Models/InternalDeleteResponseResponseObject.cs @@ -0,0 +1,41 @@ +// + +#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/InternalFileChunkingStrategyRequestParam.Serialization.cs b/src/Generated/Models/InternalFileChunkingStrategyRequestParam.Serialization.cs index a79752d35..22233c52c 100644 --- a/src/Generated/Models/InternalFileChunkingStrategyRequestParam.Serialization.cs +++ b/src/Generated/Models/InternalFileChunkingStrategyRequestParam.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/InternalFileUploadOptions.Serialization.cs b/src/Generated/Models/InternalFileUploadOptions.Serialization.cs index b990c6541..bc3e03a85 100644 --- a/src/Generated/Models/InternalFileUploadOptions.Serialization.cs +++ b/src/Generated/Models/InternalFileUploadOptions.Serialization.cs @@ -45,7 +45,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("purpose"u8); writer.WriteStringValue(Purpose.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static InternalFileUploadOptions DeserializeInternalFileUploadOptions(J purpose = new FileUploadPurpose(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalFileUploadOptions(@file, purpose, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.Serialization.cs b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.Serialization.cs index 0003c9a54..72fdcb1f9 100644 --- a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.Serialization.cs +++ b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.Serialization.cs @@ -21,19 +21,82 @@ void IJsonModel.Write(Utf writer.WriteEndObject(); } - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + 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."); } - base.JsonModelWriteCore(writer, options); + 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) => (InternalFineTuneChatCompletionRequestAssistantMessage)JsonModelCreateCore(ref reader, options); + InternalFineTuneChatCompletionRequestAssistantMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + protected virtual InternalFineTuneChatCompletionRequestAssistantMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -50,24 +113,24 @@ internal static InternalFineTuneChatCompletionRequestAssistantMessage Deserializ { return null; } - ChatMessageContent content = default; - Chat.ChatMessageRole role = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalFineTuneChatCompletionRequestAssistantMessageWeight? weight = default; string refusal = default; - string participantName = default; + InternalFineTuneChatCompletionRequestAssistantMessageRole role = default; + string name = default; + ChatOutputAudioReference audio = default; IList toolCalls = default; ChatFunctionCall functionCall = default; - ChatOutputAudioReference outputAudioReference = default; + ChatMessageContent content = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("content"u8)) - { - DeserializeContentValue(prop, ref content); - continue; - } - if (prop.NameEquals("role"u8)) + if (prop.NameEquals("weight"u8)) { - role = prop.Value.GetString().ToChatMessageRole(); + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + weight = new InternalFineTuneChatCompletionRequestAssistantMessageWeight(prop.Value.GetString()); continue; } if (prop.NameEquals("refusal"u8)) @@ -80,9 +143,24 @@ internal static InternalFineTuneChatCompletionRequestAssistantMessage Deserializ refusal = prop.Value.GetString(); continue; } + if (prop.NameEquals("role"u8)) + { + role = new InternalFineTuneChatCompletionRequestAssistantMessageRole(prop.Value.GetString()); + continue; + } if (prop.NameEquals("name"u8)) { - participantName = prop.Value.GetString(); + 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)) @@ -109,36 +187,33 @@ internal static InternalFineTuneChatCompletionRequestAssistantMessage Deserializ functionCall = ChatFunctionCall.DeserializeChatFunctionCall(prop.Value, options); continue; } - if (prop.NameEquals("audio"u8)) + if (prop.NameEquals("content"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - outputAudioReference = null; + content = null; continue; } - outputAudioReference = ChatOutputAudioReference.DeserializeChatOutputAudioReference(prop.Value, options); + content = ChatMessageContent.DeserializeChatMessageContent(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - // CUSTOM: Initialize Content collection property. return new InternalFineTuneChatCompletionRequestAssistantMessage( - content ?? new ChatMessageContent(), - role, - additionalBinaryDataProperties, + weight, refusal, - participantName, + role, + name, + audio, toolCalls ?? new ChangeTrackingList(), functionCall, - outputAudioReference); + content, + additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -150,9 +225,9 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions } } - InternalFineTuneChatCompletionRequestAssistantMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalFineTuneChatCompletionRequestAssistantMessage)PersistableModelCreateCore(data, options); + InternalFineTuneChatCompletionRequestAssistantMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + protected virtual InternalFineTuneChatCompletionRequestAssistantMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) diff --git a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.cs b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.cs index 0df80d87f..7d2fc5f4e 100644 --- a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.cs +++ b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.cs @@ -4,18 +4,52 @@ using System; using System.Collections.Generic; +using OpenAI; using OpenAI.Chat; namespace OpenAI.FineTuning { - internal partial class InternalFineTuneChatCompletionRequestAssistantMessage : AssistantChatMessage + 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; } - internal InternalFineTuneChatCompletionRequestAssistantMessage(ChatMessageContent content, Chat.ChatMessageRole role, IDictionary additionalBinaryDataProperties, string refusal, string participantName, IList toolCalls, ChatFunctionCall functionCall, ChatOutputAudioReference outputAudioReference) : base(content, role, additionalBinaryDataProperties, refusal, participantName, toolCalls, functionCall, outputAudioReference) + 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 new file mode 100644 index 000000000..c5ed673aa --- /dev/null +++ b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessageRole.cs @@ -0,0 +1,41 @@ +// + +#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 new file mode 100644 index 000000000..a4ebe16fa --- /dev/null +++ b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessageWeight.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal readonly partial struct InternalFineTuneChatCompletionRequestAssistantMessageWeight : IEquatable + { + private readonly string _value; + private const string _0Value = "0"; + private const string _1Value = "1"; + + public InternalFineTuneChatCompletionRequestAssistantMessageWeight(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static InternalFineTuneChatCompletionRequestAssistantMessageWeight _0 { get; } = new InternalFineTuneChatCompletionRequestAssistantMessageWeight(_0Value); + + public static InternalFineTuneChatCompletionRequestAssistantMessageWeight _1 { get; } = new InternalFineTuneChatCompletionRequestAssistantMessageWeight(_1Value); + + public static bool operator ==(InternalFineTuneChatCompletionRequestAssistantMessageWeight left, InternalFineTuneChatCompletionRequestAssistantMessageWeight right) => left.Equals(right); + + public static bool operator !=(InternalFineTuneChatCompletionRequestAssistantMessageWeight left, InternalFineTuneChatCompletionRequestAssistantMessageWeight right) => !left.Equals(right); + + public static implicit operator InternalFineTuneChatCompletionRequestAssistantMessageWeight(string value) => new InternalFineTuneChatCompletionRequestAssistantMessageWeight(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalFineTuneChatCompletionRequestAssistantMessageWeight other && Equals(other); + + public bool Equals(InternalFineTuneChatCompletionRequestAssistantMessageWeight 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/InternalFineTuneSupervisedMethodHyperparameters.Serialization.cs b/src/Generated/Models/InternalFineTuneSupervisedMethodHyperparameters.Serialization.cs index a97f55cc1..a567cfa62 100644 --- a/src/Generated/Models/InternalFineTuneSupervisedMethodHyperparameters.Serialization.cs +++ b/src/Generated/Models/InternalFineTuneSupervisedMethodHyperparameters.Serialization.cs @@ -63,7 +63,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -136,10 +136,7 @@ internal static InternalFineTuneSupervisedMethodHyperparameters DeserializeInter nEpochs = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalFineTuneSupervisedMethodHyperparameters(batchSize, learningRateMultiplier, nEpochs, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs b/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs index 131661504..024044fa6 100644 --- a/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/InternalFineTuningIntegrationWandb.Serialization.cs b/src/Generated/Models/InternalFineTuningIntegrationWandb.Serialization.cs index 68744bf46..147698d6c 100644 --- a/src/Generated/Models/InternalFineTuningIntegrationWandb.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningIntegrationWandb.Serialization.cs @@ -73,10 +73,7 @@ internal static InternalFineTuningIntegrationWandb DeserializeInternalFineTuning wandb = FineTuningIntegrationWandbWandb.DeserializeFineTuningIntegrationWandbWandb(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalFineTuningIntegrationWandb(@type, additionalBinaryDataProperties, wandb); } diff --git a/src/Generated/Models/InternalFineTuningJobCheckpoint.Serialization.cs b/src/Generated/Models/InternalFineTuningJobCheckpoint.Serialization.cs index ef1ab9143..481499d76 100644 --- a/src/Generated/Models/InternalFineTuningJobCheckpoint.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningJobCheckpoint.Serialization.cs @@ -66,7 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -151,10 +151,7 @@ internal static InternalFineTuningJobCheckpoint DeserializeInternalFineTuningJob @object = new InternalFineTuningJobCheckpointObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalFineTuningJobCheckpoint( id, diff --git a/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.Serialization.cs b/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.Serialization.cs index 52ee0448d..ff181f203 100644 --- a/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.Serialization.cs @@ -62,7 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("full_valid_mean_token_accuracy"u8); writer.WriteNumberValue(FullValidMeanTokenAccuracy.Value); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -175,10 +175,7 @@ internal static InternalFineTuningJobCheckpointMetrics DeserializeInternalFineTu fullValidMeanTokenAccuracy = prop.Value.GetSingle(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalFineTuningJobCheckpointMetrics( step, diff --git a/src/Generated/Models/InternalFunctionDefinition.Serialization.cs b/src/Generated/Models/InternalFunctionDefinition.Serialization.cs index 1a1fb60f9..3a5e0c907 100644 --- a/src/Generated/Models/InternalFunctionDefinition.Serialization.cs +++ b/src/Generated/Models/InternalFunctionDefinition.Serialization.cs @@ -42,15 +42,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Strict) && _additionalBinaryDataProperties?.ContainsKey("strict") != true) { - if (Strict != null) - { - writer.WritePropertyName("strict"u8); - writer.WriteBooleanValue(Strict.Value); - } - else - { - writer.WriteNull("strict"u8); - } + writer.WritePropertyName("strict"u8); + writer.WriteBooleanValue(Strict.Value); } if (Optional.IsDefined(Parameters) && _additionalBinaryDataProperties?.ContainsKey("parameters") != true) { @@ -64,7 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -140,10 +133,7 @@ internal static InternalFunctionDefinition DeserializeInternalFunctionDefinition parameters = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalFunctionDefinition(description, name, strict, parameters, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalListAssistantsResponse.Serialization.cs b/src/Generated/Models/InternalListAssistantsResponse.Serialization.cs index 4de8caa0c..a3e307d87 100644 --- a/src/Generated/Models/InternalListAssistantsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListAssistantsResponse.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties?.ContainsKey("data") != true) + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); writer.WriteStartArray(); @@ -61,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -139,10 +139,7 @@ internal static InternalListAssistantsResponse DeserializeInternalListAssistants hasMore = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListAssistantsResponse( @object, diff --git a/src/Generated/Models/InternalListBatchesResponse.Serialization.cs b/src/Generated/Models/InternalListBatchesResponse.Serialization.cs index b2a0325c6..998c84308 100644 --- a/src/Generated/Models/InternalListBatchesResponse.Serialization.cs +++ b/src/Generated/Models/InternalListBatchesResponse.Serialization.cs @@ -61,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -139,10 +139,7 @@ internal static InternalListBatchesResponse DeserializeInternalListBatchesRespon @object = new InternalListBatchesResponseObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListBatchesResponse( data, diff --git a/src/Generated/Models/InternalListFilesInVectorStoreBatchRequestOrder.cs b/src/Generated/Models/InternalListFilesInVectorStoreBatchRequestOrder.cs deleted file mode 100644 index 621f99ed5..000000000 --- a/src/Generated/Models/InternalListFilesInVectorStoreBatchRequestOrder.cs +++ /dev/null @@ -1,44 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal readonly partial struct InternalListFilesInVectorStoreBatchRequestOrder : IEquatable - { - private readonly string _value; - private const string AscValue = "asc"; - private const string DescValue = "desc"; - - public InternalListFilesInVectorStoreBatchRequestOrder(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListFilesInVectorStoreBatchRequestOrder Asc { get; } = new InternalListFilesInVectorStoreBatchRequestOrder(AscValue); - - public static InternalListFilesInVectorStoreBatchRequestOrder Desc { get; } = new InternalListFilesInVectorStoreBatchRequestOrder(DescValue); - - public static bool operator ==(InternalListFilesInVectorStoreBatchRequestOrder left, InternalListFilesInVectorStoreBatchRequestOrder right) => left.Equals(right); - - public static bool operator !=(InternalListFilesInVectorStoreBatchRequestOrder left, InternalListFilesInVectorStoreBatchRequestOrder right) => !left.Equals(right); - - public static implicit operator InternalListFilesInVectorStoreBatchRequestOrder(string value) => new InternalListFilesInVectorStoreBatchRequestOrder(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListFilesInVectorStoreBatchRequestOrder other && Equals(other); - - public bool Equals(InternalListFilesInVectorStoreBatchRequestOrder 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/InternalListFineTuningJobCheckpointsResponse.Serialization.cs b/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.Serialization.cs index ecc8440c6..ebeceda27 100644 --- a/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.Serialization.cs @@ -48,34 +48,20 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(FirstId) && _additionalBinaryDataProperties?.ContainsKey("first_id") != true) { - if (FirstId != null) - { - writer.WritePropertyName("first_id"u8); - writer.WriteStringValue(FirstId); - } - else - { - writer.WriteNull("firstId"u8); - } + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); } if (Optional.IsDefined(LastId) && _additionalBinaryDataProperties?.ContainsKey("last_id") != true) { - if (LastId != null) - { - writer.WritePropertyName("last_id"u8); - writer.WriteStringValue(LastId); - } - else - { - writer.WriteNull("lastId"u8); - } + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); } if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) { writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -163,10 +149,7 @@ internal static InternalListFineTuningJobCheckpointsResponse DeserializeInternal hasMore = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListFineTuningJobCheckpointsResponse( data, diff --git a/src/Generated/Models/InternalListFineTuningJobEventsResponse.Serialization.cs b/src/Generated/Models/InternalListFineTuningJobEventsResponse.Serialization.cs index e700b47fd..a964af6a6 100644 --- a/src/Generated/Models/InternalListFineTuningJobEventsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListFineTuningJobEventsResponse.Serialization.cs @@ -31,11 +31,6 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalListFineTuningJobEventsResponse)} does not support writing '{format}' format."); } - if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) - { - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - } if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); @@ -51,7 +46,12 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -91,17 +91,12 @@ internal static InternalListFineTuningJobEventsResponse DeserializeInternalListF { return null; } - bool hasMore = default; IList data = default; InternalListFineTuningJobEventsResponseObject @object = default; + bool hasMore = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("has_more"u8)) - { - hasMore = prop.Value.GetBoolean(); - continue; - } if (prop.NameEquals("data"u8)) { List array = new List(); @@ -117,12 +112,14 @@ internal static InternalListFineTuningJobEventsResponse DeserializeInternalListF @object = new InternalListFineTuningJobEventsResponseObject(prop.Value.GetString()); continue; } - if (true) + if (prop.NameEquals("has_more"u8)) { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + hasMore = prop.Value.GetBoolean(); + continue; } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalListFineTuningJobEventsResponse(hasMore, data, @object, additionalBinaryDataProperties); + return new InternalListFineTuningJobEventsResponse(data, @object, hasMore, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); diff --git a/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs b/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs index c34113f0d..c5a4fd632 100644 --- a/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs +++ b/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs @@ -12,26 +12,26 @@ internal partial class InternalListFineTuningJobEventsResponse { private protected IDictionary _additionalBinaryDataProperties; - internal InternalListFineTuningJobEventsResponse(bool hasMore, IEnumerable data) + internal InternalListFineTuningJobEventsResponse(IEnumerable data, bool hasMore) { - HasMore = hasMore; Data = data.ToList(); + HasMore = hasMore; } - internal InternalListFineTuningJobEventsResponse(bool hasMore, IList data, InternalListFineTuningJobEventsResponseObject @object, IDictionary additionalBinaryDataProperties) + internal InternalListFineTuningJobEventsResponse(IList data, InternalListFineTuningJobEventsResponseObject @object, bool hasMore, IDictionary additionalBinaryDataProperties) { - HasMore = hasMore; Data = data; Object = @object; + HasMore = hasMore; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public bool HasMore { get; } - public IList Data { get; } public InternalListFineTuningJobEventsResponseObject Object { get; } = "list"; + public bool HasMore { get; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/InternalListMessagesResponse.Serialization.cs b/src/Generated/Models/InternalListMessagesResponse.Serialization.cs index 691a66723..0ef135589 100644 --- a/src/Generated/Models/InternalListMessagesResponse.Serialization.cs +++ b/src/Generated/Models/InternalListMessagesResponse.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties?.ContainsKey("data") != true) + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); writer.WriteStartArray(); @@ -61,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -139,10 +139,7 @@ internal static InternalListMessagesResponse DeserializeInternalListMessagesResp hasMore = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListMessagesResponse( @object, diff --git a/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.Serialization.cs b/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.Serialization.cs index cfa70a193..dd673f6d3 100644 --- a/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.Serialization.cs @@ -51,7 +51,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -117,10 +117,7 @@ internal static InternalListPaginatedFineTuningJobsResponse DeserializeInternalL @object = new InternalListPaginatedFineTuningJobsResponseObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListPaginatedFineTuningJobsResponse(data, hasMore, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalListRunStepsResponse.Serialization.cs b/src/Generated/Models/InternalListRunStepsResponse.Serialization.cs index 568099227..f16a639e7 100644 --- a/src/Generated/Models/InternalListRunStepsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListRunStepsResponse.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties?.ContainsKey("data") != true) + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); writer.WriteStartArray(); @@ -61,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -139,10 +139,7 @@ internal static InternalListRunStepsResponse DeserializeInternalListRunStepsResp hasMore = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListRunStepsResponse( @object, diff --git a/src/Generated/Models/InternalListRunsResponse.Serialization.cs b/src/Generated/Models/InternalListRunsResponse.Serialization.cs index a18bb7c40..bfbb465e4 100644 --- a/src/Generated/Models/InternalListRunsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListRunsResponse.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties?.ContainsKey("data") != true) + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); writer.WriteStartArray(); @@ -61,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -139,10 +139,7 @@ internal static InternalListRunsResponse DeserializeInternalListRunsResponse(Jso hasMore = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListRunsResponse( @object, diff --git a/src/Generated/Models/InternalListThreadsResponse.Serialization.cs b/src/Generated/Models/InternalListThreadsResponse.Serialization.cs index deba50bb2..b0172cc22 100644 --- a/src/Generated/Models/InternalListThreadsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListThreadsResponse.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties?.ContainsKey("data") != true) + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); writer.WriteStartArray(); @@ -61,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -139,10 +139,7 @@ internal static InternalListThreadsResponse DeserializeInternalListThreadsRespon hasMore = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListThreadsResponse( @object, diff --git a/src/Generated/Models/InternalListVectorStoreFilesResponse.Serialization.cs b/src/Generated/Models/InternalListVectorStoreFilesResponse.Serialization.cs index 8d2b5fdf2..96881a2fc 100644 --- a/src/Generated/Models/InternalListVectorStoreFilesResponse.Serialization.cs +++ b/src/Generated/Models/InternalListVectorStoreFilesResponse.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties?.ContainsKey("data") != true) + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); writer.WriteStartArray(); @@ -61,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -139,10 +139,7 @@ internal static InternalListVectorStoreFilesResponse DeserializeInternalListVect hasMore = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListVectorStoreFilesResponse( @object, diff --git a/src/Generated/Models/InternalListVectorStoresResponse.Serialization.cs b/src/Generated/Models/InternalListVectorStoresResponse.Serialization.cs index 15a375b63..47628b8e9 100644 --- a/src/Generated/Models/InternalListVectorStoresResponse.Serialization.cs +++ b/src/Generated/Models/InternalListVectorStoresResponse.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties?.ContainsKey("data") != true) + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); writer.WriteStartArray(); @@ -61,7 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -139,10 +139,7 @@ internal static InternalListVectorStoresResponse DeserializeInternalListVectorSt hasMore = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListVectorStoresResponse( @object, diff --git a/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs b/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs index f163923b5..5b6badf80 100644 --- a/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalMessageContentImageUrlObjectImageUrl DeserializeInternal detail = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentImageUrlObjectImageUrl(url, detail, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.Serialization.cs b/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.Serialization.cs index e1675137f..f1078ff05 100644 --- a/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalMessageContentItemFileObjectImageFile DeserializeInterna detail = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentItemFileObjectImageFile(fileId, detail, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObject.Serialization.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObject.Serialization.cs index 9566b3a42..2963c6300 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObject.Serialization.cs @@ -106,10 +106,7 @@ internal static InternalMessageContentTextAnnotationsFileCitationObject Deserial endIndex = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentTextAnnotationsFileCitationObject( @type, diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs index 4e5168aad..5532e3962 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalMessageContentTextAnnotationsFileCitationObjectFileCitat fileId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentTextAnnotationsFileCitationObjectFileCitation(fileId, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.Serialization.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.Serialization.cs index ad60be6dd..96009790b 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.Serialization.cs @@ -106,10 +106,7 @@ internal static InternalMessageContentTextAnnotationsFilePathObject DeserializeI endIndex = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentTextAnnotationsFilePathObject( @type, diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs index 9c2063bd9..2305841f1 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalMessageContentTextAnnotationsFilePathObjectFilePath Dese fileId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentTextAnnotationsFilePathObjectFilePath(fileId, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageContentTextObjectAnnotation.Serialization.cs b/src/Generated/Models/InternalMessageContentTextObjectAnnotation.Serialization.cs index d2fab5507..71807a0a7 100644 --- a/src/Generated/Models/InternalMessageContentTextObjectAnnotation.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextObjectAnnotation.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/InternalMessageContentTextObjectText.Serialization.cs b/src/Generated/Models/InternalMessageContentTextObjectText.Serialization.cs index e023a7c53..cc9dffd49 100644 --- a/src/Generated/Models/InternalMessageContentTextObjectText.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextObjectText.Serialization.cs @@ -46,7 +46,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -106,10 +106,7 @@ internal static InternalMessageContentTextObjectText DeserializeInternalMessageC annotations = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentTextObjectText(value, annotations, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageDeltaContent.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContent.Serialization.cs index 7ac025e15..fe6c65b1e 100644 --- a/src/Generated/Models/InternalMessageDeltaContent.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContent.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/InternalMessageDeltaContentImageFileObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentImageFileObject.Serialization.cs index b42753383..241807261 100644 --- a/src/Generated/Models/InternalMessageDeltaContentImageFileObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentImageFileObject.Serialization.cs @@ -88,10 +88,7 @@ internal static InternalMessageDeltaContentImageFileObject DeserializeInternalMe imageFile = InternalMessageDeltaContentImageFileObjectImageFile.DeserializeInternalMessageDeltaContentImageFileObjectImageFile(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentImageFileObject(@type, additionalBinaryDataProperties, index, imageFile); } diff --git a/src/Generated/Models/InternalMessageDeltaContentImageFileObjectImageFile.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentImageFileObjectImageFile.Serialization.cs index 38f2a8da1..69457aaa8 100644 --- a/src/Generated/Models/InternalMessageDeltaContentImageFileObjectImageFile.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentImageFileObjectImageFile.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -92,10 +92,7 @@ internal static InternalMessageDeltaContentImageFileObjectImageFile DeserializeI detail = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentImageFileObjectImageFile(fileId, detail, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.Serialization.cs index 696a1fe05..c372be61f 100644 --- a/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.Serialization.cs @@ -88,10 +88,7 @@ internal static InternalMessageDeltaContentImageUrlObject DeserializeInternalMes imageUrl = InternalMessageDeltaContentImageUrlObjectImageUrl.DeserializeInternalMessageDeltaContentImageUrlObjectImageUrl(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentImageUrlObject(@type, additionalBinaryDataProperties, index, imageUrl); } diff --git a/src/Generated/Models/InternalMessageDeltaContentImageUrlObjectImageUrl.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentImageUrlObjectImageUrl.Serialization.cs index 84fe846be..05f95e245 100644 --- a/src/Generated/Models/InternalMessageDeltaContentImageUrlObjectImageUrl.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentImageUrlObjectImageUrl.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalMessageDeltaContentImageUrlObjectImageUrl DeserializeInt detail = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentImageUrlObjectImageUrl(url, detail, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageDeltaContentRefusalObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentRefusalObject.Serialization.cs index 4e1a14815..275eabf9c 100644 --- a/src/Generated/Models/InternalMessageDeltaContentRefusalObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentRefusalObject.Serialization.cs @@ -84,10 +84,7 @@ internal static InternalMessageDeltaContentRefusalObject DeserializeInternalMess refusal = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentRefusalObject(@type, additionalBinaryDataProperties, index, refusal); } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs index fc6c22d7f..61e605d5b 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs @@ -129,10 +129,7 @@ internal static InternalMessageDeltaContentTextAnnotationsFileCitationObject Des endIndex = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentTextAnnotationsFileCitationObject( @type, diff --git a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs index 51525935e..05cd0e9e6 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("quote"u8); writer.WriteStringValue(Quote); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -92,10 +92,7 @@ internal static InternalMessageDeltaContentTextAnnotationsFileCitationObjectFile quote = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation(fileId, quote, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs index 2ab01dd19..a344ee663 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs @@ -129,10 +129,7 @@ internal static InternalMessageDeltaContentTextAnnotationsFilePathObject Deseria endIndex = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentTextAnnotationsFilePathObject( @type, diff --git a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs index 64af2f141..603b77118 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs @@ -32,7 +32,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -81,10 +81,7 @@ internal static InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath fileId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath(fileId, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentTextObject.Serialization.cs index 7eebdd746..176a61460 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextObject.Serialization.cs @@ -88,10 +88,7 @@ internal static InternalMessageDeltaContentTextObject DeserializeInternalMessage text = InternalMessageDeltaContentTextObjectText.DeserializeInternalMessageDeltaContentTextObjectText(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentTextObject(@type, additionalBinaryDataProperties, index, text); } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextObjectText.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentTextObjectText.Serialization.cs index 3a75de3db..a42369c7f 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextObjectText.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextObjectText.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -106,10 +106,7 @@ internal static InternalMessageDeltaContentTextObjectText DeserializeInternalMes annotations = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentTextObjectText(value, annotations ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs index af9621cc5..d7ffe9ceb 100644 --- a/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs @@ -46,7 +46,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("delta"u8); writer.WriteObjectValue(Delta, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalMessageDeltaObject DeserializeInternalMessageDeltaObject delta = InternalMessageDeltaObjectDelta.DeserializeInternalMessageDeltaObjectDelta(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaObject(id, @object, delta, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageDeltaObjectDelta.Serialization.cs b/src/Generated/Models/InternalMessageDeltaObjectDelta.Serialization.cs index 6d2f67e65..d2d782295 100644 --- a/src/Generated/Models/InternalMessageDeltaObjectDelta.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaObjectDelta.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("role"u8); writer.WriteStringValue(Role.Value.ToSerialString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -83,7 +83,7 @@ internal static InternalMessageDeltaObjectDelta DeserializeInternalMessageDeltaO return null; } IList content = default; - Assistants.MessageRole? role = default; + MessageRole? role = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -110,10 +110,7 @@ internal static InternalMessageDeltaObjectDelta DeserializeInternalMessageDeltaO role = prop.Value.GetString().ToMessageRole(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaObjectDelta(content ?? new ChangeTrackingList(), role, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageDeltaObjectDelta.cs b/src/Generated/Models/InternalMessageDeltaObjectDelta.cs index 71995269f..8480f6468 100644 --- a/src/Generated/Models/InternalMessageDeltaObjectDelta.cs +++ b/src/Generated/Models/InternalMessageDeltaObjectDelta.cs @@ -17,7 +17,7 @@ internal InternalMessageDeltaObjectDelta() Content = new ChangeTrackingList(); } - internal InternalMessageDeltaObjectDelta(IList content, Assistants.MessageRole? role, IDictionary additionalBinaryDataProperties) + internal InternalMessageDeltaObjectDelta(IList content, MessageRole? role, IDictionary additionalBinaryDataProperties) { Content = content; Role = role; diff --git a/src/Generated/Models/InternalMessageDeltaTextContentAnnotation.Serialization.cs b/src/Generated/Models/InternalMessageDeltaTextContentAnnotation.Serialization.cs index 447aa246c..4f027758e 100644 --- a/src/Generated/Models/InternalMessageDeltaTextContentAnnotation.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaTextContentAnnotation.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/InternalMessageImageFileContent.Serialization.cs b/src/Generated/Models/InternalMessageImageFileContent.Serialization.cs index c831eb317..c193cf8dd 100644 --- a/src/Generated/Models/InternalMessageImageFileContent.Serialization.cs +++ b/src/Generated/Models/InternalMessageImageFileContent.Serialization.cs @@ -33,7 +33,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("image_file") != true) { writer.WritePropertyName("image_file"u8); - writer.WriteObjectValue(_imageFile, options); + writer.WriteObjectValue(_imageFile, options); } } @@ -71,10 +71,7 @@ internal static InternalMessageImageFileContent DeserializeInternalMessageImageF imageFile = InternalMessageContentItemFileObjectImageFile.DeserializeInternalMessageContentItemFileObjectImageFile(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageImageFileContent(additionalBinaryDataProperties, @type, imageFile); } diff --git a/src/Generated/Models/InternalMessageImageUrlContent.Serialization.cs b/src/Generated/Models/InternalMessageImageUrlContent.Serialization.cs index decb82a1b..83b9c4856 100644 --- a/src/Generated/Models/InternalMessageImageUrlContent.Serialization.cs +++ b/src/Generated/Models/InternalMessageImageUrlContent.Serialization.cs @@ -33,7 +33,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("image_url") != true) { writer.WritePropertyName("image_url"u8); - writer.WriteObjectValue(_imageUrl, options); + writer.WriteObjectValue(_imageUrl, options); } } @@ -71,10 +71,7 @@ internal static InternalMessageImageUrlContent DeserializeInternalMessageImageUr imageUrl = InternalMessageContentImageUrlObjectImageUrl.DeserializeInternalMessageContentImageUrlObjectImageUrl(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageImageUrlContent(additionalBinaryDataProperties, @type, imageUrl); } diff --git a/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs b/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs index cb5cc7e63..f3893cc17 100644 --- a/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs +++ b/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs @@ -54,7 +54,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -125,10 +125,7 @@ internal static InternalMessageObjectAttachment DeserializeInternalMessageObject tools = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageObjectAttachment(fileId, tools ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalMessageRefusalContent.Serialization.cs b/src/Generated/Models/InternalMessageRefusalContent.Serialization.cs index a59102fb3..68bec52ae 100644 --- a/src/Generated/Models/InternalMessageRefusalContent.Serialization.cs +++ b/src/Generated/Models/InternalMessageRefusalContent.Serialization.cs @@ -71,10 +71,7 @@ internal static InternalMessageRefusalContent DeserializeInternalMessageRefusalC @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageRefusalContent(additionalBinaryDataProperties, internalRefusal, @type); } diff --git a/src/Generated/Models/InternalModerationCategories.Serialization.cs b/src/Generated/Models/InternalModerationCategories.Serialization.cs index f2979e342..f1cf80c42 100644 --- a/src/Generated/Models/InternalModerationCategories.Serialization.cs +++ b/src/Generated/Models/InternalModerationCategories.Serialization.cs @@ -96,7 +96,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("violence/graphic"u8); writer.WriteBooleanValue(ViolenceGraphic); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -217,10 +217,7 @@ internal static InternalModerationCategories DeserializeInternalModerationCatego violenceGraphic = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModerationCategories( hate, diff --git a/src/Generated/Models/InternalModerationCategoryScores.Serialization.cs b/src/Generated/Models/InternalModerationCategoryScores.Serialization.cs index 5ce3e2fbd..46badb7f8 100644 --- a/src/Generated/Models/InternalModerationCategoryScores.Serialization.cs +++ b/src/Generated/Models/InternalModerationCategoryScores.Serialization.cs @@ -96,7 +96,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("violence/graphic"u8); writer.WriteNumberValue(ViolenceGraphic); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -217,10 +217,7 @@ internal static InternalModerationCategoryScores DeserializeInternalModerationCa violenceGraphic = prop.Value.GetSingle(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModerationCategoryScores( hate, diff --git a/src/Generated/Models/InternalModifyAssistantRequestToolResources.Serialization.cs b/src/Generated/Models/InternalModifyAssistantRequestToolResources.Serialization.cs index b720134bc..0955b384b 100644 --- a/src/Generated/Models/InternalModifyAssistantRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalModifyAssistantRequestToolResources.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static InternalModifyAssistantRequestToolResources DeserializeInternalM fileSearch = InternalToolResourcesFileSearchIdsOnly.DeserializeInternalToolResourcesFileSearchIdsOnly(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModifyAssistantRequestToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs index 88bfe2b56..978cc3c4a 100644 --- a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalModifyAssistantRequestToolResourcesCodeInterpreter Deser fileIds = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModifyAssistantRequestToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs b/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs index 736a11320..3c01499f4 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static InternalModifyThreadRequestToolResources DeserializeInternalModi fileSearch = InternalToolResourcesFileSearchIdsOnly.DeserializeInternalToolResourcesFileSearchIdsOnly(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModifyThreadRequestToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs index 43462682f..58de40eb3 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalModifyThreadRequestToolResourcesCodeInterpreter Deserial fileIds = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModifyThreadRequestToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalOmniTypedResponseFormat.Serialization.cs b/src/Generated/Models/InternalOmniTypedResponseFormat.Serialization.cs index b2cdc55e3..2fdf94b48 100644 --- a/src/Generated/Models/InternalOmniTypedResponseFormat.Serialization.cs +++ b/src/Generated/Models/InternalOmniTypedResponseFormat.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/InternalRealtimeClientEvent.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEvent.Serialization.cs index 46b19f866..264d439dc 100644 --- a/src/Generated/Models/InternalRealtimeClientEvent.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEvent.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("event_id"u8); writer.WriteStringValue(EventId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.Serialization.cs index e3572ee2e..283fcfe37 100644 --- a/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.Serialization.cs @@ -90,10 +90,7 @@ internal static InternalRealtimeClientEventConversationItemCreate DeserializeInt item = ConversationItem.DeserializeConversationItem(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventConversationItemCreate(kind, eventId, additionalBinaryDataProperties, previousItemId, item); } diff --git a/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.Serialization.cs index ebe414f6f..299927753 100644 --- a/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.Serialization.cs @@ -79,10 +79,7 @@ internal static InternalRealtimeClientEventConversationItemDelete DeserializeInt itemId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventConversationItemDelete(kind, eventId, additionalBinaryDataProperties, itemId); } diff --git a/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.Serialization.cs index da934231d..472d16249 100644 --- a/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.Serialization.cs @@ -101,10 +101,7 @@ internal static InternalRealtimeClientEventConversationItemTruncate DeserializeI audioEndMs = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventConversationItemTruncate( kind, diff --git a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.Serialization.cs index de235c643..d6e048071 100644 --- a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.Serialization.cs @@ -79,10 +79,7 @@ internal static InternalRealtimeClientEventInputAudioBufferAppend DeserializeInt audio = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventInputAudioBufferAppend(kind, eventId, additionalBinaryDataProperties, audio); } diff --git a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.Serialization.cs index 7819cd1c2..773c850b9 100644 --- a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.Serialization.cs @@ -64,10 +64,7 @@ internal static InternalRealtimeClientEventInputAudioBufferClear DeserializeInte eventId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventInputAudioBufferClear(kind, eventId, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.Serialization.cs index 7d1f686e3..02658a229 100644 --- a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.Serialization.cs @@ -64,10 +64,7 @@ internal static InternalRealtimeClientEventInputAudioBufferCommit DeserializeInt eventId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventInputAudioBufferCommit(kind, eventId, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRealtimeClientEventResponseCancel.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventResponseCancel.Serialization.cs index 892c4cb6b..b3bfbd067 100644 --- a/src/Generated/Models/InternalRealtimeClientEventResponseCancel.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventResponseCancel.Serialization.cs @@ -75,10 +75,7 @@ internal static InternalRealtimeClientEventResponseCancel DeserializeInternalRea responseId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventResponseCancel(kind, eventId, additionalBinaryDataProperties, responseId); } diff --git a/src/Generated/Models/InternalRealtimeClientEventResponseCreate.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventResponseCreate.Serialization.cs index 66c7331e1..fcbe3d7ad 100644 --- a/src/Generated/Models/InternalRealtimeClientEventResponseCreate.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventResponseCreate.Serialization.cs @@ -79,10 +79,7 @@ internal static InternalRealtimeClientEventResponseCreate DeserializeInternalRea response = ConversationResponseOptions.DeserializeConversationResponseOptions(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventResponseCreate(kind, eventId, additionalBinaryDataProperties, response); } diff --git a/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.Serialization.cs index 18a9d1611..3fbb40a6c 100644 --- a/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.Serialization.cs @@ -79,10 +79,7 @@ internal static InternalRealtimeClientEventSessionUpdate DeserializeInternalReal session = ConversationSessionOptions.DeserializeConversationSessionOptions(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventSessionUpdate(kind, eventId, additionalBinaryDataProperties, session); } diff --git a/src/Generated/Models/InternalRealtimeConversationResponseItem.Serialization.cs b/src/Generated/Models/InternalRealtimeConversationResponseItem.Serialization.cs index 214e631d8..ae49f8109 100644 --- a/src/Generated/Models/InternalRealtimeConversationResponseItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeConversationResponseItem.Serialization.cs @@ -43,7 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("id") != true) { - if (Id != null) + if (Optional.IsDefined(Id)) { writer.WritePropertyName("id"u8); writer.WriteStringValue(Id); @@ -53,7 +53,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("id"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.Serialization.cs index 2b01e29e1..becafcca8 100644 --- a/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.Serialization.cs @@ -105,10 +105,7 @@ internal static InternalRealtimeRequestAssistantMessageItem DeserializeInternalR content = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeRequestAssistantMessageItem( @type, diff --git a/src/Generated/Models/InternalRealtimeRequestAudioContentPart.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestAudioContentPart.Serialization.cs index 1ca220773..717e79492 100644 --- a/src/Generated/Models/InternalRealtimeRequestAudioContentPart.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestAudioContentPart.Serialization.cs @@ -80,10 +80,7 @@ internal static InternalRealtimeRequestAudioContentPart DeserializeInternalRealt internalTranscriptValue = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeRequestAudioContentPart(kind, additionalBinaryDataProperties, @type, internalTranscriptValue); } diff --git a/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.Serialization.cs index 37fec87f7..0941a66dd 100644 --- a/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.Serialization.cs @@ -116,10 +116,7 @@ internal static InternalRealtimeRequestFunctionCallItem DeserializeInternalRealt status = new ConversationItemStatus(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeRequestFunctionCallItem( @type, diff --git a/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.Serialization.cs index f27e4810a..fd148021b 100644 --- a/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.Serialization.cs @@ -90,10 +90,7 @@ internal static InternalRealtimeRequestFunctionCallOutputItem DeserializeInterna output = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeRequestFunctionCallOutputItem(@type, id, additionalBinaryDataProperties, callId, output); } diff --git a/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.Serialization.cs index e6863613e..46c7d7a1b 100644 --- a/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.Serialization.cs @@ -105,10 +105,7 @@ internal static InternalRealtimeRequestSystemMessageItem DeserializeInternalReal content = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeRequestSystemMessageItem( @type, diff --git a/src/Generated/Models/InternalRealtimeRequestTextContentPart.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestTextContentPart.Serialization.cs index 2a1e7d277..082a74e2c 100644 --- a/src/Generated/Models/InternalRealtimeRequestTextContentPart.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestTextContentPart.Serialization.cs @@ -84,10 +84,7 @@ internal static InternalRealtimeRequestTextContentPart DeserializeInternalRealti internalTextValue = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeRequestTextContentPart(kind, additionalBinaryDataProperties, @type, internalTextValue); } diff --git a/src/Generated/Models/InternalRealtimeRequestUserMessageItem.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestUserMessageItem.Serialization.cs index 3728f9a62..9c01cdc3c 100644 --- a/src/Generated/Models/InternalRealtimeRequestUserMessageItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestUserMessageItem.Serialization.cs @@ -105,10 +105,7 @@ internal static InternalRealtimeRequestUserMessageItem DeserializeInternalRealti content = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeRequestUserMessageItem( @type, diff --git a/src/Generated/Models/InternalRealtimeResponse.Serialization.cs b/src/Generated/Models/InternalRealtimeResponse.Serialization.cs index 13872d7d6..1ca40fd68 100644 --- a/src/Generated/Models/InternalRealtimeResponse.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponse.Serialization.cs @@ -53,7 +53,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (Optional.IsCollectionDefined(Metadata)) { writer.WritePropertyName("metadata"u8); writer.WriteStartObject(); @@ -131,7 +131,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("output_audio_format"u8); writer.WriteStringValue(OutputAudioFormat.Value.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -319,10 +319,7 @@ internal static InternalRealtimeResponse DeserializeInternalRealtimeResponse(Jso outputAudioFormat = new ConversationAudioFormat(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponse( id, diff --git a/src/Generated/Models/InternalRealtimeResponseAudioContentPart.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseAudioContentPart.Serialization.cs index 5a598301e..60e114cb3 100644 --- a/src/Generated/Models/InternalRealtimeResponseAudioContentPart.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseAudioContentPart.Serialization.cs @@ -39,7 +39,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri } if (_additionalBinaryDataProperties?.ContainsKey("transcript") != true) { - if (InternalTranscriptValue != null) + if (Optional.IsDefined(InternalTranscriptValue)) { writer.WritePropertyName("transcript"u8); writer.WriteStringValue(InternalTranscriptValue); @@ -96,10 +96,7 @@ internal static InternalRealtimeResponseAudioContentPart DeserializeInternalReal internalTranscriptValue = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponseAudioContentPart(kind, additionalBinaryDataProperties, @type, internalTranscriptValue); } diff --git a/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.Serialization.cs index 5af5037d7..d5409e675 100644 --- a/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.Serialization.cs @@ -123,10 +123,7 @@ internal static InternalRealtimeResponseFunctionCallItem DeserializeInternalReal status = new ConversationItemStatus(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponseFunctionCallItem( @object, diff --git a/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.Serialization.cs index d7e539a5d..30e632d63 100644 --- a/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.Serialization.cs @@ -101,10 +101,7 @@ internal static InternalRealtimeResponseFunctionCallOutputItem DeserializeIntern output = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponseFunctionCallOutputItem( @object, diff --git a/src/Generated/Models/InternalRealtimeResponseMessageItem.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseMessageItem.Serialization.cs index d0fa51478..0292e134d 100644 --- a/src/Generated/Models/InternalRealtimeResponseMessageItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseMessageItem.Serialization.cs @@ -42,7 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri writer.WritePropertyName("role"u8); writer.WriteStringValue(Role.ToString()); } - if (true && _additionalBinaryDataProperties?.ContainsKey("content") != true) + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) { writer.WritePropertyName("content"u8); writer.WriteStartArray(); @@ -122,10 +122,7 @@ internal static InternalRealtimeResponseMessageItem DeserializeInternalRealtimeR content = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponseMessageItem( @object, diff --git a/src/Generated/Models/InternalRealtimeResponseSession.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseSession.Serialization.cs index 8b2c39d1c..55f5d0818 100644 --- a/src/Generated/Models/InternalRealtimeResponseSession.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseSession.Serialization.cs @@ -78,14 +78,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("input_audio_transcription") != true) { - if (InputAudioTranscription != null) + if (Optional.IsDefined(InputAudioTranscription)) { writer.WritePropertyName("input_audio_transcription"u8); writer.WriteObjectValue(InputAudioTranscription, options); } else { - writer.WriteNull("inputAudioTranscription"u8); + writer.WriteNull("input_audio_transcription"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("turn_detection") != true) @@ -93,7 +93,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("turn_detection"u8); writer.WriteObjectValue(TurnDetection, options); } - if (true && _additionalBinaryDataProperties?.ContainsKey("tools") != true) + if (_additionalBinaryDataProperties?.ContainsKey("tools") != true) { writer.WritePropertyName("tools"u8); writer.WriteStartArray(); @@ -122,7 +122,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("max_response_output_tokens") != true) { - if (_maxResponseOutputTokens != null) + if (Optional.IsDefined(_maxResponseOutputTokens)) { writer.WritePropertyName("max_response_output_tokens"u8); #if NET6_0_OR_GREATER @@ -136,10 +136,10 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } else { - writer.WriteNull("maxResponseOutputTokens"u8); + writer.WriteNull("max_response_output_tokens"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -286,10 +286,7 @@ internal static InternalRealtimeResponseSession DeserializeInternalRealtimeRespo maxResponseOutputTokens = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponseSession( @object, diff --git a/src/Generated/Models/InternalRealtimeResponseStatusDetailsError.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseStatusDetailsError.Serialization.cs index 897183a15..3c700dc24 100644 --- a/src/Generated/Models/InternalRealtimeResponseStatusDetailsError.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseStatusDetailsError.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("code"u8); writer.WriteStringValue(Code); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -92,10 +92,7 @@ internal static InternalRealtimeResponseStatusDetailsError DeserializeInternalRe code = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponseStatusDetailsError(@type, code, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRealtimeResponseTextContentPart.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseTextContentPart.Serialization.cs index bc533f6ba..d463cdcd0 100644 --- a/src/Generated/Models/InternalRealtimeResponseTextContentPart.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseTextContentPart.Serialization.cs @@ -84,10 +84,7 @@ internal static InternalRealtimeResponseTextContentPart DeserializeInternalRealt internalTextValue = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponseTextContentPart(kind, additionalBinaryDataProperties, @type, internalTextValue); } diff --git a/src/Generated/Models/InternalRealtimeServerEventConversationCreated.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventConversationCreated.Serialization.cs index 1703b7bb4..b58973e1e 100644 --- a/src/Generated/Models/InternalRealtimeServerEventConversationCreated.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventConversationCreated.Serialization.cs @@ -59,7 +59,7 @@ internal static InternalRealtimeServerEventConversationCreated DeserializeIntern return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRealtimeServerEventConversationCreatedConversation conversation = default; foreach (var prop in element.EnumerateObject()) @@ -79,10 +79,7 @@ internal static InternalRealtimeServerEventConversationCreated DeserializeIntern conversation = InternalRealtimeServerEventConversationCreatedConversation.DeserializeInternalRealtimeServerEventConversationCreatedConversation(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventConversationCreated(eventId, kind, additionalBinaryDataProperties, conversation); } diff --git a/src/Generated/Models/InternalRealtimeServerEventConversationCreated.cs b/src/Generated/Models/InternalRealtimeServerEventConversationCreated.cs index 7ab1726b1..f8af7f093 100644 --- a/src/Generated/Models/InternalRealtimeServerEventConversationCreated.cs +++ b/src/Generated/Models/InternalRealtimeServerEventConversationCreated.cs @@ -9,12 +9,12 @@ namespace OpenAI.RealtimeConversation { internal partial class InternalRealtimeServerEventConversationCreated : ConversationUpdate { - internal InternalRealtimeServerEventConversationCreated(string eventId, InternalRealtimeServerEventConversationCreatedConversation conversation) : base(eventId, RealtimeConversation.ConversationUpdateKind.ConversationCreated) + internal InternalRealtimeServerEventConversationCreated(string eventId, InternalRealtimeServerEventConversationCreatedConversation conversation) : base(eventId, ConversationUpdateKind.ConversationCreated) { Conversation = conversation; } - internal InternalRealtimeServerEventConversationCreated(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeServerEventConversationCreatedConversation conversation) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventConversationCreated(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeServerEventConversationCreatedConversation conversation) : base(eventId, kind, additionalBinaryDataProperties) { Conversation = conversation; } diff --git a/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.Serialization.cs index 8ece57ae1..87b84af7b 100644 --- a/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -92,10 +92,7 @@ internal static InternalRealtimeServerEventConversationCreatedConversation Deser @object = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventConversationCreatedConversation(id, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.Serialization.cs index be0d12086..c60f95601 100644 --- a/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.Serialization.cs @@ -47,7 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("param"u8); writer.WriteStringValue(Param); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -114,10 +114,7 @@ internal static InternalRealtimeServerEventConversationItemInputAudioTranscripti @param = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError(@type, code, message, @param, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRealtimeServerEventErrorError.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventErrorError.Serialization.cs index 6204d19b9..60f7f5341 100644 --- a/src/Generated/Models/InternalRealtimeServerEventErrorError.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventErrorError.Serialization.cs @@ -38,15 +38,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Code) && _additionalBinaryDataProperties?.ContainsKey("code") != true) { - if (Code != null) - { - writer.WritePropertyName("code"u8); - writer.WriteStringValue(Code); - } - else - { - writer.WriteNull("code"u8); - } + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code); } if (_additionalBinaryDataProperties?.ContainsKey("message") != true) { @@ -55,29 +48,15 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Param) && _additionalBinaryDataProperties?.ContainsKey("param") != true) { - if (Param != null) - { - writer.WritePropertyName("param"u8); - writer.WriteStringValue(Param); - } - else - { - writer.WriteNull("param"u8); - } + writer.WritePropertyName("param"u8); + writer.WriteStringValue(Param); } if (Optional.IsDefined(EventId) && _additionalBinaryDataProperties?.ContainsKey("event_id") != true) { - if (EventId != null) - { - writer.WritePropertyName("event_id"u8); - writer.WriteStringValue(EventId); - } - else - { - writer.WriteNull("eventId"u8); - } + writer.WritePropertyName("event_id"u8); + writer.WriteStringValue(EventId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -165,10 +144,7 @@ internal static InternalRealtimeServerEventErrorError DeserializeInternalRealtim eventId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventErrorError( @type, diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.Serialization.cs index 1628ee0f0..0ace35b82 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.Serialization.cs @@ -79,7 +79,7 @@ internal static InternalRealtimeServerEventResponseAudioDelta DeserializeInterna return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -123,10 +123,7 @@ internal static InternalRealtimeServerEventResponseAudioDelta DeserializeInterna delta = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseAudioDelta( eventId, diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.cs b/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.cs index 0008ec7db..da38f26b6 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { internal partial class InternalRealtimeServerEventResponseAudioDelta : ConversationUpdate { - internal InternalRealtimeServerEventResponseAudioDelta(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, BinaryData delta) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemStreamingPartAudioDelta) + internal InternalRealtimeServerEventResponseAudioDelta(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, BinaryData delta) : base(eventId, ConversationUpdateKind.ItemStreamingPartAudioDelta) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseAudioDelta(string eventId, string re Delta = delta; } - internal InternalRealtimeServerEventResponseAudioDelta(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, BinaryData delta) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseAudioDelta(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, BinaryData delta) : base(eventId, kind, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.Serialization.cs index 19f21c807..283fb7c21 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.Serialization.cs @@ -79,7 +79,7 @@ internal static InternalRealtimeServerEventResponseAudioTranscriptDelta Deserial return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -123,10 +123,7 @@ internal static InternalRealtimeServerEventResponseAudioTranscriptDelta Deserial delta = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseAudioTranscriptDelta( eventId, diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs b/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs index e85f7e786..b8291542b 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { internal partial class InternalRealtimeServerEventResponseAudioTranscriptDelta : ConversationUpdate { - internal InternalRealtimeServerEventResponseAudioTranscriptDelta(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemStreamingPartAudioTranscriptionDelta) + internal InternalRealtimeServerEventResponseAudioTranscriptDelta(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, ConversationUpdateKind.ItemStreamingPartAudioTranscriptionDelta) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseAudioTranscriptDelta(string eventId, Delta = delta; } - internal InternalRealtimeServerEventResponseAudioTranscriptDelta(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseAudioTranscriptDelta(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, kind, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.Serialization.cs index 8c138a43c..25d191b59 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.Serialization.cs @@ -55,7 +55,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("part") != true) { writer.WritePropertyName("part"u8); - writer.WriteObjectValue(_internalContentPart, options); + writer.WriteObjectValue(_internalContentPart, options); } } @@ -79,7 +79,7 @@ internal static InternalRealtimeServerEventResponseContentPartAdded DeserializeI return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -123,10 +123,7 @@ internal static InternalRealtimeServerEventResponseContentPartAdded DeserializeI internalContentPart = ConversationContentPart.DeserializeConversationContentPart(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseContentPartAdded( eventId, diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.cs b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.cs index 724642f3a..8dabfe0c1 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { internal partial class InternalRealtimeServerEventResponseContentPartAdded : ConversationUpdate { - internal InternalRealtimeServerEventResponseContentPartAdded(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemContentPartStarted) + internal InternalRealtimeServerEventResponseContentPartAdded(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, ConversationUpdateKind.ItemContentPartStarted) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseContentPartAdded(string eventId, str _internalContentPart = internalContentPart; } - internal InternalRealtimeServerEventResponseContentPartAdded(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseContentPartAdded(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, kind, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.Serialization.cs index 692b849de..ee6d9d37c 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.Serialization.cs @@ -55,7 +55,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("part") != true) { writer.WritePropertyName("part"u8); - writer.WriteObjectValue(_internalContentPart, options); + writer.WriteObjectValue(_internalContentPart, options); } } @@ -79,7 +79,7 @@ internal static InternalRealtimeServerEventResponseContentPartDone DeserializeIn return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -123,10 +123,7 @@ internal static InternalRealtimeServerEventResponseContentPartDone DeserializeIn internalContentPart = ConversationContentPart.DeserializeConversationContentPart(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseContentPartDone( eventId, diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.cs b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.cs index d54ce3321..427c1edbf 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { internal partial class InternalRealtimeServerEventResponseContentPartDone : ConversationUpdate { - internal InternalRealtimeServerEventResponseContentPartDone(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemContentPartFinished) + internal InternalRealtimeServerEventResponseContentPartDone(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, ConversationUpdateKind.ItemContentPartFinished) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseContentPartDone(string eventId, stri _internalContentPart = internalContentPart; } - internal InternalRealtimeServerEventResponseContentPartDone(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseContentPartDone(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, kind, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.Serialization.cs index 987eff1d5..3b5c63a2d 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.Serialization.cs @@ -79,7 +79,7 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDelta De return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -123,10 +123,7 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDelta De delta = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseFunctionCallArgumentsDelta( eventId, diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs index 8e3b5317c..f6db1190b 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDelta : ConversationUpdate { - internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta(string eventId, string responseId, string itemId, int outputIndex, string callId, string delta) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemStreamingFunctionCallArgumentsDelta) + internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta(string eventId, string responseId, string itemId, int outputIndex, string callId, string delta) : base(eventId, ConversationUpdateKind.ItemStreamingFunctionCallArgumentsDelta) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta(string ev Delta = delta; } - internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, string callId, string delta) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, string callId, string delta) : base(eventId, kind, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.Serialization.cs index 1e772c69c..32fbf675b 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.Serialization.cs @@ -79,7 +79,7 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDone Des return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -123,10 +123,7 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDone Des arguments = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseFunctionCallArgumentsDone( eventId, diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs index 4570d31ab..89697cf0b 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDone : ConversationUpdate { - internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone(string eventId, string responseId, string itemId, int outputIndex, string callId, string arguments) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemStreamingFunctionCallArgumentsFinished) + internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone(string eventId, string responseId, string itemId, int outputIndex, string callId, string arguments) : base(eventId, ConversationUpdateKind.ItemStreamingFunctionCallArgumentsFinished) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone(string eve Arguments = arguments; } - internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, string callId, string arguments) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, string callId, string arguments) : base(eventId, kind, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.Serialization.cs index 663b7a5e9..678735b63 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.Serialization.cs @@ -79,7 +79,7 @@ internal static InternalRealtimeServerEventResponseTextDelta DeserializeInternal return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -123,10 +123,7 @@ internal static InternalRealtimeServerEventResponseTextDelta DeserializeInternal delta = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseTextDelta( eventId, diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.cs b/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.cs index 533d2ac3c..b07162a8e 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { internal partial class InternalRealtimeServerEventResponseTextDelta : ConversationUpdate { - internal InternalRealtimeServerEventResponseTextDelta(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, RealtimeConversation.ConversationUpdateKind.ItemStreamingPartTextDelta) + internal InternalRealtimeServerEventResponseTextDelta(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, ConversationUpdateKind.ItemStreamingPartTextDelta) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseTextDelta(string eventId, string res Delta = delta; } - internal InternalRealtimeServerEventResponseTextDelta(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseTextDelta(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, kind, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerVadTurnDetection.Serialization.cs b/src/Generated/Models/InternalRealtimeServerVadTurnDetection.Serialization.cs index 6323d180b..6cf39a3f6 100644 --- a/src/Generated/Models/InternalRealtimeServerVadTurnDetection.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerVadTurnDetection.Serialization.cs @@ -36,12 +36,12 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (Optional.IsDefined(PrefixPaddingMs) && _additionalBinaryDataProperties?.ContainsKey("prefix_padding_ms") != true) { writer.WritePropertyName("prefix_padding_ms"u8); - this.SerializePrefixPaddingMs(writer, options); + SerializePrefixPaddingMs(writer, options); } if (Optional.IsDefined(SilenceDurationMs) && _additionalBinaryDataProperties?.ContainsKey("silence_duration_ms") != true) { writer.WritePropertyName("silence_duration_ms"u8); - this.SerializeSilenceDurationMs(writer, options); + SerializeSilenceDurationMs(writer, options); } if (Optional.IsDefined(CreateResponse) && _additionalBinaryDataProperties?.ContainsKey("create_response") != true) { @@ -69,7 +69,7 @@ internal static InternalRealtimeServerVadTurnDetection DeserializeInternalRealti { return null; } - RealtimeConversation.ConversationTurnDetectionKind kind = default; + ConversationTurnDetectionKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); float? threshold = default; TimeSpan? prefixPaddingMs = default; @@ -110,10 +110,7 @@ internal static InternalRealtimeServerVadTurnDetection DeserializeInternalRealti createResponse = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerVadTurnDetection( kind, diff --git a/src/Generated/Models/InternalRealtimeServerVadTurnDetection.cs b/src/Generated/Models/InternalRealtimeServerVadTurnDetection.cs index 6e89b9f0d..45c55b338 100644 --- a/src/Generated/Models/InternalRealtimeServerVadTurnDetection.cs +++ b/src/Generated/Models/InternalRealtimeServerVadTurnDetection.cs @@ -9,11 +9,11 @@ namespace OpenAI.RealtimeConversation { internal partial class InternalRealtimeServerVadTurnDetection : ConversationTurnDetectionOptions { - public InternalRealtimeServerVadTurnDetection() : base(RealtimeConversation.ConversationTurnDetectionKind.ServerVoiceActivityDetection) + public InternalRealtimeServerVadTurnDetection() : base(ConversationTurnDetectionKind.ServerVoiceActivityDetection) { } - internal InternalRealtimeServerVadTurnDetection(RealtimeConversation.ConversationTurnDetectionKind kind, IDictionary additionalBinaryDataProperties, float? threshold, TimeSpan? prefixPaddingMs, TimeSpan? silenceDurationMs, bool? createResponse) : base(kind, additionalBinaryDataProperties) + internal InternalRealtimeServerVadTurnDetection(ConversationTurnDetectionKind kind, IDictionary additionalBinaryDataProperties, float? threshold, TimeSpan? prefixPaddingMs, TimeSpan? silenceDurationMs, bool? createResponse) : base(kind, additionalBinaryDataProperties) { Threshold = threshold; PrefixPaddingMs = prefixPaddingMs; diff --git a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.Serialization.cs b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.Serialization.cs index ae7ba45e0..e507ae596 100644 --- a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.Serialization.cs @@ -73,10 +73,7 @@ internal static InternalRealtimeToolChoiceFunctionObject DeserializeInternalReal function = InternalRealtimeToolChoiceFunctionObjectFunction.DeserializeInternalRealtimeToolChoiceFunctionObjectFunction(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeToolChoiceFunctionObject(@type, additionalBinaryDataProperties, function); } diff --git a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.Serialization.cs b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.Serialization.cs index 14cea7729..f8cf9839d 100644 --- a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalRealtimeToolChoiceFunctionObjectFunction DeserializeInte name = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeToolChoiceFunctionObjectFunction(name, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRealtimeToolChoiceObject.Serialization.cs b/src/Generated/Models/InternalRealtimeToolChoiceObject.Serialization.cs index a35cb1d2a..94eb793fb 100644 --- a/src/Generated/Models/InternalRealtimeToolChoiceObject.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeToolChoiceObject.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/InternalRequestMessageTextContent.Serialization.cs b/src/Generated/Models/InternalRequestMessageTextContent.Serialization.cs index dbe004b80..56f4a890b 100644 --- a/src/Generated/Models/InternalRequestMessageTextContent.Serialization.cs +++ b/src/Generated/Models/InternalRequestMessageTextContent.Serialization.cs @@ -71,10 +71,7 @@ internal static InternalRequestMessageTextContent DeserializeInternalRequestMess internalText = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRequestMessageTextContent(additionalBinaryDataProperties, @type, internalText); } diff --git a/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs b/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs index b0d1cbb0b..32b715c74 100644 --- a/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs +++ b/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs @@ -44,9 +44,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("function") != true) { writer.WritePropertyName("function"u8); - writer.WriteObjectValue(_internalFunction, options); + writer.WriteObjectValue(_internalFunction, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalRequiredFunctionToolCall DeserializeInternalRequiredFunc internalFunction = InternalRunToolCallObjectFunction.DeserializeInternalRunToolCallObjectFunction(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRequiredFunctionToolCall(id, @type, internalFunction, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalResponseFormatJsonObject.Serialization.cs b/src/Generated/Models/InternalResponseFormatJsonObject.Serialization.cs index 42443b789..81e5f3afa 100644 --- a/src/Generated/Models/InternalResponseFormatJsonObject.Serialization.cs +++ b/src/Generated/Models/InternalResponseFormatJsonObject.Serialization.cs @@ -58,10 +58,7 @@ internal static InternalResponseFormatJsonObject DeserializeInternalResponseForm @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponseFormatJsonObject(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalResponseFormatJsonSchema.Serialization.cs b/src/Generated/Models/InternalResponseFormatJsonSchema.Serialization.cs index 67876ee47..153cfc475 100644 --- a/src/Generated/Models/InternalResponseFormatJsonSchema.Serialization.cs +++ b/src/Generated/Models/InternalResponseFormatJsonSchema.Serialization.cs @@ -73,10 +73,7 @@ internal static InternalResponseFormatJsonSchema DeserializeInternalResponseForm jsonSchema = InternalResponseFormatJsonSchemaJsonSchema.DeserializeInternalResponseFormatJsonSchemaJsonSchema(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponseFormatJsonSchema(@type, additionalBinaryDataProperties, jsonSchema); } diff --git a/src/Generated/Models/InternalResponseFormatJsonSchemaJsonSchema.Serialization.cs b/src/Generated/Models/InternalResponseFormatJsonSchemaJsonSchema.Serialization.cs index 39166704f..1da8001f5 100644 --- a/src/Generated/Models/InternalResponseFormatJsonSchemaJsonSchema.Serialization.cs +++ b/src/Generated/Models/InternalResponseFormatJsonSchemaJsonSchema.Serialization.cs @@ -43,15 +43,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Strict) && _additionalBinaryDataProperties?.ContainsKey("strict") != true) { - if (Strict != null) - { - writer.WritePropertyName("strict"u8); - writer.WriteBooleanValue(Strict.Value); - } - else - { - writer.WriteNull("strict"u8); - } + writer.WritePropertyName("strict"u8); + writer.WriteBooleanValue(Strict.Value); } if (Optional.IsDefined(Schema) && _additionalBinaryDataProperties?.ContainsKey("schema") != true) { @@ -65,7 +58,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -141,10 +134,7 @@ internal static InternalResponseFormatJsonSchemaJsonSchema DeserializeInternalRe schema = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponseFormatJsonSchemaJsonSchema(description, name, strict, schema, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalResponseFormatText.Serialization.cs b/src/Generated/Models/InternalResponseFormatText.Serialization.cs index 054bff834..1db285439 100644 --- a/src/Generated/Models/InternalResponseFormatText.Serialization.cs +++ b/src/Generated/Models/InternalResponseFormatText.Serialization.cs @@ -58,10 +58,7 @@ internal static InternalResponseFormatText DeserializeInternalResponseFormatText @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponseFormatText(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalResponseMessageTextContent.Serialization.cs b/src/Generated/Models/InternalResponseMessageTextContent.Serialization.cs index 8272d8d6b..23e9bef99 100644 --- a/src/Generated/Models/InternalResponseMessageTextContent.Serialization.cs +++ b/src/Generated/Models/InternalResponseMessageTextContent.Serialization.cs @@ -33,7 +33,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("text") != true) { writer.WritePropertyName("text"u8); - writer.WriteObjectValue(_text, options); + writer.WriteObjectValue(_text, options); } } @@ -71,10 +71,7 @@ internal static InternalResponseMessageTextContent DeserializeInternalResponseMe text = InternalMessageContentTextObjectText.DeserializeInternalMessageContentTextObjectText(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponseMessageTextContent(additionalBinaryDataProperties, @type, text); } diff --git a/src/Generated/Models/InternalResponsesAssistantMessage.Serialization.cs b/src/Generated/Models/InternalResponsesAssistantMessage.Serialization.cs new file mode 100644 index 000000000..ec332ed45 --- /dev/null +++ b/src/Generated/Models/InternalResponsesAssistantMessage.Serialization.cs @@ -0,0 +1,168 @@ +// + +#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 InternalResponsesAssistantMessage : IJsonModel + { + internal InternalResponsesAssistantMessage() + { + } + + 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(InternalResponsesAssistantMessage)} 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 InternalContent) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalResponsesAssistantMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesAssistantMessage)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(InternalResponsesAssistantMessage)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesAssistantMessage(document.RootElement, options); + } + + internal static InternalResponsesAssistantMessage DeserializeInternalResponsesAssistantMessage(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesItemType @type = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + MessageStatus? status = default; + MessageRole role = default; + IList internalContent = 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)) + { + role = new MessageRole(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)); + } + internalContent = array; + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesAssistantMessage( + @type, + id, + additionalBinaryDataProperties, + status, + role, + internalContent); + } + + 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(InternalResponsesAssistantMessage)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesAssistantMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesAssistantMessage)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 DeserializeInternalResponsesAssistantMessage(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesAssistantMessage)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..cbf583dc4 --- /dev/null +++ b/src/Generated/Models/InternalResponsesAssistantMessage.cs @@ -0,0 +1,19 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesAssistantMessage : MessageResponseItem + { + internal InternalResponsesAssistantMessage(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, MessageStatus? status, MessageRole role, IList internalContent) : base(@type, id, additionalBinaryDataProperties, status, role) + { + // Plugin customization: ensure initialization of collection + InternalContent = internalContent ?? new ChangeTrackingList(); + } + } +} diff --git a/src/Generated/Models/InternalResponsesComputerCallClickAction.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallClickAction.Serialization.cs new file mode 100644 index 000000000..794530bb1 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallClickAction.Serialization.cs @@ -0,0 +1,152 @@ +// + +#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 new file mode 100644 index 000000000..4c6d47fc3 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallClickAction.cs @@ -0,0 +1,32 @@ +// + +#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 new file mode 100644 index 000000000..bed61ef4d --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallDoubleClickAction.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 new file mode 100644 index 000000000..9b89f8dff --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallDoubleClickAction.cs @@ -0,0 +1,28 @@ +// + +#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 new file mode 100644 index 000000000..7ed1dfa05 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallDragAction.Serialization.cs @@ -0,0 +1,140 @@ +// + +#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 new file mode 100644 index 000000000..d66bcae1f --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallDragAction.cs @@ -0,0 +1,28 @@ +// + +#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 new file mode 100644 index 000000000..594d9d6de --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallDragActionPath.Serialization.cs @@ -0,0 +1,153 @@ +// + +#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 new file mode 100644 index 000000000..d276ac72f --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallDragActionPath.cs @@ -0,0 +1,37 @@ +// + +#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 new file mode 100644 index 000000000..0da95d3aa --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallKeyPressAction.Serialization.cs @@ -0,0 +1,152 @@ +// + +#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 new file mode 100644 index 000000000..5738f4c65 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallKeyPressAction.cs @@ -0,0 +1,28 @@ +// + +#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 new file mode 100644 index 000000000..9c676e7aa --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallMoveAction.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 new file mode 100644 index 000000000..ca63f8fe0 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallMoveAction.cs @@ -0,0 +1,28 @@ +// + +#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 new file mode 100644 index 000000000..3ec677dc4 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallOutputItemOutputType.cs @@ -0,0 +1,41 @@ +// + +#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 new file mode 100644 index 000000000..ffa1d7ecb --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallOutputItemScreenshot.Serialization.cs @@ -0,0 +1,137 @@ +// + +#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 new file mode 100644 index 000000000..2deb96c16 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallOutputItemScreenshot.cs @@ -0,0 +1,26 @@ +// + +#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 new file mode 100644 index 000000000..c59269115 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallScreenshotAction.Serialization.cs @@ -0,0 +1,115 @@ +// + +#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 new file mode 100644 index 000000000..926203c3a --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallScreenshotAction.cs @@ -0,0 +1,20 @@ +// + +#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 new file mode 100644 index 000000000..9214de0a2 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallScrollAction.Serialization.cs @@ -0,0 +1,169 @@ +// + +#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 new file mode 100644 index 000000000..3c0022158 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallScrollAction.cs @@ -0,0 +1,36 @@ +// + +#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 new file mode 100644 index 000000000..4dae924a8 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallTypeAction.Serialization.cs @@ -0,0 +1,130 @@ +// + +#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 new file mode 100644 index 000000000..8912d97b1 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallTypeAction.cs @@ -0,0 +1,27 @@ +// + +#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 new file mode 100644 index 000000000..8ecdf0425 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallWaitAction.Serialization.cs @@ -0,0 +1,115 @@ +// + +#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 new file mode 100644 index 000000000..59e65f0f7 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerCallWaitAction.cs @@ -0,0 +1,20 @@ +// + +#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 new file mode 100644 index 000000000..00df27015 --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerTool.Serialization.cs @@ -0,0 +1,152 @@ +// + +#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(); + float displayWidth = default; + float 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.GetSingle(); + continue; + } + if (prop.NameEquals("display_height"u8)) + { + displayHeight = prop.Value.GetSingle(); + 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 new file mode 100644 index 000000000..fc1390bbb --- /dev/null +++ b/src/Generated/Models/InternalResponsesComputerTool.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesComputerTool : ResponseTool + { + public InternalResponsesComputerTool(float displayWidth, float displayHeight, ComputerToolEnvironment environment) : base(InternalResponsesToolType.Computer) + { + DisplayWidth = displayWidth; + DisplayHeight = displayHeight; + Environment = environment; + } + + internal InternalResponsesComputerTool(InternalResponsesToolType @type, IDictionary additionalBinaryDataProperties, float displayWidth, float displayHeight, ComputerToolEnvironment environment) : base(@type, additionalBinaryDataProperties) + { + DisplayWidth = displayWidth; + DisplayHeight = displayHeight; + Environment = environment; + } + + public float DisplayWidth { get; set; } + + public float DisplayHeight { get; set; } + + public ComputerToolEnvironment Environment { get; set; } + } +} diff --git a/src/Generated/Models/InternalResponsesDeveloperMessage.Serialization.cs b/src/Generated/Models/InternalResponsesDeveloperMessage.Serialization.cs new file mode 100644 index 000000000..f7b01d354 --- /dev/null +++ b/src/Generated/Models/InternalResponsesDeveloperMessage.Serialization.cs @@ -0,0 +1,168 @@ +// + +#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 InternalResponsesDeveloperMessage : IJsonModel + { + internal InternalResponsesDeveloperMessage() + { + } + + 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(InternalResponsesDeveloperMessage)} 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 InternalContent) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalResponsesDeveloperMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesDeveloperMessage)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(InternalResponsesDeveloperMessage)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesDeveloperMessage(document.RootElement, options); + } + + internal static InternalResponsesDeveloperMessage DeserializeInternalResponsesDeveloperMessage(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesItemType @type = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + MessageStatus? status = default; + MessageRole role = default; + IList internalContent = 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)) + { + role = new MessageRole(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)); + } + internalContent = array; + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesDeveloperMessage( + @type, + id, + additionalBinaryDataProperties, + status, + role, + internalContent); + } + + 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(InternalResponsesDeveloperMessage)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesDeveloperMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesDeveloperMessage)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 DeserializeInternalResponsesDeveloperMessage(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesDeveloperMessage)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..cacf90f51 --- /dev/null +++ b/src/Generated/Models/InternalResponsesDeveloperMessage.cs @@ -0,0 +1,19 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesDeveloperMessage : MessageResponseItem + { + internal InternalResponsesDeveloperMessage(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, MessageStatus? status, MessageRole role, IList internalContent) : base(@type, id, additionalBinaryDataProperties, status, role) + { + // Plugin customization: ensure initialization of collection + InternalContent = internalContent ?? new ChangeTrackingList(); + } + } +} diff --git a/src/Generated/Models/InternalResponsesErrorResponse.Serialization.cs b/src/Generated/Models/InternalResponsesErrorResponse.Serialization.cs new file mode 100644 index 000000000..79a7545a8 --- /dev/null +++ b/src/Generated/Models/InternalResponsesErrorResponse.Serialization.cs @@ -0,0 +1,142 @@ +// + +#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 new file mode 100644 index 000000000..39df97347 --- /dev/null +++ b/src/Generated/Models/InternalResponsesErrorResponse.cs @@ -0,0 +1,33 @@ +// + +#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 new file mode 100644 index 000000000..47b4ecd20 --- /dev/null +++ b/src/Generated/Models/InternalResponsesFileSearchTool.Serialization.cs @@ -0,0 +1,210 @@ +// + +#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 new file mode 100644 index 000000000..61bc1ef01 --- /dev/null +++ b/src/Generated/Models/InternalResponsesFileSearchTool.cs @@ -0,0 +1,37 @@ +// + +#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 new file mode 100644 index 000000000..394d8a543 --- /dev/null +++ b/src/Generated/Models/InternalResponsesFunctionTool.Serialization.cs @@ -0,0 +1,176 @@ +// + +#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 new file mode 100644 index 000000000..2124c0bb9 --- /dev/null +++ b/src/Generated/Models/InternalResponsesFunctionTool.cs @@ -0,0 +1,41 @@ +// + +#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 new file mode 100644 index 000000000..19a58652c --- /dev/null +++ b/src/Generated/Models/InternalResponsesInputFileContentPart.Serialization.cs @@ -0,0 +1,159 @@ +// + +#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; + } + ResponseContentPartKind kind = 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)) + { + kind = prop.Value.GetString().ToResponseContentPartKind(); + 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(kind, 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 new file mode 100644 index 000000000..42bb1b4f9 --- /dev/null +++ b/src/Generated/Models/InternalResponsesInputFileContentPart.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesInputFileContentPart : ResponseContentPart + { + public InternalResponsesInputFileContentPart() : base(ResponseContentPartKind.InputFile) + { + } + + internal InternalResponsesInputFileContentPart(ResponseContentPartKind kind, IDictionary additionalBinaryDataProperties, string fileId, string filename, BinaryData fileBytes) : base(kind, 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 new file mode 100644 index 000000000..f8f9cd320 --- /dev/null +++ b/src/Generated/Models/InternalResponsesInputImageContentPart.Serialization.cs @@ -0,0 +1,152 @@ +// + +#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; + } + ResponseContentPartKind kind = 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)) + { + kind = prop.Value.GetString().ToResponseContentPartKind(); + 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(kind, 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 new file mode 100644 index 000000000..aa8395f82 --- /dev/null +++ b/src/Generated/Models/InternalResponsesInputImageContentPart.cs @@ -0,0 +1,29 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesInputImageContentPart : ResponseContentPart + { + public InternalResponsesInputImageContentPart() : base(ResponseContentPartKind.InputImage) + { + } + + internal InternalResponsesInputImageContentPart(ResponseContentPartKind kind, IDictionary additionalBinaryDataProperties, string imageUrl, string fileId, ResponseImageDetailLevel? detail) : base(kind, 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 new file mode 100644 index 000000000..7f6736d62 --- /dev/null +++ b/src/Generated/Models/InternalResponsesInputItemList.Serialization.cs @@ -0,0 +1,202 @@ +// + +#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 new file mode 100644 index 000000000..02b3a30ca --- /dev/null +++ b/src/Generated/Models/InternalResponsesInputItemList.cs @@ -0,0 +1,49 @@ +// + +#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 new file mode 100644 index 000000000..f9e140e66 --- /dev/null +++ b/src/Generated/Models/InternalResponsesInputItemListObject.cs @@ -0,0 +1,41 @@ +// + +#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 new file mode 100644 index 000000000..9d1081c9d --- /dev/null +++ b/src/Generated/Models/InternalResponsesInputTextContentPart.Serialization.cs @@ -0,0 +1,130 @@ +// + +#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; + } + ResponseContentPartKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string internalText = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToResponseContentPartKind(); + continue; + } + if (prop.NameEquals("text"u8)) + { + internalText = prop.Value.GetString(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesInputTextContentPart(kind, 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 new file mode 100644 index 000000000..c480d3d50 --- /dev/null +++ b/src/Generated/Models/InternalResponsesInputTextContentPart.cs @@ -0,0 +1,25 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesInputTextContentPart : ResponseContentPart + { + public InternalResponsesInputTextContentPart(string internalText) : base(ResponseContentPartKind.InputText) + { + Argument.AssertNotNull(internalText, nameof(internalText)); + + InternalText = internalText; + } + + internal InternalResponsesInputTextContentPart(ResponseContentPartKind kind, IDictionary additionalBinaryDataProperties, string internalText) : base(kind, additionalBinaryDataProperties) + { + InternalText = internalText; + } + } +} diff --git a/src/Generated/Models/InternalResponsesItemType.cs b/src/Generated/Models/InternalResponsesItemType.cs new file mode 100644 index 000000000..b13f1c046 --- /dev/null +++ b/src/Generated/Models/InternalResponsesItemType.cs @@ -0,0 +1,65 @@ +// + +#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 new file mode 100644 index 000000000..16621b2b3 --- /dev/null +++ b/src/Generated/Models/InternalResponsesMessageAnnotationFileCitation.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 new file mode 100644 index 000000000..9e3625649 --- /dev/null +++ b/src/Generated/Models/InternalResponsesMessageAnnotationFileCitation.cs @@ -0,0 +1,31 @@ +// + +#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 new file mode 100644 index 000000000..dcfa45e7a --- /dev/null +++ b/src/Generated/Models/InternalResponsesMessageAnnotationFilePath.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 new file mode 100644 index 000000000..f9a52ba64 --- /dev/null +++ b/src/Generated/Models/InternalResponsesMessageAnnotationFilePath.cs @@ -0,0 +1,31 @@ +// + +#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 new file mode 100644 index 000000000..27c5eb2b6 --- /dev/null +++ b/src/Generated/Models/InternalResponsesMessageAnnotationUrlCitation.Serialization.cs @@ -0,0 +1,169 @@ +// + +#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 new file mode 100644 index 000000000..11e2c5c7f --- /dev/null +++ b/src/Generated/Models/InternalResponsesMessageAnnotationUrlCitation.cs @@ -0,0 +1,40 @@ +// + +#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/InternalResponsesOutputRefusalContentPart.Serialization.cs b/src/Generated/Models/InternalResponsesOutputRefusalContentPart.Serialization.cs new file mode 100644 index 000000000..1561515c5 --- /dev/null +++ b/src/Generated/Models/InternalResponsesOutputRefusalContentPart.Serialization.cs @@ -0,0 +1,130 @@ +// + +#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; + } + ResponseContentPartKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string internalRefusal = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToResponseContentPartKind(); + continue; + } + if (prop.NameEquals("refusal"u8)) + { + internalRefusal = prop.Value.GetString(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesOutputRefusalContentPart(kind, 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 new file mode 100644 index 000000000..7107b7b06 --- /dev/null +++ b/src/Generated/Models/InternalResponsesOutputRefusalContentPart.cs @@ -0,0 +1,25 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesOutputRefusalContentPart : ResponseContentPart + { + public InternalResponsesOutputRefusalContentPart(string internalRefusal) : base(ResponseContentPartKind.Refusal) + { + Argument.AssertNotNull(internalRefusal, nameof(internalRefusal)); + + InternalRefusal = internalRefusal; + } + + internal InternalResponsesOutputRefusalContentPart(ResponseContentPartKind kind, IDictionary additionalBinaryDataProperties, string internalRefusal) : base(kind, additionalBinaryDataProperties) + { + InternalRefusal = internalRefusal; + } + } +} diff --git a/src/Generated/Models/InternalResponsesOutputTextContentPart.Serialization.cs b/src/Generated/Models/InternalResponsesOutputTextContentPart.Serialization.cs new file mode 100644 index 000000000..d30c8743d --- /dev/null +++ b/src/Generated/Models/InternalResponsesOutputTextContentPart.Serialization.cs @@ -0,0 +1,151 @@ +// + +#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; + } + ResponseContentPartKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IList annotations = default; + string internalText = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToResponseContentPartKind(); + 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(kind, 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 new file mode 100644 index 000000000..2af6df912 --- /dev/null +++ b/src/Generated/Models/InternalResponsesOutputTextContentPart.cs @@ -0,0 +1,31 @@ +// + +#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(ResponseContentPartKind.OutputText) + { + Argument.AssertNotNull(annotations, nameof(annotations)); + Argument.AssertNotNull(internalText, nameof(internalText)); + + Annotations = annotations.ToList(); + InternalText = internalText; + } + + internal InternalResponsesOutputTextContentPart(ResponseContentPartKind kind, IDictionary additionalBinaryDataProperties, IList annotations, string internalText) : base(kind, 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 new file mode 100644 index 000000000..d5d841c52 --- /dev/null +++ b/src/Generated/Models/InternalResponsesReasoningItemSummaryElement.Serialization.cs @@ -0,0 +1,139 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + [PersistableModelProxy(typeof(UnknownResponsesReasoningItemSummaryElement))] + 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 UnknownResponsesReasoningItemSummaryElement.DeserializeUnknownResponsesReasoningItemSummaryElement(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 new file mode 100644 index 000000000..5f9fd9191 --- /dev/null +++ b/src/Generated/Models/InternalResponsesReasoningItemSummaryElement.cs @@ -0,0 +1,33 @@ +// + +#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 new file mode 100644 index 000000000..f9aade9bf --- /dev/null +++ b/src/Generated/Models/InternalResponsesReasoningItemSummaryElementSummaryText.Serialization.cs @@ -0,0 +1,130 @@ +// + +#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 new file mode 100644 index 000000000..7fde14ca1 --- /dev/null +++ b/src/Generated/Models/InternalResponsesReasoningItemSummaryElementSummaryText.cs @@ -0,0 +1,27 @@ +// + +#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 new file mode 100644 index 000000000..4f337b26e --- /dev/null +++ b/src/Generated/Models/InternalResponsesReasoningItemSummaryType.cs @@ -0,0 +1,41 @@ +// + +#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/InternalResponsesResponseStreamEventResponseCompleted.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseCompleted.Serialization.cs new file mode 100644 index 000000000..738ca4a0f --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseCompleted.Serialization.cs @@ -0,0 +1,130 @@ +// + +#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 InternalResponsesResponseStreamEventResponseCompleted : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseCompleted() + { + } + + 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(InternalResponsesResponseStreamEventResponseCompleted)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response") != true) + { + writer.WritePropertyName("response"u8); + writer.WriteObjectValue(Response, options); + } + } + + InternalResponsesResponseStreamEventResponseCompleted IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseCompleted)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(InternalResponsesResponseStreamEventResponseCompleted)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseCompleted(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseCompleted DeserializeInternalResponsesResponseStreamEventResponseCompleted(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + OpenAIResponse response = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("response"u8)) + { + response = OpenAIResponse.DeserializeOpenAIResponse(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseCompleted(kind, additionalBinaryDataProperties, response); + } + + 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(InternalResponsesResponseStreamEventResponseCompleted)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseCompleted IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseCompleted)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 DeserializeInternalResponsesResponseStreamEventResponseCompleted(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseCompleted)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseCompleted internalResponsesResponseStreamEventResponseCompleted) + { + if (internalResponsesResponseStreamEventResponseCompleted == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseCompleted, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseCompleted(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseCompleted(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseCompleted.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseCompleted.cs new file mode 100644 index 000000000..6d2cc50a8 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseCompleted.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseCompleted : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseCompleted(OpenAIResponse response) : base(StreamingResponseUpdateKind.ResponseCompleted) + { + Response = response; + } + + internal InternalResponsesResponseStreamEventResponseCompleted(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(kind, additionalBinaryDataProperties) + { + Response = response; + } + + public OpenAIResponse Response { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartAdded.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartAdded.Serialization.cs new file mode 100644 index 000000000..574f80edc --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartAdded.Serialization.cs @@ -0,0 +1,169 @@ +// + +#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 InternalResponsesResponseStreamEventResponseContentPartAdded : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseContentPartAdded() + { + } + + 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(InternalResponsesResponseStreamEventResponseContentPartAdded)} 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("part") != true) + { + writer.WritePropertyName("part"u8); + writer.WriteObjectValue(Part, options); + } + } + + InternalResponsesResponseStreamEventResponseContentPartAdded IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseContentPartAdded)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(InternalResponsesResponseStreamEventResponseContentPartAdded)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseContentPartAdded(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseContentPartAdded DeserializeInternalResponsesResponseStreamEventResponseContentPartAdded(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int contentIndex = default; + ResponseContentPart part = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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("part"u8)) + { + part = ResponseContentPart.DeserializeResponseContentPart(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseContentPartAdded( + kind, + additionalBinaryDataProperties, + itemId, + outputIndex, + contentIndex, + part); + } + + 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(InternalResponsesResponseStreamEventResponseContentPartAdded)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseContentPartAdded IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseContentPartAdded)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 DeserializeInternalResponsesResponseStreamEventResponseContentPartAdded(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseContentPartAdded)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseContentPartAdded internalResponsesResponseStreamEventResponseContentPartAdded) + { + if (internalResponsesResponseStreamEventResponseContentPartAdded == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseContentPartAdded, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseContentPartAdded(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseContentPartAdded(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartAdded.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartAdded.cs new file mode 100644 index 000000000..6d2045351 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartAdded.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseContentPartAdded : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseContentPartAdded(string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(StreamingResponseUpdateKind.ResponseContentPartAdded) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Part = part; + } + + internal InternalResponsesResponseStreamEventResponseContentPartAdded(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Part = part; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int ContentIndex { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartDone.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartDone.Serialization.cs new file mode 100644 index 000000000..8ba55fd59 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartDone.Serialization.cs @@ -0,0 +1,169 @@ +// + +#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 InternalResponsesResponseStreamEventResponseContentPartDone : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseContentPartDone() + { + } + + 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(InternalResponsesResponseStreamEventResponseContentPartDone)} 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("part") != true) + { + writer.WritePropertyName("part"u8); + writer.WriteObjectValue(Part, options); + } + } + + InternalResponsesResponseStreamEventResponseContentPartDone IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseContentPartDone)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(InternalResponsesResponseStreamEventResponseContentPartDone)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseContentPartDone(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseContentPartDone DeserializeInternalResponsesResponseStreamEventResponseContentPartDone(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int contentIndex = default; + ResponseContentPart part = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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("part"u8)) + { + part = ResponseContentPart.DeserializeResponseContentPart(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseContentPartDone( + kind, + additionalBinaryDataProperties, + itemId, + outputIndex, + contentIndex, + part); + } + + 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(InternalResponsesResponseStreamEventResponseContentPartDone)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseContentPartDone IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseContentPartDone)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 DeserializeInternalResponsesResponseStreamEventResponseContentPartDone(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseContentPartDone)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseContentPartDone internalResponsesResponseStreamEventResponseContentPartDone) + { + if (internalResponsesResponseStreamEventResponseContentPartDone == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseContentPartDone, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseContentPartDone(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseContentPartDone(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartDone.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartDone.cs new file mode 100644 index 000000000..b244c6c39 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseContentPartDone.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseContentPartDone : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseContentPartDone(string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(StreamingResponseUpdateKind.ResponseContentPartDone) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Part = part; + } + + internal InternalResponsesResponseStreamEventResponseContentPartDone(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Part = part; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int ContentIndex { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseCreated.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseCreated.Serialization.cs new file mode 100644 index 000000000..f009a5cf8 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseCreated.Serialization.cs @@ -0,0 +1,130 @@ +// + +#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 InternalResponsesResponseStreamEventResponseCreated : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseCreated() + { + } + + 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(InternalResponsesResponseStreamEventResponseCreated)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response") != true) + { + writer.WritePropertyName("response"u8); + writer.WriteObjectValue(Response, options); + } + } + + InternalResponsesResponseStreamEventResponseCreated IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseCreated)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(InternalResponsesResponseStreamEventResponseCreated)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseCreated(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseCreated DeserializeInternalResponsesResponseStreamEventResponseCreated(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + OpenAIResponse response = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("response"u8)) + { + response = OpenAIResponse.DeserializeOpenAIResponse(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseCreated(kind, additionalBinaryDataProperties, response); + } + + 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(InternalResponsesResponseStreamEventResponseCreated)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseCreated IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseCreated)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 DeserializeInternalResponsesResponseStreamEventResponseCreated(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseCreated)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseCreated internalResponsesResponseStreamEventResponseCreated) + { + if (internalResponsesResponseStreamEventResponseCreated == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseCreated, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseCreated(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseCreated(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseCreated.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseCreated.cs new file mode 100644 index 000000000..0aaf6b4f3 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseCreated.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseCreated : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseCreated(OpenAIResponse response) : base(StreamingResponseUpdateKind.ResponseCreated) + { + Response = response; + } + + internal InternalResponsesResponseStreamEventResponseCreated(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(kind, additionalBinaryDataProperties) + { + Response = response; + } + + public OpenAIResponse Response { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFailed.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFailed.Serialization.cs new file mode 100644 index 000000000..0206d7158 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFailed.Serialization.cs @@ -0,0 +1,130 @@ +// + +#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 InternalResponsesResponseStreamEventResponseFailed : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseFailed() + { + } + + 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(InternalResponsesResponseStreamEventResponseFailed)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response") != true) + { + writer.WritePropertyName("response"u8); + writer.WriteObjectValue(Response, options); + } + } + + InternalResponsesResponseStreamEventResponseFailed IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFailed)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(InternalResponsesResponseStreamEventResponseFailed)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseFailed(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseFailed DeserializeInternalResponsesResponseStreamEventResponseFailed(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + OpenAIResponse response = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("response"u8)) + { + response = OpenAIResponse.DeserializeOpenAIResponse(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseFailed(kind, additionalBinaryDataProperties, response); + } + + 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(InternalResponsesResponseStreamEventResponseFailed)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseFailed IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFailed)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 DeserializeInternalResponsesResponseStreamEventResponseFailed(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseFailed)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseFailed internalResponsesResponseStreamEventResponseFailed) + { + if (internalResponsesResponseStreamEventResponseFailed == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseFailed, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseFailed(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseFailed(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFailed.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFailed.cs new file mode 100644 index 000000000..f677f686c --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFailed.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseFailed : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseFailed(OpenAIResponse response) : base(StreamingResponseUpdateKind.ResponseFailed) + { + Response = response; + } + + internal InternalResponsesResponseStreamEventResponseFailed(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(kind, additionalBinaryDataProperties) + { + Response = response; + } + + public OpenAIResponse Response { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallCompleted.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallCompleted.Serialization.cs new file mode 100644 index 000000000..16d6c319c --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallCompleted.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 InternalResponsesResponseStreamEventResponseFileSearchCallCompleted : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseFileSearchCallCompleted() + { + } + + 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(InternalResponsesResponseStreamEventResponseFileSearchCallCompleted)} 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); + } + } + + InternalResponsesResponseStreamEventResponseFileSearchCallCompleted IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFileSearchCallCompleted)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(InternalResponsesResponseStreamEventResponseFileSearchCallCompleted)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallCompleted(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseFileSearchCallCompleted DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallCompleted(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseFileSearchCallCompleted(kind, additionalBinaryDataProperties, itemId, outputIndex); + } + + 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(InternalResponsesResponseStreamEventResponseFileSearchCallCompleted)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseFileSearchCallCompleted IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFileSearchCallCompleted)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 DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallCompleted(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseFileSearchCallCompleted)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseFileSearchCallCompleted internalResponsesResponseStreamEventResponseFileSearchCallCompleted) + { + if (internalResponsesResponseStreamEventResponseFileSearchCallCompleted == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseFileSearchCallCompleted, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseFileSearchCallCompleted(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallCompleted(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallCompleted.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallCompleted.cs new file mode 100644 index 000000000..1a4d55f74 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallCompleted.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseFileSearchCallCompleted : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseFileSearchCallCompleted(string itemId, int outputIndex) : base(StreamingResponseUpdateKind.ResponseFileSearchCallCompleted) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + internal InternalResponsesResponseStreamEventResponseFileSearchCallCompleted(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallInProgress.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallInProgress.Serialization.cs new file mode 100644 index 000000000..2f60938c7 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallInProgress.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 InternalResponsesResponseStreamEventResponseFileSearchCallInProgress : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseFileSearchCallInProgress() + { + } + + 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(InternalResponsesResponseStreamEventResponseFileSearchCallInProgress)} 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); + } + } + + InternalResponsesResponseStreamEventResponseFileSearchCallInProgress IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFileSearchCallInProgress)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(InternalResponsesResponseStreamEventResponseFileSearchCallInProgress)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallInProgress(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseFileSearchCallInProgress DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallInProgress(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseFileSearchCallInProgress(kind, additionalBinaryDataProperties, itemId, outputIndex); + } + + 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(InternalResponsesResponseStreamEventResponseFileSearchCallInProgress)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseFileSearchCallInProgress IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFileSearchCallInProgress)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 DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallInProgress(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseFileSearchCallInProgress)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseFileSearchCallInProgress internalResponsesResponseStreamEventResponseFileSearchCallInProgress) + { + if (internalResponsesResponseStreamEventResponseFileSearchCallInProgress == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseFileSearchCallInProgress, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseFileSearchCallInProgress(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallInProgress(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallInProgress.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallInProgress.cs new file mode 100644 index 000000000..087397506 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallInProgress.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseFileSearchCallInProgress : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseFileSearchCallInProgress(string itemId, int outputIndex) : base(StreamingResponseUpdateKind.ResponseFileSearchCallInProgress) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + internal InternalResponsesResponseStreamEventResponseFileSearchCallInProgress(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallSearching.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallSearching.Serialization.cs new file mode 100644 index 000000000..28cc75730 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallSearching.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 InternalResponsesResponseStreamEventResponseFileSearchCallSearching : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseFileSearchCallSearching() + { + } + + 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(InternalResponsesResponseStreamEventResponseFileSearchCallSearching)} 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); + } + } + + InternalResponsesResponseStreamEventResponseFileSearchCallSearching IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFileSearchCallSearching)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(InternalResponsesResponseStreamEventResponseFileSearchCallSearching)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallSearching(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseFileSearchCallSearching DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallSearching(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseFileSearchCallSearching(kind, additionalBinaryDataProperties, itemId, outputIndex); + } + + 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(InternalResponsesResponseStreamEventResponseFileSearchCallSearching)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseFileSearchCallSearching IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFileSearchCallSearching)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 DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallSearching(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseFileSearchCallSearching)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseFileSearchCallSearching internalResponsesResponseStreamEventResponseFileSearchCallSearching) + { + if (internalResponsesResponseStreamEventResponseFileSearchCallSearching == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseFileSearchCallSearching, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseFileSearchCallSearching(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallSearching(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallSearching.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallSearching.cs new file mode 100644 index 000000000..3f173ae73 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFileSearchCallSearching.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseFileSearchCallSearching : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseFileSearchCallSearching(string itemId, int outputIndex) : base(StreamingResponseUpdateKind.ResponseFileSearchCallSearching) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + internal InternalResponsesResponseStreamEventResponseFileSearchCallSearching(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta.Serialization.cs new file mode 100644 index 000000000..12f407045 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta.Serialization.cs @@ -0,0 +1,152 @@ +// + +#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 InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta() + { + } + + 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(InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta)} 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("delta") != true) + { + writer.WritePropertyName("delta"u8); + writer.WriteStringValue(Delta); + } + } + + InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta)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(InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta DeserializeInternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + string delta = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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("delta"u8)) + { + delta = prop.Value.GetString(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta(kind, additionalBinaryDataProperties, itemId, outputIndex, delta); + } + + 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(InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta)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 DeserializeInternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta internalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta) + { + if (internalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta.cs new file mode 100644 index 000000000..81e5ca120 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta(string itemId, int outputIndex, string delta) : base(StreamingResponseUpdateKind.ResponseFunctionCallArgumentsDelta) + { + ItemId = itemId; + OutputIndex = outputIndex; + Delta = delta; + } + + internal InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, string delta) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + Delta = delta; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public string Delta { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone.Serialization.cs new file mode 100644 index 000000000..b3d7d407b --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone.Serialization.cs @@ -0,0 +1,152 @@ +// + +#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 InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone() + { + } + + 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(InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone)} 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("arguments") != true) + { + writer.WritePropertyName("arguments"u8); + writer.WriteStringValue(Arguments); + } + } + + InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone)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(InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone DeserializeInternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + string arguments = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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("arguments"u8)) + { + arguments = prop.Value.GetString(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone(kind, additionalBinaryDataProperties, itemId, outputIndex, arguments); + } + + 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(InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone)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 DeserializeInternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone internalResponsesResponseStreamEventResponseFunctionCallArgumentsDone) + { + if (internalResponsesResponseStreamEventResponseFunctionCallArgumentsDone == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseFunctionCallArgumentsDone, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone.cs new file mode 100644 index 000000000..13cba08b7 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone(string itemId, int outputIndex, string arguments) : base(StreamingResponseUpdateKind.ResponseFunctionCallArgumentsDone) + { + ItemId = itemId; + OutputIndex = outputIndex; + Arguments = arguments; + } + + internal InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, string arguments) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + Arguments = arguments; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public string Arguments { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseInProgress.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseInProgress.Serialization.cs new file mode 100644 index 000000000..006043d77 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseInProgress.Serialization.cs @@ -0,0 +1,130 @@ +// + +#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 InternalResponsesResponseStreamEventResponseInProgress : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseInProgress() + { + } + + 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(InternalResponsesResponseStreamEventResponseInProgress)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response") != true) + { + writer.WritePropertyName("response"u8); + writer.WriteObjectValue(Response, options); + } + } + + InternalResponsesResponseStreamEventResponseInProgress IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseInProgress)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(InternalResponsesResponseStreamEventResponseInProgress)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseInProgress(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseInProgress DeserializeInternalResponsesResponseStreamEventResponseInProgress(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + OpenAIResponse response = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("response"u8)) + { + response = OpenAIResponse.DeserializeOpenAIResponse(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseInProgress(kind, additionalBinaryDataProperties, response); + } + + 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(InternalResponsesResponseStreamEventResponseInProgress)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseInProgress IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseInProgress)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 DeserializeInternalResponsesResponseStreamEventResponseInProgress(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseInProgress)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseInProgress internalResponsesResponseStreamEventResponseInProgress) + { + if (internalResponsesResponseStreamEventResponseInProgress == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseInProgress, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseInProgress(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseInProgress(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseInProgress.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseInProgress.cs new file mode 100644 index 000000000..e6a2866bc --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseInProgress.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseInProgress : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseInProgress(OpenAIResponse response) : base(StreamingResponseUpdateKind.ResponseInProgress) + { + Response = response; + } + + internal InternalResponsesResponseStreamEventResponseInProgress(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(kind, additionalBinaryDataProperties) + { + Response = response; + } + + public OpenAIResponse Response { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseIncomplete.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseIncomplete.Serialization.cs new file mode 100644 index 000000000..be1e8ce82 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseIncomplete.Serialization.cs @@ -0,0 +1,130 @@ +// + +#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 InternalResponsesResponseStreamEventResponseIncomplete : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseIncomplete() + { + } + + 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(InternalResponsesResponseStreamEventResponseIncomplete)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response") != true) + { + writer.WritePropertyName("response"u8); + writer.WriteObjectValue(Response, options); + } + } + + InternalResponsesResponseStreamEventResponseIncomplete IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseIncomplete)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(InternalResponsesResponseStreamEventResponseIncomplete)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseIncomplete(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseIncomplete DeserializeInternalResponsesResponseStreamEventResponseIncomplete(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + OpenAIResponse response = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("response"u8)) + { + response = OpenAIResponse.DeserializeOpenAIResponse(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseIncomplete(kind, additionalBinaryDataProperties, response); + } + + 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(InternalResponsesResponseStreamEventResponseIncomplete)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseIncomplete IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseIncomplete)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 DeserializeInternalResponsesResponseStreamEventResponseIncomplete(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseIncomplete)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseIncomplete internalResponsesResponseStreamEventResponseIncomplete) + { + if (internalResponsesResponseStreamEventResponseIncomplete == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseIncomplete, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseIncomplete(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseIncomplete(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseIncomplete.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseIncomplete.cs new file mode 100644 index 000000000..4a1809a57 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseIncomplete.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseIncomplete : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseIncomplete(OpenAIResponse response) : base(StreamingResponseUpdateKind.ResponseIncomplete) + { + Response = response; + } + + internal InternalResponsesResponseStreamEventResponseIncomplete(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(kind, additionalBinaryDataProperties) + { + Response = response; + } + + public OpenAIResponse Response { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemAdded.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemAdded.Serialization.cs new file mode 100644 index 000000000..87911a394 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemAdded.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 InternalResponsesResponseStreamEventResponseOutputItemAdded : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseOutputItemAdded() + { + } + + 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(InternalResponsesResponseStreamEventResponseOutputItemAdded)} 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") != true) + { + writer.WritePropertyName("item"u8); + writer.WriteObjectValue(Item, options); + } + } + + InternalResponsesResponseStreamEventResponseOutputItemAdded IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseOutputItemAdded)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(InternalResponsesResponseStreamEventResponseOutputItemAdded)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseOutputItemAdded(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseOutputItemAdded DeserializeInternalResponsesResponseStreamEventResponseOutputItemAdded(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + ResponseItem item = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item"u8)) + { + item = ResponseItem.DeserializeResponseItem(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseOutputItemAdded(kind, additionalBinaryDataProperties, outputIndex, item); + } + + 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(InternalResponsesResponseStreamEventResponseOutputItemAdded)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseOutputItemAdded IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseOutputItemAdded)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 DeserializeInternalResponsesResponseStreamEventResponseOutputItemAdded(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseOutputItemAdded)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseOutputItemAdded internalResponsesResponseStreamEventResponseOutputItemAdded) + { + if (internalResponsesResponseStreamEventResponseOutputItemAdded == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseOutputItemAdded, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseOutputItemAdded(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseOutputItemAdded(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemAdded.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemAdded.cs new file mode 100644 index 000000000..b474694eb --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemAdded.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseOutputItemAdded : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseOutputItemAdded(int outputIndex, ResponseItem item) : base(StreamingResponseUpdateKind.ResponseOutputItemAdded) + { + OutputIndex = outputIndex; + Item = item; + } + + internal InternalResponsesResponseStreamEventResponseOutputItemAdded(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, int outputIndex, ResponseItem item) : base(kind, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + Item = item; + } + + public int OutputIndex { get; } + + public ResponseItem Item { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemDone.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemDone.Serialization.cs new file mode 100644 index 000000000..1751f53f1 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemDone.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 InternalResponsesResponseStreamEventResponseOutputItemDone : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseOutputItemDone() + { + } + + 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(InternalResponsesResponseStreamEventResponseOutputItemDone)} 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") != true) + { + writer.WritePropertyName("item"u8); + writer.WriteObjectValue(Item, options); + } + } + + InternalResponsesResponseStreamEventResponseOutputItemDone IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseOutputItemDone)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(InternalResponsesResponseStreamEventResponseOutputItemDone)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseOutputItemDone(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseOutputItemDone DeserializeInternalResponsesResponseStreamEventResponseOutputItemDone(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + ResponseItem item = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item"u8)) + { + item = ResponseItem.DeserializeResponseItem(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseOutputItemDone(kind, additionalBinaryDataProperties, outputIndex, item); + } + + 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(InternalResponsesResponseStreamEventResponseOutputItemDone)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseOutputItemDone IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseOutputItemDone)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 DeserializeInternalResponsesResponseStreamEventResponseOutputItemDone(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseOutputItemDone)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseOutputItemDone internalResponsesResponseStreamEventResponseOutputItemDone) + { + if (internalResponsesResponseStreamEventResponseOutputItemDone == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseOutputItemDone, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseOutputItemDone(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseOutputItemDone(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemDone.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemDone.cs new file mode 100644 index 000000000..2b9753143 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputItemDone.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseOutputItemDone : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseOutputItemDone(int outputIndex, ResponseItem item) : base(StreamingResponseUpdateKind.ResponseOutputItemDone) + { + OutputIndex = outputIndex; + Item = item; + } + + internal InternalResponsesResponseStreamEventResponseOutputItemDone(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, int outputIndex, ResponseItem item) : base(kind, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + Item = item; + } + + public int OutputIndex { get; } + + public ResponseItem Item { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDelta.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDelta.Serialization.cs new file mode 100644 index 000000000..1dfc65ff3 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDelta.Serialization.cs @@ -0,0 +1,169 @@ +// + +#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 InternalResponsesResponseStreamEventResponseOutputTextDelta : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseOutputTextDelta() + { + } + + 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(InternalResponsesResponseStreamEventResponseOutputTextDelta)} 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); + writer.WriteStringValue(Delta); + } + } + + InternalResponsesResponseStreamEventResponseOutputTextDelta IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseOutputTextDelta)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(InternalResponsesResponseStreamEventResponseOutputTextDelta)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseOutputTextDelta(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseOutputTextDelta DeserializeInternalResponsesResponseStreamEventResponseOutputTextDelta(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int contentIndex = default; + string delta = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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("delta"u8)) + { + delta = prop.Value.GetString(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseOutputTextDelta( + kind, + additionalBinaryDataProperties, + itemId, + outputIndex, + contentIndex, + delta); + } + + 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(InternalResponsesResponseStreamEventResponseOutputTextDelta)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseOutputTextDelta IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseOutputTextDelta)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 DeserializeInternalResponsesResponseStreamEventResponseOutputTextDelta(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseOutputTextDelta)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseOutputTextDelta internalResponsesResponseStreamEventResponseOutputTextDelta) + { + if (internalResponsesResponseStreamEventResponseOutputTextDelta == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseOutputTextDelta, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseOutputTextDelta(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseOutputTextDelta(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDelta.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDelta.cs new file mode 100644 index 000000000..e2d7de570 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDelta.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseOutputTextDelta : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseOutputTextDelta(string itemId, int outputIndex, int contentIndex, string delta) : base(StreamingResponseUpdateKind.ResponseOutputTextDelta) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Delta = delta; + } + + internal InternalResponsesResponseStreamEventResponseOutputTextDelta(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string delta) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Delta = delta; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int ContentIndex { get; } + + public string Delta { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDone.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDone.Serialization.cs new file mode 100644 index 000000000..7b87f6831 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDone.Serialization.cs @@ -0,0 +1,169 @@ +// + +#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 InternalResponsesResponseStreamEventResponseOutputTextDone : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseOutputTextDone() + { + } + + 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(InternalResponsesResponseStreamEventResponseOutputTextDone)} 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); + } + } + + InternalResponsesResponseStreamEventResponseOutputTextDone IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseOutputTextDone)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(InternalResponsesResponseStreamEventResponseOutputTextDone)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseOutputTextDone(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseOutputTextDone DeserializeInternalResponsesResponseStreamEventResponseOutputTextDone(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = 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 StreamingResponseUpdateKind(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 InternalResponsesResponseStreamEventResponseOutputTextDone( + kind, + additionalBinaryDataProperties, + 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(InternalResponsesResponseStreamEventResponseOutputTextDone)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseOutputTextDone IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseOutputTextDone)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 DeserializeInternalResponsesResponseStreamEventResponseOutputTextDone(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseOutputTextDone)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseOutputTextDone internalResponsesResponseStreamEventResponseOutputTextDone) + { + if (internalResponsesResponseStreamEventResponseOutputTextDone == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseOutputTextDone, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseOutputTextDone(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseOutputTextDone(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDone.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDone.cs new file mode 100644 index 000000000..b469bbdf2 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseOutputTextDone.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseOutputTextDone : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseOutputTextDone(string itemId, int outputIndex, int contentIndex, string text) : base(StreamingResponseUpdateKind.ResponseOutputTextDone) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Text = text; + } + + internal InternalResponsesResponseStreamEventResponseOutputTextDone(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string text) : base(kind, 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/InternalResponsesResponseStreamEventResponseRefusalDelta.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDelta.Serialization.cs new file mode 100644 index 000000000..1dbe0a4e1 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDelta.Serialization.cs @@ -0,0 +1,169 @@ +// + +#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 InternalResponsesResponseStreamEventResponseRefusalDelta : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseRefusalDelta() + { + } + + 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(InternalResponsesResponseStreamEventResponseRefusalDelta)} 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); + writer.WriteStringValue(Delta); + } + } + + InternalResponsesResponseStreamEventResponseRefusalDelta IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseRefusalDelta)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(InternalResponsesResponseStreamEventResponseRefusalDelta)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseRefusalDelta(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseRefusalDelta DeserializeInternalResponsesResponseStreamEventResponseRefusalDelta(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int contentIndex = default; + string delta = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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("delta"u8)) + { + delta = prop.Value.GetString(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseRefusalDelta( + kind, + additionalBinaryDataProperties, + itemId, + outputIndex, + contentIndex, + delta); + } + + 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(InternalResponsesResponseStreamEventResponseRefusalDelta)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseRefusalDelta IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseRefusalDelta)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 DeserializeInternalResponsesResponseStreamEventResponseRefusalDelta(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseRefusalDelta)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseRefusalDelta internalResponsesResponseStreamEventResponseRefusalDelta) + { + if (internalResponsesResponseStreamEventResponseRefusalDelta == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseRefusalDelta, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseRefusalDelta(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseRefusalDelta(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDelta.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDelta.cs new file mode 100644 index 000000000..be4fa6e83 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDelta.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseRefusalDelta : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseRefusalDelta(string itemId, int outputIndex, int contentIndex, string delta) : base(StreamingResponseUpdateKind.ResponseRefusalDelta) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Delta = delta; + } + + internal InternalResponsesResponseStreamEventResponseRefusalDelta(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string delta) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Delta = delta; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int ContentIndex { get; } + + public string Delta { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDone.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDone.Serialization.cs new file mode 100644 index 000000000..63adbf086 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDone.Serialization.cs @@ -0,0 +1,169 @@ +// + +#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 InternalResponsesResponseStreamEventResponseRefusalDone : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseRefusalDone() + { + } + + 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(InternalResponsesResponseStreamEventResponseRefusalDone)} 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("refusal") != true) + { + writer.WritePropertyName("refusal"u8); + writer.WriteStringValue(Refusal); + } + } + + InternalResponsesResponseStreamEventResponseRefusalDone IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseRefusalDone)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(InternalResponsesResponseStreamEventResponseRefusalDone)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseRefusalDone(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseRefusalDone DeserializeInternalResponsesResponseStreamEventResponseRefusalDone(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int contentIndex = default; + string refusal = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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("refusal"u8)) + { + refusal = prop.Value.GetString(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseRefusalDone( + kind, + additionalBinaryDataProperties, + itemId, + outputIndex, + contentIndex, + refusal); + } + + 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(InternalResponsesResponseStreamEventResponseRefusalDone)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseRefusalDone IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseRefusalDone)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 DeserializeInternalResponsesResponseStreamEventResponseRefusalDone(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseRefusalDone)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseRefusalDone internalResponsesResponseStreamEventResponseRefusalDone) + { + if (internalResponsesResponseStreamEventResponseRefusalDone == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseRefusalDone, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseRefusalDone(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseRefusalDone(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDone.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDone.cs new file mode 100644 index 000000000..fa075e674 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseRefusalDone.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseRefusalDone : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseRefusalDone(string itemId, int outputIndex, int contentIndex, string refusal) : base(StreamingResponseUpdateKind.ResponseRefusalDone) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Refusal = refusal; + } + + internal InternalResponsesResponseStreamEventResponseRefusalDone(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string refusal) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Refusal = refusal; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int ContentIndex { get; } + + public string Refusal { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallCompleted.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallCompleted.Serialization.cs new file mode 100644 index 000000000..ec060b1ee --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallCompleted.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 InternalResponsesResponseStreamEventResponseWebSearchCallCompleted : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseWebSearchCallCompleted() + { + } + + 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(InternalResponsesResponseStreamEventResponseWebSearchCallCompleted)} 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); + } + } + + InternalResponsesResponseStreamEventResponseWebSearchCallCompleted IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseWebSearchCallCompleted)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(InternalResponsesResponseStreamEventResponseWebSearchCallCompleted)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallCompleted(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseWebSearchCallCompleted DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallCompleted(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseWebSearchCallCompleted(kind, additionalBinaryDataProperties, itemId, outputIndex); + } + + 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(InternalResponsesResponseStreamEventResponseWebSearchCallCompleted)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseWebSearchCallCompleted IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseWebSearchCallCompleted)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 DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallCompleted(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseWebSearchCallCompleted)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseWebSearchCallCompleted internalResponsesResponseStreamEventResponseWebSearchCallCompleted) + { + if (internalResponsesResponseStreamEventResponseWebSearchCallCompleted == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseWebSearchCallCompleted, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseWebSearchCallCompleted(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallCompleted(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallCompleted.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallCompleted.cs new file mode 100644 index 000000000..2ebed9a87 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallCompleted.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseWebSearchCallCompleted : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseWebSearchCallCompleted(string itemId, int outputIndex) : base(StreamingResponseUpdateKind.ResponseWebSearchCallCompleted) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + internal InternalResponsesResponseStreamEventResponseWebSearchCallCompleted(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallInProgress.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallInProgress.Serialization.cs new file mode 100644 index 000000000..4fe297cff --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallInProgress.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 InternalResponsesResponseStreamEventResponseWebSearchCallInProgress : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseWebSearchCallInProgress() + { + } + + 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(InternalResponsesResponseStreamEventResponseWebSearchCallInProgress)} 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); + } + } + + InternalResponsesResponseStreamEventResponseWebSearchCallInProgress IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseWebSearchCallInProgress)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(InternalResponsesResponseStreamEventResponseWebSearchCallInProgress)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallInProgress(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseWebSearchCallInProgress DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallInProgress(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseWebSearchCallInProgress(kind, additionalBinaryDataProperties, itemId, outputIndex); + } + + 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(InternalResponsesResponseStreamEventResponseWebSearchCallInProgress)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseWebSearchCallInProgress IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseWebSearchCallInProgress)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 DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallInProgress(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseWebSearchCallInProgress)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseWebSearchCallInProgress internalResponsesResponseStreamEventResponseWebSearchCallInProgress) + { + if (internalResponsesResponseStreamEventResponseWebSearchCallInProgress == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseWebSearchCallInProgress, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseWebSearchCallInProgress(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallInProgress(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallInProgress.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallInProgress.cs new file mode 100644 index 000000000..f393659dc --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallInProgress.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseWebSearchCallInProgress : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseWebSearchCallInProgress(string itemId, int outputIndex) : base(StreamingResponseUpdateKind.ResponseWebSearchCallInProgress) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + internal InternalResponsesResponseStreamEventResponseWebSearchCallInProgress(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallSearching.Serialization.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallSearching.Serialization.cs new file mode 100644 index 000000000..d64ae15a8 --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallSearching.Serialization.cs @@ -0,0 +1,141 @@ +// + +#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 InternalResponsesResponseStreamEventResponseWebSearchCallSearching : IJsonModel + { + internal InternalResponsesResponseStreamEventResponseWebSearchCallSearching() + { + } + + 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(InternalResponsesResponseStreamEventResponseWebSearchCallSearching)} 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); + } + } + + InternalResponsesResponseStreamEventResponseWebSearchCallSearching IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseWebSearchCallSearching)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(InternalResponsesResponseStreamEventResponseWebSearchCallSearching)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallSearching(document.RootElement, options); + } + + internal static InternalResponsesResponseStreamEventResponseWebSearchCallSearching DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallSearching(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(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; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesResponseStreamEventResponseWebSearchCallSearching(kind, additionalBinaryDataProperties, itemId, outputIndex); + } + + 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(InternalResponsesResponseStreamEventResponseWebSearchCallSearching)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesResponseStreamEventResponseWebSearchCallSearching IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesResponseStreamEventResponseWebSearchCallSearching)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 DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallSearching(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesResponseStreamEventResponseWebSearchCallSearching)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(InternalResponsesResponseStreamEventResponseWebSearchCallSearching internalResponsesResponseStreamEventResponseWebSearchCallSearching) + { + if (internalResponsesResponseStreamEventResponseWebSearchCallSearching == null) + { + return null; + } + return BinaryContent.Create(internalResponsesResponseStreamEventResponseWebSearchCallSearching, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalResponsesResponseStreamEventResponseWebSearchCallSearching(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallSearching(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallSearching.cs b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallSearching.cs new file mode 100644 index 000000000..8419952ce --- /dev/null +++ b/src/Generated/Models/InternalResponsesResponseStreamEventResponseWebSearchCallSearching.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesResponseStreamEventResponseWebSearchCallSearching : StreamingResponseUpdate + { + internal InternalResponsesResponseStreamEventResponseWebSearchCallSearching(string itemId, int outputIndex) : base(StreamingResponseUpdateKind.ResponseWebSearchCallSearching) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + internal InternalResponsesResponseStreamEventResponseWebSearchCallSearching(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(kind, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesSystemMessage.Serialization.cs b/src/Generated/Models/InternalResponsesSystemMessage.Serialization.cs new file mode 100644 index 000000000..4091bd4e2 --- /dev/null +++ b/src/Generated/Models/InternalResponsesSystemMessage.Serialization.cs @@ -0,0 +1,168 @@ +// + +#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 InternalResponsesSystemMessage : IJsonModel + { + internal InternalResponsesSystemMessage() + { + } + + 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(InternalResponsesSystemMessage)} 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 InternalContent) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalResponsesSystemMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesSystemMessage)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(InternalResponsesSystemMessage)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesSystemMessage(document.RootElement, options); + } + + internal static InternalResponsesSystemMessage DeserializeInternalResponsesSystemMessage(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesItemType @type = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + MessageStatus? status = default; + MessageRole role = default; + IList internalContent = 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)) + { + role = new MessageRole(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)); + } + internalContent = array; + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesSystemMessage( + @type, + id, + additionalBinaryDataProperties, + status, + role, + internalContent); + } + + 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(InternalResponsesSystemMessage)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesSystemMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesSystemMessage)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 DeserializeInternalResponsesSystemMessage(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesSystemMessage)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..72741eae0 --- /dev/null +++ b/src/Generated/Models/InternalResponsesSystemMessage.cs @@ -0,0 +1,19 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesSystemMessage : MessageResponseItem + { + internal InternalResponsesSystemMessage(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, MessageStatus? status, MessageRole role, IList internalContent) : base(@type, id, additionalBinaryDataProperties, status, role) + { + // Plugin customization: ensure initialization of collection + InternalContent = internalContent ?? new ChangeTrackingList(); + } + } +} diff --git a/src/Generated/Models/InternalResponsesTextFormatJsonObject.Serialization.cs b/src/Generated/Models/InternalResponsesTextFormatJsonObject.Serialization.cs new file mode 100644 index 000000000..ac1040462 --- /dev/null +++ b/src/Generated/Models/InternalResponsesTextFormatJsonObject.Serialization.cs @@ -0,0 +1,115 @@ +// + +#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 InternalResponsesTextFormatJsonObject : 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(InternalResponsesTextFormatJsonObject)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalResponsesTextFormatJsonObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesTextFormatJsonObject)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(InternalResponsesTextFormatJsonObject)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesTextFormatJsonObject(document.RootElement, options); + } + + internal static InternalResponsesTextFormatJsonObject DeserializeInternalResponsesTextFormatJsonObject(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesTextFormatType @type = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + @type = new InternalResponsesTextFormatType(prop.Value.GetString()); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesTextFormatJsonObject(@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(InternalResponsesTextFormatJsonObject)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesTextFormatJsonObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesTextFormatJsonObject)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 DeserializeInternalResponsesTextFormatJsonObject(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesTextFormatJsonObject)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..56b3b2aa1 --- /dev/null +++ b/src/Generated/Models/InternalResponsesTextFormatJsonObject.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesTextFormatJsonObject : ResponseTextFormat + { + public InternalResponsesTextFormatJsonObject() : base(InternalResponsesTextFormatType.JsonObject) + { + } + + internal InternalResponsesTextFormatJsonObject(InternalResponsesTextFormatType @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalResponsesTextFormatJsonSchema.Serialization.cs b/src/Generated/Models/InternalResponsesTextFormatJsonSchema.Serialization.cs new file mode 100644 index 000000000..0a81aa8c4 --- /dev/null +++ b/src/Generated/Models/InternalResponsesTextFormatJsonSchema.Serialization.cs @@ -0,0 +1,181 @@ +// + +#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 InternalResponsesTextFormatJsonSchema : IJsonModel + { + internal InternalResponsesTextFormatJsonSchema() + { + } + + 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(InternalResponsesTextFormatJsonSchema)} 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("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(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); + + 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(InternalResponsesTextFormatJsonSchema)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesTextFormatJsonSchema(document.RootElement, options); + } + + internal static InternalResponsesTextFormatJsonSchema DeserializeInternalResponsesTextFormatJsonSchema(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesTextFormatType @type = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + BinaryData schema = default; + string description = default; + bool? strict = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + @type = new InternalResponsesTextFormatType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("schema"u8)) + { + schema = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("description"u8)) + { + description = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("strict"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + strict = null; + continue; + } + strict = prop.Value.GetBoolean(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesTextFormatJsonSchema( + @type, + additionalBinaryDataProperties, + name, + schema, + description, + 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(InternalResponsesTextFormatJsonSchema)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesTextFormatJsonSchema IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesTextFormatJsonSchema)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 DeserializeInternalResponsesTextFormatJsonSchema(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesTextFormatJsonSchema)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..873138a5c --- /dev/null +++ b/src/Generated/Models/InternalResponsesTextFormatJsonSchema.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesTextFormatJsonSchema : ResponseTextFormat + { + public InternalResponsesTextFormatJsonSchema(string name, BinaryData schema) : base(InternalResponsesTextFormatType.JsonSchema) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(schema, nameof(schema)); + + Name = name; + Schema = schema; + } + + internal InternalResponsesTextFormatJsonSchema(InternalResponsesTextFormatType @type, IDictionary additionalBinaryDataProperties, string name, BinaryData schema, string description, bool? strict) : base(@type, additionalBinaryDataProperties) + { + Name = name; + Schema = schema; + Description = description; + Strict = strict; + } + + public string Name { get; set; } + + public BinaryData Schema { get; set; } + + public string Description { get; set; } + + public bool? Strict { get; set; } + } +} diff --git a/src/Generated/Models/InternalResponsesTextFormatText.Serialization.cs b/src/Generated/Models/InternalResponsesTextFormatText.Serialization.cs new file mode 100644 index 000000000..4830ba78d --- /dev/null +++ b/src/Generated/Models/InternalResponsesTextFormatText.Serialization.cs @@ -0,0 +1,115 @@ +// + +#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 InternalResponsesTextFormatText : 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(InternalResponsesTextFormatText)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalResponsesTextFormatText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesTextFormatText)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(InternalResponsesTextFormatText)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesTextFormatText(document.RootElement, options); + } + + internal static InternalResponsesTextFormatText DeserializeInternalResponsesTextFormatText(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesTextFormatType @type = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + @type = new InternalResponsesTextFormatType(prop.Value.GetString()); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesTextFormatText(@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(InternalResponsesTextFormatText)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesTextFormatText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesTextFormatText)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 DeserializeInternalResponsesTextFormatText(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesTextFormatText)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..6669f3e52 --- /dev/null +++ b/src/Generated/Models/InternalResponsesTextFormatText.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesTextFormatText : ResponseTextFormat + { + public InternalResponsesTextFormatText() : base(InternalResponsesTextFormatType.Text) + { + } + + internal InternalResponsesTextFormatText(InternalResponsesTextFormatType @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalResponsesTextFormatType.cs b/src/Generated/Models/InternalResponsesTextFormatType.cs new file mode 100644 index 000000000..f1ae82f1e --- /dev/null +++ b/src/Generated/Models/InternalResponsesTextFormatType.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalResponsesTextFormatType : IEquatable + { + private readonly string _value; + private const string TextValue = "text"; + private const string JsonObjectValue = "json_object"; + private const string JsonSchemaValue = "json_schema"; + + public InternalResponsesTextFormatType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static InternalResponsesTextFormatType Text { get; } = new InternalResponsesTextFormatType(TextValue); + + public static InternalResponsesTextFormatType JsonObject { get; } = new InternalResponsesTextFormatType(JsonObjectValue); + + public static InternalResponsesTextFormatType JsonSchema { get; } = new InternalResponsesTextFormatType(JsonSchemaValue); + + public static bool operator ==(InternalResponsesTextFormatType left, InternalResponsesTextFormatType right) => left.Equals(right); + + public static bool operator !=(InternalResponsesTextFormatType left, InternalResponsesTextFormatType right) => !left.Equals(right); + + public static implicit operator InternalResponsesTextFormatType(string value) => new InternalResponsesTextFormatType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalResponsesTextFormatType other && Equals(other); + + public bool Equals(InternalResponsesTextFormatType 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/InternalResponsesToolChoiceObject.Serialization.cs b/src/Generated/Models/InternalResponsesToolChoiceObject.Serialization.cs new file mode 100644 index 000000000..b59403728 --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceObject.Serialization.cs @@ -0,0 +1,145 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + [PersistableModelProxy(typeof(UnknownResponsesToolChoiceObject))] + 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 UnknownResponsesToolChoiceObject.DeserializeUnknownResponsesToolChoiceObject(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 new file mode 100644 index 000000000..87a6f0a55 --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceObject.cs @@ -0,0 +1,33 @@ +// + +#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 new file mode 100644 index 000000000..a08566a04 --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceObjectComputer.Serialization.cs @@ -0,0 +1,115 @@ +// + +#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 new file mode 100644 index 000000000..2d90183c8 --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceObjectComputer.cs @@ -0,0 +1,20 @@ +// + +#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 new file mode 100644 index 000000000..43949e978 --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceObjectFileSearch.Serialization.cs @@ -0,0 +1,115 @@ +// + +#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 new file mode 100644 index 000000000..a52643b75 --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceObjectFileSearch.cs @@ -0,0 +1,20 @@ +// + +#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 new file mode 100644 index 000000000..f5bc26bee --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceObjectFunction.Serialization.cs @@ -0,0 +1,130 @@ +// + +#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 new file mode 100644 index 000000000..366bc4408 --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceObjectFunction.cs @@ -0,0 +1,27 @@ +// + +#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 new file mode 100644 index 000000000..5f4efd4de --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceObjectType.cs @@ -0,0 +1,50 @@ +// + +#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 new file mode 100644 index 000000000..f3138056e --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceObjectWebSearch.Serialization.cs @@ -0,0 +1,115 @@ +// + +#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 new file mode 100644 index 000000000..405863e56 --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceObjectWebSearch.cs @@ -0,0 +1,20 @@ +// + +#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 new file mode 100644 index 000000000..cb38a66df --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolChoiceOption.cs @@ -0,0 +1,47 @@ +// + +#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 new file mode 100644 index 000000000..9cc3bf6a2 --- /dev/null +++ b/src/Generated/Models/InternalResponsesToolType.cs @@ -0,0 +1,50 @@ +// + +#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 new file mode 100644 index 000000000..91f13368e --- /dev/null +++ b/src/Generated/Models/InternalResponsesUserMessage.Serialization.cs @@ -0,0 +1,168 @@ +// + +#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 InternalResponsesUserMessage : IJsonModel + { + internal InternalResponsesUserMessage() + { + } + + 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(InternalResponsesUserMessage)} 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 InternalContent) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalResponsesUserMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesUserMessage)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(InternalResponsesUserMessage)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesUserMessage(document.RootElement, options); + } + + internal static InternalResponsesUserMessage DeserializeInternalResponsesUserMessage(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesItemType @type = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + MessageStatus? status = default; + MessageRole role = default; + IList internalContent = 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)) + { + role = new MessageRole(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)); + } + internalContent = array; + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesUserMessage( + @type, + id, + additionalBinaryDataProperties, + status, + role, + internalContent); + } + + 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(InternalResponsesUserMessage)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesUserMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesUserMessage)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 DeserializeInternalResponsesUserMessage(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesUserMessage)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..426997a87 --- /dev/null +++ b/src/Generated/Models/InternalResponsesUserMessage.cs @@ -0,0 +1,19 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesUserMessage : MessageResponseItem + { + internal InternalResponsesUserMessage(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, MessageStatus? status, MessageRole role, IList internalContent) : base(@type, id, additionalBinaryDataProperties, status, role) + { + // Plugin customization: ensure initialization of collection + InternalContent = internalContent ?? new ChangeTrackingList(); + } + } +} diff --git a/src/Generated/Models/InternalResponsesWebSearchApproximateLocation.Serialization.cs b/src/Generated/Models/InternalResponsesWebSearchApproximateLocation.Serialization.cs new file mode 100644 index 000000000..f70ce13dd --- /dev/null +++ b/src/Generated/Models/InternalResponsesWebSearchApproximateLocation.Serialization.cs @@ -0,0 +1,165 @@ +// + +#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 new file mode 100644 index 000000000..68609630b --- /dev/null +++ b/src/Generated/Models/InternalResponsesWebSearchApproximateLocation.cs @@ -0,0 +1,32 @@ +// + +#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 new file mode 100644 index 000000000..a5de85eac --- /dev/null +++ b/src/Generated/Models/InternalResponsesWebSearchTool.Serialization.cs @@ -0,0 +1,145 @@ +// + +#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 new file mode 100644 index 000000000..83f625dc8 --- /dev/null +++ b/src/Generated/Models/InternalResponsesWebSearchTool.cs @@ -0,0 +1,26 @@ +// + +#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/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs b/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs index 27de37212..46539bda9 100644 --- a/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs +++ b/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs @@ -27,7 +27,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalRunObjectRequiredActionSubmitToolOutputs)} does not support writing '{format}' format."); } - if (true && _additionalBinaryDataProperties?.ContainsKey("tool_calls") != true) + if (_additionalBinaryDataProperties?.ContainsKey("tool_calls") != true) { writer.WritePropertyName("tool_calls"u8); writer.WriteStartArray(); @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -91,10 +91,7 @@ internal static InternalRunObjectRequiredActionSubmitToolOutputs DeserializeInte toolCalls = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunObjectRequiredActionSubmitToolOutputs(toolCalls, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunRequiredAction.Serialization.cs b/src/Generated/Models/InternalRunRequiredAction.Serialization.cs index 34c1dad54..df0e0a0f2 100644 --- a/src/Generated/Models/InternalRunRequiredAction.Serialization.cs +++ b/src/Generated/Models/InternalRunRequiredAction.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteObjectValue(Type, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalRunRequiredAction DeserializeInternalRunRequiredAction(J @type = prop.Value.GetObject(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunRequiredAction(submitToolOutputs, @type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs b/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs index 747bb9d1b..5b85bda72 100644 --- a/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs +++ b/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs @@ -73,10 +73,7 @@ internal static InternalRunStepCodeInterpreterLogOutput DeserializeInternalRunSt internalLogs = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepCodeInterpreterLogOutput(@type, additionalBinaryDataProperties, internalLogs); } diff --git a/src/Generated/Models/InternalRunStepDelta.Serialization.cs b/src/Generated/Models/InternalRunStepDelta.Serialization.cs index 62f763820..9afb4e72a 100644 --- a/src/Generated/Models/InternalRunStepDelta.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDelta.Serialization.cs @@ -44,9 +44,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteObjectValue(this.Object, options); + writer.WriteObjectValue(Object, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalRunStepDelta DeserializeInternalRunStepDelta(JsonElement @object = prop.Value.GetObject(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDelta(id, delta, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDelta.cs b/src/Generated/Models/InternalRunStepDelta.cs index 2734d84a0..828b44a5e 100644 --- a/src/Generated/Models/InternalRunStepDelta.cs +++ b/src/Generated/Models/InternalRunStepDelta.cs @@ -21,7 +21,7 @@ internal InternalRunStepDelta(string id, InternalRunStepDeltaObjectDelta delta, { Id = id; Delta = delta; - this.Object = @object; + Object = @object; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs index a0765a8d4..159a42b9d 100644 --- a/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs @@ -32,7 +32,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("step_details"u8); writer.WriteObjectValue(StepDetails, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalRunStepDeltaObjectDelta DeserializeInternalRunStepDeltaO stepDetails = InternalRunStepDeltaStepDetails.DeserializeInternalRunStepDeltaStepDetails(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaObjectDelta(stepDetails, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetails.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetails.Serialization.cs index 43c72487a..427714c03 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetails.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetails.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs index 5ff003063..64fb7e2c9 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs @@ -73,10 +73,7 @@ internal static InternalRunStepDeltaStepDetailsMessageCreationObject Deserialize messageCreation = InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.DeserializeInternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsMessageCreationObject(@type, additionalBinaryDataProperties, messageCreation); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs index 5655786b7..b9744c04e 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs @@ -32,7 +32,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message_id"u8); writer.WriteStringValue(MessageId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -81,10 +81,7 @@ internal static InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreat messageId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation(messageId, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs index ce626cea9..2ef6c6192 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs @@ -99,10 +99,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeObject DeserializeIn codeInterpreter = InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.DeserializeInternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsCodeObject(@type, additionalBinaryDataProperties, index, id, codeInterpreter); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs index 241f9bf57..f5197ba8b 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs @@ -32,7 +32,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("input"u8); writer.WriteStringValue(Input); } - if (true && Optional.IsCollectionDefined(Outputs) && _additionalBinaryDataProperties?.ContainsKey("outputs") != true) + if (Optional.IsCollectionDefined(Outputs) && _additionalBinaryDataProperties?.ContainsKey("outputs") != true) { writer.WritePropertyName("outputs"u8); writer.WriteStartArray(); @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -106,10 +106,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterprete outputs = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter(input, outputs ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs index 019556250..9955c8044 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs @@ -88,10 +88,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject De image = InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.DeserializeInternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject(@type, additionalBinaryDataProperties, index, image); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs index 55c28ee7b..7171718da 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs @@ -32,7 +32,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -81,10 +81,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectIma fileId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage(fileId, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs index 829a1d703..3d16e8a98 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs @@ -84,10 +84,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject Des internalLogs = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject(@type, additionalBinaryDataProperties, index, internalLogs); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs index 20fd03648..3fac49451 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs @@ -45,7 +45,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("file_search") != true) { writer.WritePropertyName("file_search"u8); - writer.WriteObjectValue(FileSearch, options); + writer.WriteObjectValue(FileSearch, options); } } @@ -95,10 +95,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFileSearchObject Deseria fileSearch = InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.DeserializeInternalRunStepDetailsToolCallsFileSearchObjectFileSearch(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsFileSearchObject(@type, additionalBinaryDataProperties, index, id, fileSearch); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs index 6b443b8b1..7f41f6d24 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs @@ -27,7 +27,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch)} does not support writing '{format}' format."); } - if (true && Optional.IsCollectionDefined(Results) && _additionalBinaryDataProperties?.ContainsKey("results") != true) + if (Optional.IsCollectionDefined(Results) && _additionalBinaryDataProperties?.ContainsKey("results") != true) { writer.WritePropertyName("results"u8); writer.WriteStartArray(); @@ -40,9 +40,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(RankingOptions) && _additionalBinaryDataProperties?.ContainsKey("ranking_options") != true) { writer.WritePropertyName("ranking_options"u8); - writer.WriteObjectValue(RankingOptions, options); + writer.WriteObjectValue(RankingOptions, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -110,10 +110,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSear rankingOptions = FileSearchRankingOptions.DeserializeFileSearchRankingOptions(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch(results ?? new ChangeTrackingList(), rankingOptions, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs index a15bf2fe0..e40afde54 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs @@ -99,10 +99,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFunctionObject Deseriali function = InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.DeserializeInternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsFunctionObject(@type, additionalBinaryDataProperties, index, id, function); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs index 082734f3b..41c02a000 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs @@ -39,17 +39,10 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Output) && _additionalBinaryDataProperties?.ContainsKey("output") != true) { - if (Output != null) - { - writer.WritePropertyName("output"u8); - writer.WriteStringValue(Output); - } - else - { - writer.WriteNull("output"u8); - } + writer.WritePropertyName("output"u8); + writer.WriteStringValue(Output); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -115,10 +108,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction D output = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction(name, arguments, output, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs index 4c7d10c26..2238b8e9f 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs @@ -83,10 +83,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsObject DeserializeIntern toolCalls = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsObject(@type, additionalBinaryDataProperties, toolCalls ?? new ChangeTrackingList()); } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs index 89ea067c0..760405f31 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.Serialization.cs index 70ac2892d..cdb893735 100644 --- a/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.Serialization.cs @@ -35,7 +35,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("message_creation") != true) { writer.WritePropertyName("message_creation"u8); - writer.WriteObjectValue(_messageCreation, options); + writer.WriteObjectValue(_messageCreation, options); } } @@ -73,10 +73,7 @@ internal static InternalRunStepDetailsMessageCreationObject DeserializeInternalR messageCreation = InternalRunStepDetailsMessageCreationObjectMessageCreation.DeserializeInternalRunStepDetailsMessageCreationObjectMessageCreation(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsMessageCreationObject(@type, additionalBinaryDataProperties, messageCreation); } diff --git a/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs index 863ffedb1..4efd7836c 100644 --- a/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message_id"u8); writer.WriteStringValue(MessageId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalRunStepDetailsMessageCreationObjectMessageCreation Deser messageId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsMessageCreationObjectMessageCreation(messageId, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.Serialization.cs index ee963279b..4775f9581 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.Serialization.cs @@ -59,7 +59,7 @@ internal static InternalRunStepDetailsToolCallsCodeObject DeserializeInternalRun return null; } string id = default; - Assistants.RunStepToolCallKind kind = default; + RunStepToolCallKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter = default; foreach (var prop in element.EnumerateObject()) @@ -79,10 +79,7 @@ internal static InternalRunStepDetailsToolCallsCodeObject DeserializeInternalRun codeInterpreter = InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.DeserializeInternalRunStepDetailsToolCallsCodeObjectCodeInterpreter(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsCodeObject(id, kind, additionalBinaryDataProperties, codeInterpreter); } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.cs index 1901d9b3a..de2dade56 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsCodeObject : RunStepToolCall { - internal InternalRunStepDetailsToolCallsCodeObject(string id, InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter) : base(id, Assistants.RunStepToolCallKind.CodeInterpreter) + internal InternalRunStepDetailsToolCallsCodeObject(string id, InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter) : base(id, RunStepToolCallKind.CodeInterpreter) { CodeInterpreter = codeInterpreter; } - internal InternalRunStepDetailsToolCallsCodeObject(string id, Assistants.RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter) : base(id, kind, additionalBinaryDataProperties) + internal InternalRunStepDetailsToolCallsCodeObject(string id, RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter) : base(id, kind, additionalBinaryDataProperties) { CodeInterpreter = codeInterpreter; } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs index cb8f8026b..b83e9c3af 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("input"u8); writer.WriteStringValue(Input); } - if (true && _additionalBinaryDataProperties?.ContainsKey("outputs") != true) + if (_additionalBinaryDataProperties?.ContainsKey("outputs") != true) { writer.WritePropertyName("outputs"u8); writer.WriteStartArray(); @@ -46,7 +46,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -106,10 +106,7 @@ internal static InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter Deseria outputs = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter(input, outputs, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs index 7b3184aff..05e0ef525 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs @@ -35,7 +35,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("image") != true) { writer.WritePropertyName("image"u8); - writer.WriteObjectValue(_image, options); + writer.WriteObjectValue(_image, options); } } @@ -73,10 +73,7 @@ internal static InternalRunStepDetailsToolCallsCodeOutputImageObject Deserialize image = InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.DeserializeInternalRunStepDetailsToolCallsCodeOutputImageObjectImage(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsCodeOutputImageObject(@type, additionalBinaryDataProperties, image); } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs index 1f2497850..9eae18630 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalRunStepDetailsToolCallsCodeOutputImageObjectImage Deseri fileId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsCodeOutputImageObjectImage(fileId, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.Serialization.cs index c3383210e..992fe5e0f 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.Serialization.cs @@ -59,7 +59,7 @@ internal static InternalRunStepDetailsToolCallsFileSearchObject DeserializeInter return null; } string id = default; - Assistants.RunStepToolCallKind kind = default; + RunStepToolCallKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch = default; foreach (var prop in element.EnumerateObject()) @@ -79,10 +79,7 @@ internal static InternalRunStepDetailsToolCallsFileSearchObject DeserializeInter fileSearch = InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.DeserializeInternalRunStepDetailsToolCallsFileSearchObjectFileSearch(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsFileSearchObject(id, kind, additionalBinaryDataProperties, fileSearch); } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.cs index 3346c806c..bb4dea596 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsFileSearchObject : RunStepToolCall { - internal InternalRunStepDetailsToolCallsFileSearchObject(string id, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base(id, Assistants.RunStepToolCallKind.FileSearch) + internal InternalRunStepDetailsToolCallsFileSearchObject(string id, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base(id, RunStepToolCallKind.FileSearch) { FileSearch = fileSearch; } - internal InternalRunStepDetailsToolCallsFileSearchObject(string id, Assistants.RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base(id, kind, additionalBinaryDataProperties) + internal InternalRunStepDetailsToolCallsFileSearchObject(string id, RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base(id, kind, additionalBinaryDataProperties) { FileSearch = fileSearch; } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs index a19bd3e96..6ad6794e5 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs @@ -27,7 +27,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsFileSearchObjectFileSearch)} does not support writing '{format}' format."); } - if (true && Optional.IsCollectionDefined(Results) && _additionalBinaryDataProperties?.ContainsKey("results") != true) + if (Optional.IsCollectionDefined(Results) && _additionalBinaryDataProperties?.ContainsKey("results") != true) { writer.WritePropertyName("results"u8); writer.WriteStartArray(); @@ -40,9 +40,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(RankingOptions) && _additionalBinaryDataProperties?.ContainsKey("ranking_options") != true) { writer.WritePropertyName("ranking_options"u8); - writer.WriteObjectValue(RankingOptions, options); + writer.WriteObjectValue(RankingOptions, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -110,10 +110,7 @@ internal static InternalRunStepDetailsToolCallsFileSearchObjectFileSearch Deseri rankingOptions = FileSearchRankingOptions.DeserializeFileSearchRankingOptions(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsFileSearchObjectFileSearch(results ?? new ChangeTrackingList(), rankingOptions, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.Serialization.cs index abb3aecef..46631bd19 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("score_threshold"u8); writer.WriteNumberValue(ScoreThreshold); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -81,14 +81,14 @@ internal static InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject De { return null; } - InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker ranker = default; + FileSearchRanker ranker = default; float scoreThreshold = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("ranker"u8)) { - ranker = new InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker(prop.Value.GetString()); + ranker = new FileSearchRanker(prop.Value.GetString()); continue; } if (prop.NameEquals("score_threshold"u8)) @@ -96,10 +96,7 @@ internal static InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject De scoreThreshold = prop.Value.GetSingle(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject(ranker, scoreThreshold, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.cs index e0e24642a..966fd8132 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.cs @@ -11,19 +11,20 @@ internal partial class InternalRunStepDetailsToolCallsFileSearchRankingOptionsOb { private protected IDictionary _additionalBinaryDataProperties; - internal InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject(float scoreThreshold) + internal InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject(FileSearchRanker ranker, float scoreThreshold) { + Ranker = ranker; ScoreThreshold = scoreThreshold; } - internal InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject(InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker ranker, float scoreThreshold, IDictionary additionalBinaryDataProperties) + internal InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject(FileSearchRanker ranker, float scoreThreshold, IDictionary additionalBinaryDataProperties) { Ranker = ranker; ScoreThreshold = scoreThreshold; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker Ranker { get; } = "default_2024_08_21"; + public FileSearchRanker Ranker { get; } public float ScoreThreshold { get; } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker.cs deleted file mode 100644 index 03d987094..000000000 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker : IEquatable - { - private readonly string _value; - private const string Default20240821Value = "default_2024_08_21"; - - public InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker Default20240821 { get; } = new InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker(Default20240821Value); - - public static bool operator ==(InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker left, InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker right) => left.Equals(right); - - public static bool operator !=(InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker left, InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker right) => !left.Equals(right); - - public static implicit operator InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker(string value) => new InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker other && Equals(other); - - public bool Equals(InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker 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/InternalRunStepDetailsToolCallsFunctionObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.Serialization.cs index b2de59874..d1c28641d 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.Serialization.cs @@ -59,7 +59,7 @@ internal static InternalRunStepDetailsToolCallsFunctionObject DeserializeInterna return null; } string id = default; - Assistants.RunStepToolCallKind kind = default; + RunStepToolCallKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRunStepDetailsToolCallsFunctionObjectFunction function = default; foreach (var prop in element.EnumerateObject()) @@ -79,10 +79,7 @@ internal static InternalRunStepDetailsToolCallsFunctionObject DeserializeInterna function = InternalRunStepDetailsToolCallsFunctionObjectFunction.DeserializeInternalRunStepDetailsToolCallsFunctionObjectFunction(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsFunctionObject(id, kind, additionalBinaryDataProperties, function); } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.cs index a6c864fee..e86326594 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsFunctionObject : RunStepToolCall { - internal InternalRunStepDetailsToolCallsFunctionObject(string id, InternalRunStepDetailsToolCallsFunctionObjectFunction function) : base(id, Assistants.RunStepToolCallKind.Function) + internal InternalRunStepDetailsToolCallsFunctionObject(string id, InternalRunStepDetailsToolCallsFunctionObjectFunction function) : base(id, RunStepToolCallKind.Function) { Function = function; } - internal InternalRunStepDetailsToolCallsFunctionObject(string id, Assistants.RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsFunctionObjectFunction function) : base(id, kind, additionalBinaryDataProperties) + internal InternalRunStepDetailsToolCallsFunctionObject(string id, RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsFunctionObjectFunction function) : base(id, kind, additionalBinaryDataProperties) { Function = function; } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs index ae3bbe299..5d14c57ab 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs @@ -43,7 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("output") != true) { - if (Output != null) + if (Optional.IsDefined(Output)) { writer.WritePropertyName("output"u8); writer.WriteStringValue(Output); @@ -53,7 +53,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("output"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -119,10 +119,7 @@ internal static InternalRunStepDetailsToolCallsFunctionObjectFunction Deserializ output = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsFunctionObjectFunction(name, arguments, output, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs index 06127716e..5f9d04fb0 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs @@ -83,10 +83,7 @@ internal static InternalRunStepDetailsToolCallsObject DeserializeInternalRunStep internalToolCalls = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsObject(@type, additionalBinaryDataProperties, internalToolCalls); } diff --git a/src/Generated/Models/InternalRunToolCallObjectFunction.Serialization.cs b/src/Generated/Models/InternalRunToolCallObjectFunction.Serialization.cs index 1b944e191..4d09c1430 100644 --- a/src/Generated/Models/InternalRunToolCallObjectFunction.Serialization.cs +++ b/src/Generated/Models/InternalRunToolCallObjectFunction.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("arguments"u8); writer.WriteStringValue(Arguments); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalRunToolCallObjectFunction DeserializeInternalRunToolCall arguments = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunToolCallObjectFunction(name, arguments, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalStaticChunkingStrategyDetails.Serialization.cs b/src/Generated/Models/InternalStaticChunkingStrategyDetails.Serialization.cs index 7042f12d0..234e13921 100644 --- a/src/Generated/Models/InternalStaticChunkingStrategyDetails.Serialization.cs +++ b/src/Generated/Models/InternalStaticChunkingStrategyDetails.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("chunk_overlap_tokens"u8); writer.WriteNumberValue(ChunkOverlapTokens); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static InternalStaticChunkingStrategyDetails DeserializeInternalStaticC chunkOverlapTokens = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalStaticChunkingStrategyDetails(maxChunkSizeTokens, chunkOverlapTokens, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs b/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs index 3058302f7..ce152a196 100644 --- a/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs +++ b/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs @@ -73,10 +73,7 @@ internal static InternalStaticChunkingStrategyRequestParam DeserializeInternalSt @static = InternalStaticChunkingStrategyDetails.DeserializeInternalStaticChunkingStrategyDetails(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalStaticChunkingStrategyRequestParam(@type, additionalBinaryDataProperties, @static); } diff --git a/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs b/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs index d2ffcbe89..89d62b32c 100644 --- a/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs +++ b/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs @@ -43,17 +43,10 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Stream) && _additionalBinaryDataProperties?.ContainsKey("stream") != true) { - if (Stream != null) - { - writer.WritePropertyName("stream"u8); - writer.WriteBooleanValue(Stream.Value); - } - else - { - writer.WriteNull("stream"u8); - } + writer.WritePropertyName("stream"u8); + writer.WriteBooleanValue(Stream.Value); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -118,10 +111,7 @@ internal static InternalSubmitToolOutputsRunRequest DeserializeInternalSubmitToo stream = prop.Value.GetBoolean(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalSubmitToolOutputsRunRequest(toolOutputs, stream, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalThreadObjectToolResources.Serialization.cs b/src/Generated/Models/InternalThreadObjectToolResources.Serialization.cs index 131a2dc59..32677acc2 100644 --- a/src/Generated/Models/InternalThreadObjectToolResources.Serialization.cs +++ b/src/Generated/Models/InternalThreadObjectToolResources.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static InternalThreadObjectToolResources DeserializeInternalThreadObjec fileSearch = InternalThreadObjectToolResourcesFileSearch.DeserializeInternalThreadObjectToolResourcesFileSearch(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalThreadObjectToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs index 0b41a7f14..d605c0c0d 100644 --- a/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalThreadObjectToolResourcesCodeInterpreter DeserializeInte fileIds = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalThreadObjectToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs b/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs index 582798a12..1b6f8a38f 100644 --- a/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalThreadObjectToolResourcesFileSearch DeserializeInternalT vectorStoreIds = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalThreadObjectToolResourcesFileSearch(vectorStoreIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalTodoFineTuneChatRequestInput.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneChatRequestInput.Serialization.cs index ce3cb7ed7..897d43baa 100644 --- a/src/Generated/Models/InternalTodoFineTuneChatRequestInput.Serialization.cs +++ b/src/Generated/Models/InternalTodoFineTuneChatRequestInput.Serialization.cs @@ -75,7 +75,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -180,10 +180,7 @@ internal static InternalTodoFineTuneChatRequestInput DeserializeInternalTodoFine functions = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalTodoFineTuneChatRequestInput(messages ?? new ChangeTrackingList(), tools ?? new ChangeTrackingList(), parallelToolCalls, functions ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalTodoFineTuneCompletionRequestInput.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneCompletionRequestInput.Serialization.cs index ca2640d3d..c4f62fc89 100644 --- a/src/Generated/Models/InternalTodoFineTuneCompletionRequestInput.Serialization.cs +++ b/src/Generated/Models/InternalTodoFineTuneCompletionRequestInput.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("completion"u8); writer.WriteStringValue(Completion); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -92,10 +92,7 @@ internal static InternalTodoFineTuneCompletionRequestInput DeserializeInternalTo completion = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalTodoFineTuneCompletionRequestInput(prompt, completion, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalTodoFineTuneDPOMethod.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneDPOMethod.Serialization.cs index 5c6d3fbeb..a36ddd8b1 100644 --- a/src/Generated/Models/InternalTodoFineTuneDPOMethod.Serialization.cs +++ b/src/Generated/Models/InternalTodoFineTuneDPOMethod.Serialization.cs @@ -32,7 +32,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("hyperparameters"u8); writer.WriteObjectValue(Hyperparameters, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalTodoFineTuneDPOMethod DeserializeInternalTodoFineTuneDPO hyperparameters = InternalTodoFineTuneDPOMethodHyperparameters.DeserializeInternalTodoFineTuneDPOMethodHyperparameters(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalTodoFineTuneDPOMethod(hyperparameters, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalTodoFineTuneDPOMethodHyperparameters.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneDPOMethodHyperparameters.Serialization.cs index 8cb18f1bf..d5cf833e4 100644 --- a/src/Generated/Models/InternalTodoFineTuneDPOMethodHyperparameters.Serialization.cs +++ b/src/Generated/Models/InternalTodoFineTuneDPOMethodHyperparameters.Serialization.cs @@ -75,7 +75,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -158,10 +158,7 @@ internal static InternalTodoFineTuneDPOMethodHyperparameters DeserializeInternal nEpochs = BinaryData.FromString(prop.Value.GetRawText()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalTodoFineTuneDPOMethodHyperparameters(beta, batchSize, learningRateMultiplier, nEpochs, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalTodoFineTuneMethod.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneMethod.Serialization.cs index 222f56369..d085af683 100644 --- a/src/Generated/Models/InternalTodoFineTuneMethod.Serialization.cs +++ b/src/Generated/Models/InternalTodoFineTuneMethod.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("dpo"u8); writer.WriteObjectValue(Dpo, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -115,10 +115,7 @@ internal static InternalTodoFineTuneMethod DeserializeInternalTodoFineTuneMethod dpo = InternalTodoFineTuneDPOMethod.DeserializeInternalTodoFineTuneDPOMethod(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalTodoFineTuneMethod(@type, supervised, dpo, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalTodoFineTuneSupervisedMethod.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneSupervisedMethod.Serialization.cs index eac268c8b..19da7c368 100644 --- a/src/Generated/Models/InternalTodoFineTuneSupervisedMethod.Serialization.cs +++ b/src/Generated/Models/InternalTodoFineTuneSupervisedMethod.Serialization.cs @@ -32,7 +32,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("hyperparameters"u8); writer.WriteObjectValue(Hyperparameters, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static InternalTodoFineTuneSupervisedMethod DeserializeInternalTodoFine hyperparameters = InternalFineTuneSupervisedMethodHyperparameters.DeserializeInternalFineTuneSupervisedMethodHyperparameters(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalTodoFineTuneSupervisedMethod(hyperparameters, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalToolResourcesFileSearchIdsOnly.Serialization.cs b/src/Generated/Models/InternalToolResourcesFileSearchIdsOnly.Serialization.cs index a01186ecb..7108c197e 100644 --- a/src/Generated/Models/InternalToolResourcesFileSearchIdsOnly.Serialization.cs +++ b/src/Generated/Models/InternalToolResourcesFileSearchIdsOnly.Serialization.cs @@ -42,7 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static InternalToolResourcesFileSearchIdsOnly DeserializeInternalToolRe vectorStoreIds = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalToolResourcesFileSearchIdsOnly(vectorStoreIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalUnknownAssistantResponseFormat.Serialization.cs b/src/Generated/Models/InternalUnknownAssistantResponseFormat.Serialization.cs index e70f6e95d..3aba74623 100644 --- a/src/Generated/Models/InternalUnknownAssistantResponseFormat.Serialization.cs +++ b/src/Generated/Models/InternalUnknownAssistantResponseFormat.Serialization.cs @@ -43,7 +43,7 @@ protected override AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReade throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return AssistantResponseFormat.DeserializeAssistantResponseFormat(document.RootElement, options); + return DeserializeAssistantResponseFormat(document.RootElement, options); } internal static InternalUnknownAssistantResponseFormat DeserializeInternalUnknownAssistantResponseFormat(JsonElement element, ModelReaderWriterOptions options) @@ -61,10 +61,7 @@ internal static InternalUnknownAssistantResponseFormat DeserializeInternalUnknow @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUnknownAssistantResponseFormat(@type, additionalBinaryDataProperties); } @@ -93,7 +90,7 @@ protected override AssistantResponseFormat PersistableModelCreateCore(BinaryData case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return AssistantResponseFormat.DeserializeAssistantResponseFormat(document.RootElement, options); + return DeserializeAssistantResponseFormat(document.RootElement, options); } default: throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support reading '{options.Format}' format."); diff --git a/src/Generated/Models/InternalUnknownChatMessage.Serialization.cs b/src/Generated/Models/InternalUnknownChatMessage.Serialization.cs index 70a0deb09..aeb26e5fa 100644 --- a/src/Generated/Models/InternalUnknownChatMessage.Serialization.cs +++ b/src/Generated/Models/InternalUnknownChatMessage.Serialization.cs @@ -46,7 +46,7 @@ internal static InternalUnknownChatMessage DeserializeInternalUnknownChatMessage return null; } ChatMessageContent content = default; - Chat.ChatMessageRole role = default; + ChatMessageRole role = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -60,13 +60,9 @@ internal static InternalUnknownChatMessage DeserializeInternalUnknownChatMessage role = prop.Value.GetString().ToChatMessageRole(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - // CUSTOM: Initialize Content collection property. - return new InternalUnknownChatMessage(content ?? new ChatMessageContent(), role, additionalBinaryDataProperties); + return new InternalUnknownChatMessage(content, role, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); diff --git a/src/Generated/Models/InternalUnknownChatMessage.cs b/src/Generated/Models/InternalUnknownChatMessage.cs index 82bb59b2c..198373197 100644 --- a/src/Generated/Models/InternalUnknownChatMessage.cs +++ b/src/Generated/Models/InternalUnknownChatMessage.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalUnknownChatMessage : ChatMessage { - internal InternalUnknownChatMessage(ChatMessageContent content, Chat.ChatMessageRole role, IDictionary additionalBinaryDataProperties) : base(content, role, additionalBinaryDataProperties) + internal InternalUnknownChatMessage(ChatMessageContent content, ChatMessageRole role, IDictionary additionalBinaryDataProperties) : base(content, role, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalUnknownChatOutputPrediction.Serialization.cs b/src/Generated/Models/InternalUnknownChatOutputPrediction.Serialization.cs index ba0c062c7..b33db7cbe 100644 --- a/src/Generated/Models/InternalUnknownChatOutputPrediction.Serialization.cs +++ b/src/Generated/Models/InternalUnknownChatOutputPrediction.Serialization.cs @@ -61,10 +61,7 @@ internal static InternalUnknownChatOutputPrediction DeserializeInternalUnknownCh @type = new InternalChatOutputPredictionKind(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUnknownChatOutputPrediction(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalUnknownChatResponseFormat.Serialization.cs b/src/Generated/Models/InternalUnknownChatResponseFormat.Serialization.cs index 02fc947f9..57202ba22 100644 --- a/src/Generated/Models/InternalUnknownChatResponseFormat.Serialization.cs +++ b/src/Generated/Models/InternalUnknownChatResponseFormat.Serialization.cs @@ -54,10 +54,7 @@ internal static InternalUnknownChatResponseFormat DeserializeInternalUnknownChat @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUnknownChatResponseFormat(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalUnknownChunkingStrategy.Serialization.cs b/src/Generated/Models/InternalUnknownChunkingStrategy.Serialization.cs index f1c5ccde0..abbd9adb0 100644 --- a/src/Generated/Models/InternalUnknownChunkingStrategy.Serialization.cs +++ b/src/Generated/Models/InternalUnknownChunkingStrategy.Serialization.cs @@ -58,10 +58,7 @@ internal static InternalUnknownChunkingStrategy DeserializeInternalUnknownChunki @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUnknownChunkingStrategy(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.Serialization.cs b/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.Serialization.cs index 2d9e4a04e..8370f3d78 100644 --- a/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.Serialization.cs +++ b/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.Serialization.cs @@ -61,10 +61,7 @@ internal static InternalUnknownFileChunkingStrategyRequestParamProxy Deserialize @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUnknownFileChunkingStrategyRequestParamProxy(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.Serialization.cs b/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.Serialization.cs index f0b262ddf..8c9e3c87a 100644 --- a/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.Serialization.cs +++ b/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.Serialization.cs @@ -61,10 +61,7 @@ internal static InternalUnknownFileChunkingStrategyResponseParamProxy Deserializ @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUnknownFileChunkingStrategyResponseParamProxy(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalUnknownOmniTypedResponseFormat.Serialization.cs b/src/Generated/Models/InternalUnknownOmniTypedResponseFormat.Serialization.cs index f921f0ade..ebfe5bb1b 100644 --- a/src/Generated/Models/InternalUnknownOmniTypedResponseFormat.Serialization.cs +++ b/src/Generated/Models/InternalUnknownOmniTypedResponseFormat.Serialization.cs @@ -61,10 +61,7 @@ internal static InternalUnknownOmniTypedResponseFormat DeserializeInternalUnknow @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUnknownOmniTypedResponseFormat(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalUnknownResponsesItem.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesItem.Serialization.cs new file mode 100644 index 000000000..18a303a07 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesItem.Serialization.cs @@ -0,0 +1,108 @@ +// + +#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 new file mode 100644 index 000000000..61edc1f89 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesItem.cs @@ -0,0 +1,16 @@ +// + +#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 new file mode 100644 index 000000000..c2982532f --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesMessage.Serialization.cs @@ -0,0 +1,124 @@ +// + +#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; + MessageRole role = 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)) + { + role = new MessageRole(prop.Value.GetString()); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownResponsesMessage(@type, id, additionalBinaryDataProperties, status, role); + } + + 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 new file mode 100644 index 000000000..346c0aae4 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesMessage.cs @@ -0,0 +1,16 @@ +// + +#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, MessageRole role) : base(@type != default ? @type : "unknown", id, additionalBinaryDataProperties, status, role != default ? role : "unknown") + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownResponsesTextFormat.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesTextFormat.Serialization.cs new file mode 100644 index 000000000..486875aaa --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesTextFormat.Serialization.cs @@ -0,0 +1,102 @@ +// + +#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 @type = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + @type = new InternalResponsesTextFormatType(prop.Value.GetString()); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownResponsesTextFormat(@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(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 new file mode 100644 index 000000000..a8cc63802 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesTextFormat.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownResponsesTextFormat : ResponseTextFormat + { + internal InternalUnknownResponsesTextFormat(InternalResponsesTextFormatType @type, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownResponsesTool.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesTool.Serialization.cs new file mode 100644 index 000000000..101f6a5b6 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesTool.Serialization.cs @@ -0,0 +1,102 @@ +// + +#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 new file mode 100644 index 000000000..96869dcb3 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesTool.cs @@ -0,0 +1,16 @@ +// + +#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/InternalUpload.Serialization.cs b/src/Generated/Models/InternalUpload.Serialization.cs index 6ed8b43a3..7fbe9eaa9 100644 --- a/src/Generated/Models/InternalUpload.Serialization.cs +++ b/src/Generated/Models/InternalUpload.Serialization.cs @@ -73,17 +73,10 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(File) && _additionalBinaryDataProperties?.ContainsKey("file") != true) { - if (File != null) - { - writer.WritePropertyName("file"u8); - writer.WriteObjectValue(File, options); - } - else - { - writer.WriteNull("file"u8); - } + writer.WritePropertyName("file"u8); + writer.WriteObjectValue(File, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -189,10 +182,7 @@ internal static InternalUpload DeserializeInternalUpload(JsonElement element, Mo @file = OpenAIFile.DeserializeOpenAIFile(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUpload( id, diff --git a/src/Generated/Models/InternalUploadPart.Serialization.cs b/src/Generated/Models/InternalUploadPart.Serialization.cs index d50ead99d..efbbd709e 100644 --- a/src/Generated/Models/InternalUploadPart.Serialization.cs +++ b/src/Generated/Models/InternalUploadPart.Serialization.cs @@ -51,7 +51,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -118,10 +118,7 @@ internal static InternalUploadPart DeserializeInternalUploadPart(JsonElement ele @object = new InternalUploadPartObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUploadPart(id, createdAt, uploadId, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/InternalVectorStoreFileAttributes.Serialization.cs b/src/Generated/Models/InternalVectorStoreFileAttributes.Serialization.cs new file mode 100644 index 000000000..10bda7a96 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreFileAttributes.Serialization.cs @@ -0,0 +1,120 @@ +// + +#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 new file mode 100644 index 000000000..cccb5c3f8 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreFileAttributes.cs @@ -0,0 +1,33 @@ +// + +#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 36183986f..79438c517 100644 --- a/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.Serialization.cs +++ b/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.Serialization.cs @@ -56,7 +56,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total"u8); writer.WriteNumberValue(Total); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -129,10 +129,7 @@ internal static InternalVectorStoreFileBatchObjectFileCounts DeserializeInternal total = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalVectorStoreFileBatchObjectFileCounts( inProgress, diff --git a/src/Generated/Models/InternalWebSearchContextSize.cs b/src/Generated/Models/InternalWebSearchContextSize.cs new file mode 100644 index 000000000..199fa5b1f --- /dev/null +++ b/src/Generated/Models/InternalWebSearchContextSize.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Internal +{ + internal readonly partial struct InternalWebSearchContextSize : IEquatable + { + private readonly string _value; + private const string LowValue = "low"; + private const string MediumValue = "medium"; + private const string HighValue = "high"; + + public InternalWebSearchContextSize(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static InternalWebSearchContextSize Low { get; } = new InternalWebSearchContextSize(LowValue); + + public static InternalWebSearchContextSize Medium { get; } = new InternalWebSearchContextSize(MediumValue); + + public static InternalWebSearchContextSize High { get; } = new InternalWebSearchContextSize(HighValue); + + public static bool operator ==(InternalWebSearchContextSize left, InternalWebSearchContextSize right) => left.Equals(right); + + public static bool operator !=(InternalWebSearchContextSize left, InternalWebSearchContextSize right) => !left.Equals(right); + + public static implicit operator InternalWebSearchContextSize(string value) => new InternalWebSearchContextSize(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalWebSearchContextSize other && Equals(other); + + public bool Equals(InternalWebSearchContextSize 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/InternalWebSearchLocation.Serialization.cs b/src/Generated/Models/InternalWebSearchLocation.Serialization.cs new file mode 100644 index 000000000..26667440e --- /dev/null +++ b/src/Generated/Models/InternalWebSearchLocation.Serialization.cs @@ -0,0 +1,171 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Internal +{ + internal partial class InternalWebSearchLocation : 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(InternalWebSearchLocation)} does not support writing '{format}' format."); + } + 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); + } + 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 + } + } + } + + InternalWebSearchLocation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual InternalWebSearchLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalWebSearchLocation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalWebSearchLocation(document.RootElement, options); + } + + internal static InternalWebSearchLocation DeserializeInternalWebSearchLocation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string country = default; + string region = default; + string city = default; + string timezone = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + 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 InternalWebSearchLocation(country, region, city, timezone, 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(InternalWebSearchLocation)} does not support writing '{options.Format}' format."); + } + } + + InternalWebSearchLocation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual InternalWebSearchLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalWebSearchLocation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalWebSearchLocation)} does not support reading '{options.Format}' format."); + } + } + + 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/InternalWebSearchLocation.cs b/src/Generated/Models/InternalWebSearchLocation.cs new file mode 100644 index 000000000..7d02c7387 --- /dev/null +++ b/src/Generated/Models/InternalWebSearchLocation.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Internal +{ + internal partial class InternalWebSearchLocation + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalWebSearchLocation() + { + } + + internal InternalWebSearchLocation(string country, string region, string city, string timezone, IDictionary additionalBinaryDataProperties) + { + Country = country; + Region = region; + City = city; + Timezone = timezone; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Country { get; set; } + + public string Region { get; set; } + + public string City { get; set; } + + public string Timezone { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/MessageCollectionOrder.cs b/src/Generated/Models/MessageCollectionOrder.cs deleted file mode 100644 index 6c8a4153c..000000000 --- a/src/Generated/Models/MessageCollectionOrder.cs +++ /dev/null @@ -1,40 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - public readonly partial struct MessageCollectionOrder : IEquatable - { - private readonly string _value; - private const string AscValue = "asc"; - private const string DescValue = "desc"; - - public MessageCollectionOrder(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static bool operator ==(MessageCollectionOrder left, MessageCollectionOrder right) => left.Equals(right); - - public static bool operator !=(MessageCollectionOrder left, MessageCollectionOrder right) => !left.Equals(right); - - public static implicit operator MessageCollectionOrder(string value) => new MessageCollectionOrder(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is MessageCollectionOrder other && Equals(other); - - public bool Equals(MessageCollectionOrder 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/MessageContent.Serialization.cs b/src/Generated/Models/MessageContent.Serialization.cs index f92ee5e27..114ed886a 100644 --- a/src/Generated/Models/MessageContent.Serialization.cs +++ b/src/Generated/Models/MessageContent.Serialization.cs @@ -19,7 +19,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(MessageContent)} does not support writing '{format}' format."); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -50,7 +50,7 @@ protected virtual MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, throw new FormatException($"The model {nameof(MessageContent)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return MessageContent.DeserializeMessageContent(document.RootElement, options); + return DeserializeMessageContent(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -77,7 +77,7 @@ protected virtual MessageContent PersistableModelCreateCore(BinaryData data, Mod case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return MessageContent.DeserializeMessageContent(document.RootElement, options); + return DeserializeMessageContent(document.RootElement, options); } default: throw new FormatException($"The model {nameof(MessageContent)} does not support reading '{options.Format}' format."); @@ -99,7 +99,7 @@ public static explicit operator MessageContent(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return MessageContent.DeserializeMessageContent(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeMessageContent(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/MessageCreationAttachment.Serialization.cs b/src/Generated/Models/MessageCreationAttachment.Serialization.cs index cce95c834..96cad2c3c 100644 --- a/src/Generated/Models/MessageCreationAttachment.Serialization.cs +++ b/src/Generated/Models/MessageCreationAttachment.Serialization.cs @@ -39,9 +39,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("tools") != true) { writer.WritePropertyName("tools"u8); - this.SerializeTools(writer, options); + SerializeTools(writer, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static MessageCreationAttachment DeserializeMessageCreationAttachment(J DeserializeTools(prop, ref tools); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new MessageCreationAttachment(fileId, tools, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/MessageCreationOptions.Serialization.cs b/src/Generated/Models/MessageCreationOptions.Serialization.cs index 24e5ec428..42916a88d 100644 --- a/src/Generated/Models/MessageCreationOptions.Serialization.cs +++ b/src/Generated/Models/MessageCreationOptions.Serialization.cs @@ -29,20 +29,13 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsCollectionDefined(Attachments) && _additionalBinaryDataProperties?.ContainsKey("attachments") != true) { - if (Attachments != null) + writer.WritePropertyName("attachments"u8); + writer.WriteStartArray(); + foreach (MessageCreationAttachment item in Attachments) { - writer.WritePropertyName("attachments"u8); - writer.WriteStartArray(); - foreach (MessageCreationAttachment item in Attachments) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else - { - writer.WriteNull("attachments"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); } if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) { @@ -68,9 +61,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("content") != true) { writer.WritePropertyName("content"u8); - this.SerializeContent(writer, options); + SerializeContent(writer, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -112,7 +105,7 @@ internal static MessageCreationOptions DeserializeMessageCreationOptions(JsonEle } IList attachments = default; IDictionary metadata = default; - Assistants.MessageRole role = default; + MessageRole role = default; IList content = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -167,10 +160,7 @@ internal static MessageCreationOptions DeserializeMessageCreationOptions(JsonEle content = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new MessageCreationOptions(attachments ?? new ChangeTrackingList(), metadata ?? new ChangeTrackingDictionary(), role, content, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/MessageCreationOptions.cs b/src/Generated/Models/MessageCreationOptions.cs index c8c4b234c..387548cdc 100644 --- a/src/Generated/Models/MessageCreationOptions.cs +++ b/src/Generated/Models/MessageCreationOptions.cs @@ -11,7 +11,7 @@ public partial class MessageCreationOptions { private protected IDictionary _additionalBinaryDataProperties; - internal MessageCreationOptions(IList attachments, IDictionary metadata, Assistants.MessageRole role, IList content, IDictionary additionalBinaryDataProperties) + internal MessageCreationOptions(IList attachments, IDictionary metadata, MessageRole role, IList content, IDictionary additionalBinaryDataProperties) { Attachments = attachments; Metadata = metadata; diff --git a/src/Generated/Models/MessageDeletionResult.Serialization.cs b/src/Generated/Models/MessageDeletionResult.Serialization.cs index 89878ba0a..badafc0bf 100644 --- a/src/Generated/Models/MessageDeletionResult.Serialization.cs +++ b/src/Generated/Models/MessageDeletionResult.Serialization.cs @@ -44,9 +44,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static MessageDeletionResult DeserializeMessageDeletionResult(JsonEleme @object = new InternalDeleteMessageResponseObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new MessageDeletionResult(deleted, messageId, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/MessageDeletionResult.cs b/src/Generated/Models/MessageDeletionResult.cs index e2cf6d328..d0d24f34d 100644 --- a/src/Generated/Models/MessageDeletionResult.cs +++ b/src/Generated/Models/MessageDeletionResult.cs @@ -21,7 +21,7 @@ internal MessageDeletionResult(bool deleted, string messageId, InternalDeleteMes { Deleted = deleted; MessageId = messageId; - this.Object = @object; + Object = @object; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/MessageFailureDetails.Serialization.cs b/src/Generated/Models/MessageFailureDetails.Serialization.cs index c76295571..c9c493388 100644 --- a/src/Generated/Models/MessageFailureDetails.Serialization.cs +++ b/src/Generated/Models/MessageFailureDetails.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reason"u8); writer.WriteStringValue(Reason.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static MessageFailureDetails DeserializeMessageFailureDetails(JsonEleme reason = new MessageFailureReason(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new MessageFailureDetails(reason, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/MessageModificationOptions.Serialization.cs b/src/Generated/Models/MessageModificationOptions.Serialization.cs index bcb1eebd4..407856c36 100644 --- a/src/Generated/Models/MessageModificationOptions.Serialization.cs +++ b/src/Generated/Models/MessageModificationOptions.Serialization.cs @@ -43,7 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndObject(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -108,10 +108,7 @@ internal static MessageModificationOptions DeserializeMessageModificationOptions metadata = dictionary; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new MessageModificationOptions(metadata ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/MessageResponseItem.Serialization.cs b/src/Generated/Models/MessageResponseItem.Serialization.cs new file mode 100644 index 000000000..ced07c75b --- /dev/null +++ b/src/Generated/Models/MessageResponseItem.Serialization.cs @@ -0,0 +1,131 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class MessageResponseItem : IJsonModel + { + internal MessageResponseItem() + { + } + + 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); + 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(Role.ToString()); + } + } + + MessageResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (MessageResponseItem)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 MessageResponseItem DeserializeMessageResponseItem(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 InternalResponsesUserMessage.DeserializeInternalResponsesUserMessage(element, options); + case "system": + return InternalResponsesSystemMessage.DeserializeInternalResponsesSystemMessage(element, options); + case "developer": + return InternalResponsesDeveloperMessage.DeserializeInternalResponsesDeveloperMessage(element, options); + case "assistant": + return InternalResponsesAssistantMessage.DeserializeInternalResponsesAssistantMessage(element, options); + } + } + return InternalUnknownResponsesMessage.DeserializeInternalUnknownResponsesMessage(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + 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) => (MessageResponseItem)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"; + + 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 new file mode 100644 index 000000000..6231e6947 --- /dev/null +++ b/src/Generated/Models/MessageResponseItem.cs @@ -0,0 +1,25 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class MessageResponseItem : ResponseItem + { + public MessageResponseItem(MessageRole role) : base(InternalResponsesItemType.Message) + { + Role = role; + } + + internal MessageResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, MessageStatus? status, MessageRole role) : base(@type, id, additionalBinaryDataProperties) + { + Status = status; + Role = role; + } + + public MessageStatus? Status { get; } + } +} diff --git a/src/Generated/Models/MessageRole.Serialization.cs b/src/Generated/Models/MessageRole.Serialization.cs index 33366fef5..9c6718017 100644 --- a/src/Generated/Models/MessageRole.Serialization.cs +++ b/src/Generated/Models/MessageRole.Serialization.cs @@ -8,22 +8,22 @@ namespace OpenAI.Assistants { internal static partial class MessageRoleExtensions { - public static string ToSerialString(this Assistants.MessageRole value) => value switch + public static string ToSerialString(this MessageRole value) => value switch { - Assistants.MessageRole.User => "user", - Assistants.MessageRole.Assistant => "assistant", + MessageRole.User => "user", + MessageRole.Assistant => "assistant", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown MessageRole value.") }; - public static Assistants.MessageRole ToMessageRole(this string value) + public static MessageRole ToMessageRole(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "user")) { - return Assistants.MessageRole.User; + return MessageRole.User; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "assistant")) { - return Assistants.MessageRole.Assistant; + return MessageRole.Assistant; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown MessageRole value."); } diff --git a/src/Generated/Models/MessageRole.cs b/src/Generated/Models/MessageRole.cs new file mode 100644 index 000000000..021ea8070 --- /dev/null +++ b/src/Generated/Models/MessageRole.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + public readonly partial struct MessageRole : IEquatable + { + private readonly string _value; + private const string SystemValue = "system"; + private const string DeveloperValue = "developer"; + private const string UserValue = "user"; + private const string AssistantValue = "assistant"; + + public MessageRole(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static MessageRole System { get; } = new MessageRole(SystemValue); + + public static MessageRole Developer { get; } = new MessageRole(DeveloperValue); + + public static MessageRole User { get; } = new MessageRole(UserValue); + + public static MessageRole Assistant { get; } = new MessageRole(AssistantValue); + + public static bool operator ==(MessageRole left, MessageRole right) => left.Equals(right); + + public static bool operator !=(MessageRole left, MessageRole right) => !left.Equals(right); + + public static implicit operator MessageRole(string value) => new MessageRole(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is MessageRole other && Equals(other); + + public bool Equals(MessageRole 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/MessageStatus.Serialization.cs b/src/Generated/Models/MessageStatus.Serialization.cs new file mode 100644 index 000000000..fa1fda5a8 --- /dev/null +++ b/src/Generated/Models/MessageStatus.Serialization.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + internal static partial class MessageStatusExtensions + { + public static string ToSerialString(this MessageStatus value) => value switch + { + MessageStatus.InProgress => "in_progress", + MessageStatus.Completed => "completed", + MessageStatus.Incomplete => "incomplete", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown MessageStatus value.") + }; + + public static MessageStatus ToMessageStatus(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) + { + return MessageStatus.InProgress; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "completed")) + { + return MessageStatus.Completed; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "incomplete")) + { + return MessageStatus.Incomplete; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown MessageStatus value."); + } + } +} diff --git a/src/Generated/Models/ModelDeletionResult.Serialization.cs b/src/Generated/Models/ModelDeletionResult.Serialization.cs index 71fe7aeca..64c740a58 100644 --- a/src/Generated/Models/ModelDeletionResult.Serialization.cs +++ b/src/Generated/Models/ModelDeletionResult.Serialization.cs @@ -44,9 +44,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static ModelDeletionResult DeserializeModelDeletionResult(JsonElement e @object = new InternalDeleteModelResponseObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ModelDeletionResult(deleted, modelId, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ModelDeletionResult.cs b/src/Generated/Models/ModelDeletionResult.cs index 4949c007d..8ab658d2a 100644 --- a/src/Generated/Models/ModelDeletionResult.cs +++ b/src/Generated/Models/ModelDeletionResult.cs @@ -21,7 +21,7 @@ internal ModelDeletionResult(bool deleted, string modelId, InternalDeleteModelRe { Deleted = deleted; ModelId = modelId; - this.Object = @object; + Object = @object; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ModerationOptions.Serialization.cs b/src/Generated/Models/ModerationOptions.Serialization.cs index 5c837bec3..e54d35e1a 100644 --- a/src/Generated/Models/ModerationOptions.Serialization.cs +++ b/src/Generated/Models/ModerationOptions.Serialization.cs @@ -44,7 +44,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("model"u8); writer.WriteStringValue(Model.Value.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -103,10 +103,7 @@ internal static ModerationOptions DeserializeModerationOptions(JsonElement eleme model = new InternalCreateModerationRequestModel(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ModerationOptions(input, model, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ModerationResult.Serialization.cs b/src/Generated/Models/ModerationResult.Serialization.cs index f889b6dd1..8a5284264 100644 --- a/src/Generated/Models/ModerationResult.Serialization.cs +++ b/src/Generated/Models/ModerationResult.Serialization.cs @@ -24,7 +24,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("flagged"u8); writer.WriteBooleanValue(Flagged); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -55,7 +55,7 @@ protected virtual ModerationResult JsonModelCreateCore(ref Utf8JsonReader reader throw new FormatException($"The model {nameof(ModerationResult)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return ModerationResult.DeserializeModerationResult(document.RootElement, options); + return DeserializeModerationResult(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -82,7 +82,7 @@ protected virtual ModerationResult PersistableModelCreateCore(BinaryData data, M case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return ModerationResult.DeserializeModerationResult(document.RootElement, options); + return DeserializeModerationResult(document.RootElement, options); } default: throw new FormatException($"The model {nameof(ModerationResult)} does not support reading '{options.Format}' format."); @@ -104,7 +104,7 @@ public static explicit operator ModerationResult(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return ModerationResult.DeserializeModerationResult(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeModerationResult(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/ModerationResultCollection.Serialization.cs b/src/Generated/Models/ModerationResultCollection.Serialization.cs index 979673c2b..e2663349f 100644 --- a/src/Generated/Models/ModerationResultCollection.Serialization.cs +++ b/src/Generated/Models/ModerationResultCollection.Serialization.cs @@ -29,7 +29,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("model"u8); writer.WriteStringValue(Model); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -60,7 +60,7 @@ protected virtual ModerationResultCollection JsonModelCreateCore(ref Utf8JsonRea throw new FormatException($"The model {nameof(ModerationResultCollection)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return ModerationResultCollection.DeserializeModerationResultCollection(document.RootElement, options); + return DeserializeModerationResultCollection(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -87,7 +87,7 @@ protected virtual ModerationResultCollection PersistableModelCreateCore(BinaryDa case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return ModerationResultCollection.DeserializeModerationResultCollection(document.RootElement, options); + return DeserializeModerationResultCollection(document.RootElement, options); } default: throw new FormatException($"The model {nameof(ModerationResultCollection)} does not support reading '{options.Format}' format."); @@ -109,7 +109,7 @@ public static explicit operator ModerationResultCollection(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return ModerationResultCollection.DeserializeModerationResultCollection(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeModerationResultCollection(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/OpenAIEmbedding.Serialization.cs b/src/Generated/Models/OpenAIEmbedding.Serialization.cs index a826e0c51..10d1ebbb1 100644 --- a/src/Generated/Models/OpenAIEmbedding.Serialization.cs +++ b/src/Generated/Models/OpenAIEmbedding.Serialization.cs @@ -51,9 +51,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -114,10 +114,7 @@ internal static OpenAIEmbedding DeserializeOpenAIEmbedding(JsonElement element, @object = new InternalEmbeddingObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new OpenAIEmbedding(index, embeddingProperty, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/OpenAIEmbeddingCollection.Serialization.cs b/src/Generated/Models/OpenAIEmbeddingCollection.Serialization.cs index 990343e1b..3ed48f332 100644 --- a/src/Generated/Models/OpenAIEmbeddingCollection.Serialization.cs +++ b/src/Generated/Models/OpenAIEmbeddingCollection.Serialization.cs @@ -32,9 +32,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -65,7 +65,7 @@ protected virtual OpenAIEmbeddingCollection JsonModelCreateCore(ref Utf8JsonRead throw new FormatException($"The model {nameof(OpenAIEmbeddingCollection)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return OpenAIEmbeddingCollection.DeserializeOpenAIEmbeddingCollection(document.RootElement, options); + return DeserializeOpenAIEmbeddingCollection(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -92,7 +92,7 @@ protected virtual OpenAIEmbeddingCollection PersistableModelCreateCore(BinaryDat case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return OpenAIEmbeddingCollection.DeserializeOpenAIEmbeddingCollection(document.RootElement, options); + return DeserializeOpenAIEmbeddingCollection(document.RootElement, options); } default: throw new FormatException($"The model {nameof(OpenAIEmbeddingCollection)} does not support reading '{options.Format}' format."); @@ -114,7 +114,7 @@ public static explicit operator OpenAIEmbeddingCollection(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return OpenAIEmbeddingCollection.DeserializeOpenAIEmbeddingCollection(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeOpenAIEmbeddingCollection(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/OpenAIError.Serialization.cs b/src/Generated/Models/OpenAIError.Serialization.cs index 5cafbaa12..c36c76e3d 100644 --- a/src/Generated/Models/OpenAIError.Serialization.cs +++ b/src/Generated/Models/OpenAIError.Serialization.cs @@ -33,7 +33,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("code") != true) { - if (Code != null) + if (Optional.IsDefined(Code)) { writer.WritePropertyName("code"u8); writer.WriteStringValue(Code); @@ -50,7 +50,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("param") != true) { - if (Param != null) + if (Optional.IsDefined(Param)) { writer.WritePropertyName("param"u8); writer.WriteStringValue(Param); @@ -65,7 +65,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -142,10 +142,7 @@ internal static OpenAIError DeserializeOpenAIError(JsonElement element, ModelRea @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new OpenAIError(code, message, @param, @type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/OpenAIErrorResponse.Serialization.cs b/src/Generated/Models/OpenAIErrorResponse.Serialization.cs index a433d4027..0b01524fb 100644 --- a/src/Generated/Models/OpenAIErrorResponse.Serialization.cs +++ b/src/Generated/Models/OpenAIErrorResponse.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("error"u8); writer.WriteObjectValue(Error, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static OpenAIErrorResponse DeserializeOpenAIErrorResponse(JsonElement e error = OpenAIError.DeserializeOpenAIError(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new OpenAIErrorResponse(error, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/OpenAIFile.Serialization.cs b/src/Generated/Models/OpenAIFile.Serialization.cs index 38a759cfb..360239452 100644 --- a/src/Generated/Models/OpenAIFile.Serialization.cs +++ b/src/Generated/Models/OpenAIFile.Serialization.cs @@ -41,6 +41,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("created_at"u8); writer.WriteNumberValue(CreatedAt, "U"); } + if (Optional.IsDefined(ExpiresAt) && _additionalBinaryDataProperties?.ContainsKey("expires_at") != true) + { + writer.WritePropertyName("expires_at"u8); + writer.WriteNumberValue(ExpiresAt.Value, "U"); + } if (_additionalBinaryDataProperties?.ContainsKey("filename") != true) { writer.WritePropertyName("filename"u8); @@ -54,11 +59,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("bytes") != true) { - if (SizeInBytes != null) + if (Optional.IsDefined(SizeInBytes)) { writer.WritePropertyName("bytes"u8); writer.WriteNumberValue(SizeInBytes.Value); @@ -78,7 +83,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("status_details"u8); writer.WriteStringValue(StatusDetails); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -120,11 +125,12 @@ internal static OpenAIFile DeserializeOpenAIFile(JsonElement element, ModelReade } string id = default; DateTimeOffset createdAt = default; + DateTimeOffset? expiresAt = default; string filename = default; - Files.FilePurpose purpose = default; + FilePurpose purpose = default; InternalOpenAIFileObject @object = default; int? sizeInBytes = default; - Files.FileStatus status = default; + FileStatus status = default; string statusDetails = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -139,6 +145,15 @@ internal static OpenAIFile DeserializeOpenAIFile(JsonElement element, ModelReade createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); continue; } + if (prop.NameEquals("expires_at"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + expiresAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } if (prop.NameEquals("filename"u8)) { filename = prop.Value.GetString(); @@ -174,14 +189,12 @@ internal static OpenAIFile DeserializeOpenAIFile(JsonElement element, ModelReade statusDetails = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new OpenAIFile( id, createdAt, + expiresAt, filename, purpose, @object, diff --git a/src/Generated/Models/OpenAIFile.cs b/src/Generated/Models/OpenAIFile.cs index aad4ac9f8..02309d2b3 100644 --- a/src/Generated/Models/OpenAIFile.cs +++ b/src/Generated/Models/OpenAIFile.cs @@ -11,7 +11,7 @@ public partial class OpenAIFile { private protected IDictionary _additionalBinaryDataProperties; - internal OpenAIFile(string id, DateTimeOffset createdAt, string filename, Files.FilePurpose purpose, int? sizeInBytes, Files.FileStatus status) + internal OpenAIFile(string id, DateTimeOffset createdAt, string filename, FilePurpose purpose, int? sizeInBytes, FileStatus status) { Id = id; CreatedAt = createdAt; @@ -21,13 +21,14 @@ internal OpenAIFile(string id, DateTimeOffset createdAt, string filename, Files. Status = status; } - internal OpenAIFile(string id, DateTimeOffset createdAt, string filename, Files.FilePurpose purpose, InternalOpenAIFileObject @object, int? sizeInBytes, Files.FileStatus status, string statusDetails, IDictionary additionalBinaryDataProperties) + internal OpenAIFile(string id, DateTimeOffset createdAt, DateTimeOffset? expiresAt, string filename, FilePurpose purpose, InternalOpenAIFileObject @object, int? sizeInBytes, FileStatus status, string statusDetails, IDictionary additionalBinaryDataProperties) { Id = id; CreatedAt = createdAt; + ExpiresAt = expiresAt; Filename = filename; Purpose = purpose; - this.Object = @object; + Object = @object; SizeInBytes = sizeInBytes; Status = status; StatusDetails = statusDetails; @@ -38,9 +39,11 @@ internal OpenAIFile(string id, DateTimeOffset createdAt, string filename, Files. public DateTimeOffset CreatedAt { get; } + public DateTimeOffset? ExpiresAt { get; } + public string Filename { get; } - public Files.FilePurpose Purpose { get; } + public FilePurpose Purpose { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/OpenAIFileCollection.Serialization.cs b/src/Generated/Models/OpenAIFileCollection.Serialization.cs index b7a296137..6dfd7aae1 100644 --- a/src/Generated/Models/OpenAIFileCollection.Serialization.cs +++ b/src/Generated/Models/OpenAIFileCollection.Serialization.cs @@ -22,7 +22,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) { @@ -39,7 +39,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -70,7 +70,7 @@ protected virtual OpenAIFileCollection JsonModelCreateCore(ref Utf8JsonReader re throw new FormatException($"The model {nameof(OpenAIFileCollection)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return OpenAIFileCollection.DeserializeOpenAIFileCollection(document.RootElement, options); + return DeserializeOpenAIFileCollection(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -97,7 +97,7 @@ protected virtual OpenAIFileCollection PersistableModelCreateCore(BinaryData dat case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return OpenAIFileCollection.DeserializeOpenAIFileCollection(document.RootElement, options); + return DeserializeOpenAIFileCollection(document.RootElement, options); } default: throw new FormatException($"The model {nameof(OpenAIFileCollection)} does not support reading '{options.Format}' format."); @@ -119,7 +119,7 @@ public static explicit operator OpenAIFileCollection(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return OpenAIFileCollection.DeserializeOpenAIFileCollection(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeOpenAIFileCollection(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/OpenAIModel.Serialization.cs b/src/Generated/Models/OpenAIModel.Serialization.cs index 01de3b396..d2bba1ffe 100644 --- a/src/Generated/Models/OpenAIModel.Serialization.cs +++ b/src/Generated/Models/OpenAIModel.Serialization.cs @@ -44,14 +44,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("created") != true) { writer.WritePropertyName("created"u8); writer.WriteNumberValue(CreatedAt, "U"); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -118,10 +118,7 @@ internal static OpenAIModel DeserializeOpenAIModel(JsonElement element, ModelRea createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new OpenAIModel(id, ownedBy, @object, createdAt, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/OpenAIModel.cs b/src/Generated/Models/OpenAIModel.cs index f531dd90f..fbebf3360 100644 --- a/src/Generated/Models/OpenAIModel.cs +++ b/src/Generated/Models/OpenAIModel.cs @@ -22,7 +22,7 @@ internal OpenAIModel(string id, string ownedBy, InternalModelObject @object, Dat { Id = id; OwnedBy = ownedBy; - this.Object = @object; + Object = @object; CreatedAt = createdAt; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/OpenAIModelCollection.Serialization.cs b/src/Generated/Models/OpenAIModelCollection.Serialization.cs index d072b37c6..87df2c7c5 100644 --- a/src/Generated/Models/OpenAIModelCollection.Serialization.cs +++ b/src/Generated/Models/OpenAIModelCollection.Serialization.cs @@ -22,9 +22,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -55,7 +55,7 @@ protected virtual OpenAIModelCollection JsonModelCreateCore(ref Utf8JsonReader r throw new FormatException($"The model {nameof(OpenAIModelCollection)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return OpenAIModelCollection.DeserializeOpenAIModelCollection(document.RootElement, options); + return DeserializeOpenAIModelCollection(document.RootElement, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); @@ -82,7 +82,7 @@ protected virtual OpenAIModelCollection PersistableModelCreateCore(BinaryData da case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return OpenAIModelCollection.DeserializeOpenAIModelCollection(document.RootElement, options); + return DeserializeOpenAIModelCollection(document.RootElement, options); } default: throw new FormatException($"The model {nameof(OpenAIModelCollection)} does not support reading '{options.Format}' format."); @@ -104,7 +104,7 @@ public static explicit operator OpenAIModelCollection(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return OpenAIModelCollection.DeserializeOpenAIModelCollection(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeOpenAIModelCollection(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/OpenAIResponse.Serialization.cs b/src/Generated/Models/OpenAIResponse.Serialization.cs new file mode 100644 index 000000000..c22bd1af7 --- /dev/null +++ b/src/Generated/Models/OpenAIResponse.Serialization.cs @@ -0,0 +1,533 @@ +// + +#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 OpenAIResponse : IJsonModel + { + internal OpenAIResponse() + { + } + + 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(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 (Optional.IsDefined(Error)) + { + writer.WritePropertyName("error"u8); + writer.WriteObjectValue(Error, options); + } + else + { + writer.WriteNull("error"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("instructions") != true) + { + if (Optional.IsDefined(Instructions)) + { + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(Instructions); + } + else + { + writer.WriteNull("instructions"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (_additionalBinaryDataProperties?.ContainsKey("previous_response_id") != true) + { + if (Optional.IsDefined(PreviousResponseId)) + { + writer.WritePropertyName("previous_response_id"u8); + writer.WriteStringValue(PreviousResponseId); + } + else + { + writer.WriteNull("previous_response_id"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("temperature") != true) + { + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature); + } + if (_additionalBinaryDataProperties?.ContainsKey("tool_choice") != true) + { + writer.WritePropertyName("tool_choice"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(ToolChoice); +#else + using (JsonDocument document = JsonDocument.Parse(ToolChoice)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (_additionalBinaryDataProperties?.ContainsKey("tools") != true) + { + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (ResponseTool item in Tools) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("top_p") != true) + { + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(TopP); + } + if (Optional.IsDefined(Usage) && _additionalBinaryDataProperties?.ContainsKey("usage") != true) + { + writer.WritePropertyName("usage"u8); + writer.WriteObjectValue(Usage, 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("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object.ToString()); + } + if (Optional.IsDefined(EndUserId) && _additionalBinaryDataProperties?.ContainsKey("user") != true) + { + writer.WritePropertyName("user"u8); + writer.WriteStringValue(EndUserId); + } + if (Optional.IsDefined(ReasoningOptions) && _additionalBinaryDataProperties?.ContainsKey("reasoning") != true) + { + writer.WritePropertyName("reasoning"u8); + writer.WriteObjectValue(ReasoningOptions, options); + } + if (Optional.IsDefined(MaxOutputTokenCount) && _additionalBinaryDataProperties?.ContainsKey("max_output_tokens") != true) + { + writer.WritePropertyName("max_output_tokens"u8); + writer.WriteNumberValue(MaxOutputTokenCount.Value); + } + if (Optional.IsDefined(TextOptions) && _additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteObjectValue(TextOptions, options); + } + if (Optional.IsDefined(TruncationMode) && _additionalBinaryDataProperties?.ContainsKey("truncation") != true) + { + writer.WritePropertyName("truncation"u8); + writer.WriteStringValue(TruncationMode.Value.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("incomplete_details") != true) + { + if (Optional.IsDefined(IncompleteStatusDetails)) + { + writer.WritePropertyName("incomplete_details"u8); + writer.WriteObjectValue(IncompleteStatusDetails, options); + } + else + { + writer.WriteNull("incomplete_details"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("output") != true) + { + writer.WritePropertyName("output"u8); + writer.WriteStartArray(); + foreach (ResponseItem item in OutputItems) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("parallel_tool_calls") != true) + { + writer.WritePropertyName("parallel_tool_calls"u8); + writer.WriteBooleanValue(AllowParallelToolCalls); + } + 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 + } + } + } + + OpenAIResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual OpenAIResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(OpenAIResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeOpenAIResponse(document.RootElement, options); + } + + internal static OpenAIResponse DeserializeOpenAIResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string id = default; + DateTimeOffset createdAt = default; + ResponseStatus? status = default; + ResponseError error = default; + string instructions = default; + string model = default; + string previousResponseId = default; + float temperature = default; + BinaryData toolChoice = 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; + ResponseTextOptions textOptions = default; + ResponseTruncationMode? truncationMode = default; + ResponseIncompleteStatusDetails incompleteStatusDetails = default; + IList outputItems = default; + bool allowParallelToolCalls = 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.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + status = prop.Value.GetString().ToResponseStatus(); + continue; + } + if (prop.NameEquals("error"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + error = null; + continue; + } + error = ResponseError.DeserializeResponseError(prop.Value, options); + continue; + } + if (prop.NameEquals("instructions"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + instructions = null; + continue; + } + instructions = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("previous_response_id"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + previousResponseId = null; + continue; + } + previousResponseId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("temperature"u8)) + { + temperature = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("tool_choice"u8)) + { + toolChoice = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("tools"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ResponseTool.DeserializeResponseTool(item, options)); + } + tools = array; + continue; + } + if (prop.NameEquals("top_p"u8)) + { + topP = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("usage"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + usage = ResponseTokenUsage.DeserializeResponseTokenUsage(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("object"u8)) + { + @object = new InternalCreateResponsesResponseObject(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("user"u8)) + { + endUserId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("reasoning"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + reasoningOptions = null; + continue; + } + reasoningOptions = ResponseReasoningOptions.DeserializeResponseReasoningOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("max_output_tokens"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + maxOutputTokenCount = null; + continue; + } + maxOutputTokenCount = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("text"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + textOptions = ResponseTextOptions.DeserializeResponseTextOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("truncation"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + truncationMode = null; + continue; + } + truncationMode = new ResponseTruncationMode(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("incomplete_details"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + incompleteStatusDetails = null; + continue; + } + incompleteStatusDetails = ResponseIncompleteStatusDetails.DeserializeResponseIncompleteStatusDetails(prop.Value, options); + continue; + } + if (prop.NameEquals("output"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ResponseItem.DeserializeResponseItem(item, options)); + } + outputItems = array; + continue; + } + if (prop.NameEquals("parallel_tool_calls"u8)) + { + allowParallelToolCalls = prop.Value.GetBoolean(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new OpenAIResponse( + id, + createdAt, + status, + error, + instructions, + model, + previousResponseId, + temperature, + toolChoice, + tools, + topP, + usage, + metadata, + @object, + endUserId, + reasoningOptions, + maxOutputTokenCount, + textOptions, + truncationMode, + incompleteStatusDetails, + outputItems, + allowParallelToolCalls, + 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(OpenAIResponse)} does not support writing '{options.Format}' format."); + } + } + + OpenAIResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual OpenAIResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeOpenAIResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(OpenAIResponse)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..1c1f591d1 --- /dev/null +++ b/src/Generated/Models/OpenAIResponse.cs @@ -0,0 +1,92 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; + +namespace OpenAI.Responses +{ + public partial class OpenAIResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal OpenAIResponse(string id, DateTimeOffset createdAt, ResponseError error, string instructions, string model, string previousResponseId, float temperature, BinaryData toolChoice, IEnumerable tools, float topP, IDictionary metadata, ResponseIncompleteStatusDetails incompleteStatusDetails, IEnumerable outputItems, bool allowParallelToolCalls) + { + Id = id; + CreatedAt = createdAt; + Error = error; + Instructions = instructions; + Model = model; + PreviousResponseId = previousResponseId; + Temperature = temperature; + ToolChoice = toolChoice; + Tools = tools.ToList(); + TopP = topP; + Metadata = metadata; + IncompleteStatusDetails = incompleteStatusDetails; + OutputItems = outputItems.ToList(); + AllowParallelToolCalls = allowParallelToolCalls; + } + + internal OpenAIResponse(string id, DateTimeOffset createdAt, ResponseStatus? status, ResponseError error, string instructions, string model, string previousResponseId, float temperature, BinaryData toolChoice, 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 allowParallelToolCalls, IDictionary additionalBinaryDataProperties) + { + Id = id; + CreatedAt = createdAt; + Status = status; + Error = error; + Instructions = instructions; + Model = model; + PreviousResponseId = previousResponseId; + Temperature = temperature; + ToolChoice = toolChoice; + Tools = tools; + TopP = topP; + Usage = usage; + Metadata = metadata; + Object = @object; + EndUserId = endUserId; + ReasoningOptions = reasoningOptions; + MaxOutputTokenCount = maxOutputTokenCount; + TextOptions = textOptions; + TruncationMode = truncationMode; + IncompleteStatusDetails = incompleteStatusDetails; + OutputItems = outputItems; + AllowParallelToolCalls = allowParallelToolCalls; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Id { get; } + + public DateTimeOffset CreatedAt { get; } + + public ResponseStatus? Status { get; } + + public ResponseError Error { get; } + + public string Instructions { get; } + + public string Model { get; } + + public string PreviousResponseId { get; } + + public float Temperature { get; } + + public BinaryData ToolChoice { get; } + + public IList Tools { get; } + + public float TopP { get; } + + public ResponseTokenUsage Usage { get; } + + public IDictionary Metadata { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ReasoningResponseItem.Serialization.cs b/src/Generated/Models/ReasoningResponseItem.Serialization.cs new file mode 100644 index 000000000..972d29fd2 --- /dev/null +++ b/src/Generated/Models/ReasoningResponseItem.Serialization.cs @@ -0,0 +1,161 @@ +// + +#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 ReasoningResponseItem : IJsonModel + { + internal ReasoningResponseItem() + { + } + + 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(ReasoningResponseItem)} 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("summary") != true) + { + writer.WritePropertyName("summary"u8); + writer.WriteStartArray(); + foreach (InternalResponsesReasoningItemSummaryElement item in Summary) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + ReasoningResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ReasoningResponseItem)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(ReasoningResponseItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeReasoningResponseItem(document.RootElement, options); + } + + internal static ReasoningResponseItem DeserializeReasoningResponseItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesItemType @type = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + ReasoningStatus? status = default; + IList summary = 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().ToReasoningStatus(); + continue; + } + if (prop.NameEquals("summary"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalResponsesReasoningItemSummaryElement.DeserializeInternalResponsesReasoningItemSummaryElement(item, options)); + } + summary = array; + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ReasoningResponseItem(@type, id, additionalBinaryDataProperties, status, summary); + } + + 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(ReasoningResponseItem)} does not support writing '{options.Format}' format."); + } + } + + ReasoningResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ReasoningResponseItem)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 DeserializeReasoningResponseItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ReasoningResponseItem)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..0c40e712d --- /dev/null +++ b/src/Generated/Models/ReasoningResponseItem.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ReasoningResponseItem : ResponseItem + { + internal ReasoningResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, ReasoningStatus? status, IList summary) : base(@type, id, additionalBinaryDataProperties) + { + Status = status; + Summary = summary; + } + + public ReasoningStatus? Status { get; } + } +} diff --git a/src/Generated/Models/ReasoningStatus.Serialization.cs b/src/Generated/Models/ReasoningStatus.Serialization.cs new file mode 100644 index 000000000..199f186f9 --- /dev/null +++ b/src/Generated/Models/ReasoningStatus.Serialization.cs @@ -0,0 +1,36 @@ +// + +#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/ReferenceResponseItem.Serialization.cs b/src/Generated/Models/ReferenceResponseItem.Serialization.cs new file mode 100644 index 000000000..86b71d788 --- /dev/null +++ b/src/Generated/Models/ReferenceResponseItem.Serialization.cs @@ -0,0 +1,121 @@ +// + +#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 ReferenceResponseItem : 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(ReferenceResponseItem)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + ReferenceResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ReferenceResponseItem)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(ReferenceResponseItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeReferenceResponseItem(document.RootElement, options); + } + + internal static ReferenceResponseItem DeserializeReferenceResponseItem(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 ReferenceResponseItem(@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(ReferenceResponseItem)} does not support writing '{options.Format}' format."); + } + } + + ReferenceResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ReferenceResponseItem)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 DeserializeReferenceResponseItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ReferenceResponseItem)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..11348e698 --- /dev/null +++ b/src/Generated/Models/ReferenceResponseItem.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ReferenceResponseItem : ResponseItem + { + internal ReferenceResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties) : base(@type, id, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/ResponseContentPart.Serialization.cs b/src/Generated/Models/ResponseContentPart.Serialization.cs new file mode 100644 index 000000000..1f1aa1e9d --- /dev/null +++ b/src/Generated/Models/ResponseContentPart.Serialization.cs @@ -0,0 +1,146 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class ResponseContentPart : IJsonModel + { + internal ResponseContentPart() + { + } + + 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(ResponseContentPart)} 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 + } + } + } + + ResponseContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual 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 ResponseContentPart DeserializeResponseContentPart(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 InternalResponsesInputTextContentPart.DeserializeInternalResponsesInputTextContentPart(element, options); + case "input_image": + return InternalResponsesInputImageContentPart.DeserializeInternalResponsesInputImageContentPart(element, options); + case "input_file": + return InternalResponsesInputFileContentPart.DeserializeInternalResponsesInputFileContentPart(element, options); + case "output_text": + return InternalResponsesOutputTextContentPart.DeserializeInternalResponsesOutputTextContentPart(element, options); + case "refusal": + return InternalResponsesOutputRefusalContentPart.DeserializeInternalResponsesOutputRefusalContentPart(element, options); + } + } + return UnknownResponsesContent.DeserializeUnknownResponsesContent(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(ResponseContentPart)} does not support writing '{options.Format}' format."); + } + } + + ResponseContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual 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"; + + 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 new file mode 100644 index 000000000..52c5cd460 --- /dev/null +++ b/src/Generated/Models/ResponseContentPart.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseContentPart + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected ResponseContentPart(ResponseContentPartKind kind) + { + Kind = kind; + } + + internal ResponseContentPart(ResponseContentPartKind kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseContentPartKind.Serialization.cs b/src/Generated/Models/ResponseContentPartKind.Serialization.cs new file mode 100644 index 000000000..dea45607c --- /dev/null +++ b/src/Generated/Models/ResponseContentPartKind.Serialization.cs @@ -0,0 +1,46 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + internal static partial class ResponseContentPartKindExtensions + { + public static string ToSerialString(this ResponseContentPartKind value) => value switch + { + ResponseContentPartKind.InputText => "input_text", + ResponseContentPartKind.InputImage => "input_image", + ResponseContentPartKind.InputFile => "input_file", + ResponseContentPartKind.OutputText => "output_text", + ResponseContentPartKind.Refusal => "refusal", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ResponseContentPartKind value.") + }; + + public static ResponseContentPartKind ToResponseContentPartKind(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "input_text")) + { + return ResponseContentPartKind.InputText; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "input_image")) + { + return ResponseContentPartKind.InputImage; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "input_file")) + { + return ResponseContentPartKind.InputFile; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "output_text")) + { + return ResponseContentPartKind.OutputText; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "refusal")) + { + return ResponseContentPartKind.Refusal; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ResponseContentPartKind value."); + } + } +} diff --git a/src/Generated/Models/ResponseCreationOptions.Serialization.cs b/src/Generated/Models/ResponseCreationOptions.Serialization.cs new file mode 100644 index 000000000..2ec93c9f4 --- /dev/null +++ b/src/Generated/Models/ResponseCreationOptions.Serialization.cs @@ -0,0 +1,473 @@ +// + +#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 ResponseCreationOptions : 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(ResponseCreationOptions)} 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(); + } + 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.IsDefined(PreviousResponseId) && _additionalBinaryDataProperties?.ContainsKey("previous_response_id") != true) + { + writer.WritePropertyName("previous_response_id"u8); + writer.WriteStringValue(PreviousResponseId); + } + if (Optional.IsDefined(Instructions) && _additionalBinaryDataProperties?.ContainsKey("instructions") != true) + { + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(Instructions); + } + 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(ToolChoice) && _additionalBinaryDataProperties?.ContainsKey("tool_choice") != true) + { + writer.WritePropertyName("tool_choice"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(ToolChoice); +#else + using (JsonDocument document = JsonDocument.Parse(ToolChoice)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsCollectionDefined(Include) && _additionalBinaryDataProperties?.ContainsKey("include") != true) + { + writer.WritePropertyName("include"u8); + writer.WriteStartArray(); + foreach (InternalCreateResponsesRequestIncludable item in Include) + { + writer.WriteStringValue(item.ToString()); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStartArray(); + foreach (ResponseItem item in Input) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(Stream) && _additionalBinaryDataProperties?.ContainsKey("stream") != true) + { + writer.WritePropertyName("stream"u8); + writer.WriteBooleanValue(Stream.Value); + } + if (Optional.IsDefined(EndUserId) && _additionalBinaryDataProperties?.ContainsKey("user") != true) + { + writer.WritePropertyName("user"u8); + writer.WriteStringValue(EndUserId); + } + if (Optional.IsDefined(ReasoningOptions) && _additionalBinaryDataProperties?.ContainsKey("reasoning") != true) + { + writer.WritePropertyName("reasoning"u8); + writer.WriteObjectValue(ReasoningOptions, options); + } + if (Optional.IsDefined(MaxOutputTokenCount) && _additionalBinaryDataProperties?.ContainsKey("max_output_tokens") != true) + { + writer.WritePropertyName("max_output_tokens"u8); + writer.WriteNumberValue(MaxOutputTokenCount.Value); + } + if (Optional.IsDefined(TextOptions) && _additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteObjectValue(TextOptions, options); + } + if (Optional.IsDefined(TruncationMode) && _additionalBinaryDataProperties?.ContainsKey("truncation") != true) + { + writer.WritePropertyName("truncation"u8); + writer.WriteStringValue(TruncationMode.Value.ToString()); + } + if (Optional.IsDefined(AllowParallelToolCalls) && _additionalBinaryDataProperties?.ContainsKey("parallel_tool_calls") != true) + { + writer.WritePropertyName("parallel_tool_calls"u8); + writer.WriteBooleanValue(AllowParallelToolCalls.Value); + } + if (Optional.IsDefined(StoredOutputEnabled) && _additionalBinaryDataProperties?.ContainsKey("store") != true) + { + writer.WritePropertyName("store"u8); + writer.WriteBooleanValue(StoredOutputEnabled.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 + } + } + } + + ResponseCreationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual ResponseCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseCreationOptions)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseCreationOptions(document.RootElement, options); + } + + internal static ResponseCreationOptions DeserializeResponseCreationOptions(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IDictionary metadata = default; + float? temperature = default; + float? topP = default; + string previousResponseId = default; + string instructions = default; + IList tools = default; + BinaryData toolChoice = default; + IList include = default; + InternalCreateResponsesRequestModel model = default; + IList input = default; + bool? stream = default; + string endUserId = default; + ResponseReasoningOptions reasoningOptions = default; + int? maxOutputTokenCount = default; + ResponseTextOptions textOptions = default; + ResponseTruncationMode? truncationMode = default; + bool? allowParallelToolCalls = default; + bool? storedOutputEnabled = 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; + } + 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("previous_response_id"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + previousResponseId = null; + continue; + } + previousResponseId = prop.Value.GetString(); + 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()) + { + array.Add(ResponseTool.DeserializeResponseTool(item, options)); + } + tools = array; + continue; + } + if (prop.NameEquals("tool_choice"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + toolChoice = BinaryData.FromString(prop.Value.GetRawText()); + 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 InternalCreateResponsesRequestIncludable(item.GetString())); + } + include = array; + continue; + } + if (prop.NameEquals("model"u8)) + { + model = new InternalCreateResponsesRequestModel(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("input"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ResponseItem.DeserializeResponseItem(item, options)); + } + input = array; + continue; + } + if (prop.NameEquals("stream"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + stream = null; + continue; + } + stream = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("user"u8)) + { + endUserId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("reasoning"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + reasoningOptions = ResponseReasoningOptions.DeserializeResponseReasoningOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("max_output_tokens"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + maxOutputTokenCount = null; + continue; + } + maxOutputTokenCount = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("text"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + textOptions = ResponseTextOptions.DeserializeResponseTextOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("truncation"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + truncationMode = null; + continue; + } + truncationMode = new ResponseTruncationMode(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("parallel_tool_calls"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + allowParallelToolCalls = null; + continue; + } + allowParallelToolCalls = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("store"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + storedOutputEnabled = null; + continue; + } + storedOutputEnabled = prop.Value.GetBoolean(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ResponseCreationOptions( + metadata ?? new ChangeTrackingDictionary(), + temperature, + topP, + previousResponseId, + instructions, + tools ?? new ChangeTrackingList(), + toolChoice, + include ?? new ChangeTrackingList(), + model, + input, + stream, + endUserId, + reasoningOptions, + maxOutputTokenCount, + textOptions, + truncationMode, + allowParallelToolCalls, + storedOutputEnabled, + 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(ResponseCreationOptions)} does not support writing '{options.Format}' format."); + } + } + + ResponseCreationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual ResponseCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseCreationOptions(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseCreationOptions)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..e67f79cb5 --- /dev/null +++ b/src/Generated/Models/ResponseCreationOptions.cs @@ -0,0 +1,57 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseCreationOptions + { + private protected IDictionary _additionalBinaryDataProperties; + + internal ResponseCreationOptions(IDictionary metadata, float? temperature, float? topP, string previousResponseId, string instructions, IList tools, BinaryData toolChoice, IList include, InternalCreateResponsesRequestModel model, IList input, bool? stream, string endUserId, ResponseReasoningOptions reasoningOptions, int? maxOutputTokenCount, ResponseTextOptions textOptions, ResponseTruncationMode? truncationMode, bool? allowParallelToolCalls, bool? storedOutputEnabled, IDictionary additionalBinaryDataProperties) + { + Metadata = metadata; + Temperature = temperature; + TopP = topP; + PreviousResponseId = previousResponseId; + Instructions = instructions; + Tools = tools; + ToolChoice = toolChoice; + Include = include; + Model = model; + Input = input; + Stream = stream; + EndUserId = endUserId; + ReasoningOptions = reasoningOptions; + MaxOutputTokenCount = maxOutputTokenCount; + TextOptions = textOptions; + TruncationMode = truncationMode; + AllowParallelToolCalls = allowParallelToolCalls; + StoredOutputEnabled = storedOutputEnabled; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public IDictionary Metadata { get; } + + public float? Temperature { get; set; } + + public float? TopP { get; set; } + + public string PreviousResponseId { get; set; } + + public string Instructions { get; set; } + + public IList Tools { get; set; } + + public BinaryData ToolChoice { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseDeletionResult.Serialization.cs b/src/Generated/Models/ResponseDeletionResult.Serialization.cs new file mode 100644 index 000000000..9c242dcab --- /dev/null +++ b/src/Generated/Models/ResponseDeletionResult.Serialization.cs @@ -0,0 +1,164 @@ +// + +#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 ResponseDeletionResult : IJsonModel + { + internal ResponseDeletionResult() + { + } + + 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(ResponseDeletionResult)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + 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 + } + } + } + + ResponseDeletionResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual ResponseDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseDeletionResult)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseDeletionResult(document.RootElement, options); + } + + internal static ResponseDeletionResult DeserializeResponseDeletionResult(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string id = default; + bool deleted = default; + InternalDeleteResponseResponseObject @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("deleted"u8)) + { + deleted = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = new InternalDeleteResponseResponseObject(prop.Value.GetString()); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ResponseDeletionResult(id, deleted, @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(ResponseDeletionResult)} does not support writing '{options.Format}' format."); + } + } + + ResponseDeletionResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual ResponseDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseDeletionResult(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseDeletionResult)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..f598f9d29 --- /dev/null +++ b/src/Generated/Models/ResponseDeletionResult.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseDeletionResult + { + private protected IDictionary _additionalBinaryDataProperties; + + internal ResponseDeletionResult(string id) + { + Id = id; + } + + internal ResponseDeletionResult(string id, bool deleted, InternalDeleteResponseResponseObject @object, IDictionary additionalBinaryDataProperties) + { + Id = id; + Deleted = deleted; + Object = @object; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Id { get; } + + public bool Deleted { get; } = true; + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseError.Serialization.cs b/src/Generated/Models/ResponseError.Serialization.cs new file mode 100644 index 000000000..4d2ea6944 --- /dev/null +++ b/src/Generated/Models/ResponseError.Serialization.cs @@ -0,0 +1,153 @@ +// + +#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 ResponseError : IJsonModel + { + internal ResponseError() + { + } + + 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(ResponseError)} 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 != 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 + } + } + } + + ResponseError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual ResponseError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseError)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseError(document.RootElement, options); + } + + internal static ResponseError DeserializeResponseError(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; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ResponseError(code, 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(ResponseError)} does not support writing '{options.Format}' format."); + } + } + + ResponseError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual ResponseError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseError(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseError)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..02c73a4b3 --- /dev/null +++ b/src/Generated/Models/ResponseError.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseError + { + private protected IDictionary _additionalBinaryDataProperties; + + internal ResponseError(string code, string message) + { + Code = code; + Message = message; + } + + internal ResponseError(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/ResponseImageDetailLevel.cs b/src/Generated/Models/ResponseImageDetailLevel.cs new file mode 100644 index 000000000..20fa85913 --- /dev/null +++ b/src/Generated/Models/ResponseImageDetailLevel.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + public readonly partial struct ResponseImageDetailLevel : IEquatable + { + private readonly string _value; + private const string LowValue = "low"; + private const string HighValue = "high"; + private const string AutoValue = "auto"; + + public ResponseImageDetailLevel(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static ResponseImageDetailLevel Low { get; } = new ResponseImageDetailLevel(LowValue); + + public static ResponseImageDetailLevel High { get; } = new ResponseImageDetailLevel(HighValue); + + public static ResponseImageDetailLevel Auto { get; } = new ResponseImageDetailLevel(AutoValue); + + public static bool operator ==(ResponseImageDetailLevel left, ResponseImageDetailLevel right) => left.Equals(right); + + public static bool operator !=(ResponseImageDetailLevel left, ResponseImageDetailLevel right) => !left.Equals(right); + + public static implicit operator ResponseImageDetailLevel(string value) => new ResponseImageDetailLevel(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is ResponseImageDetailLevel other && Equals(other); + + public bool Equals(ResponseImageDetailLevel 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/ResponseIncompleteStatusDetails.Serialization.cs b/src/Generated/Models/ResponseIncompleteStatusDetails.Serialization.cs new file mode 100644 index 000000000..2da6b968c --- /dev/null +++ b/src/Generated/Models/ResponseIncompleteStatusDetails.Serialization.cs @@ -0,0 +1,142 @@ +// + +#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 ResponseIncompleteStatusDetails : 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(ResponseIncompleteStatusDetails)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Reason) && _additionalBinaryDataProperties?.ContainsKey("reason") != true) + { + writer.WritePropertyName("reason"u8); + writer.WriteStringValue(Reason.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 + } + } + } + + ResponseIncompleteStatusDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual ResponseIncompleteStatusDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseIncompleteStatusDetails)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseIncompleteStatusDetails(document.RootElement, options); + } + + internal static ResponseIncompleteStatusDetails DeserializeResponseIncompleteStatusDetails(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ResponseIncompleteStatusReason? reason = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("reason"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + reason = new ResponseIncompleteStatusReason(prop.Value.GetString()); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ResponseIncompleteStatusDetails(reason, 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(ResponseIncompleteStatusDetails)} does not support writing '{options.Format}' format."); + } + } + + ResponseIncompleteStatusDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual ResponseIncompleteStatusDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseIncompleteStatusDetails(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseIncompleteStatusDetails)} does not support reading '{options.Format}' format."); + } + } + + 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/ResponseIncompleteStatusDetails.cs b/src/Generated/Models/ResponseIncompleteStatusDetails.cs new file mode 100644 index 000000000..bf47b53d4 --- /dev/null +++ b/src/Generated/Models/ResponseIncompleteStatusDetails.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseIncompleteStatusDetails + { + private protected IDictionary _additionalBinaryDataProperties; + + internal ResponseIncompleteStatusDetails() + { + } + + internal ResponseIncompleteStatusDetails(ResponseIncompleteStatusReason? reason, IDictionary additionalBinaryDataProperties) + { + Reason = reason; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public ResponseIncompleteStatusReason? Reason { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseIncompleteStatusReason.cs b/src/Generated/Models/ResponseIncompleteStatusReason.cs new file mode 100644 index 000000000..09c9136b3 --- /dev/null +++ b/src/Generated/Models/ResponseIncompleteStatusReason.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + public readonly partial struct ResponseIncompleteStatusReason : IEquatable + { + private readonly string _value; + private const string MaxOutputTokensValue = "max_output_tokens"; + private const string ContentFilterValue = "content_filter"; + + public ResponseIncompleteStatusReason(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static ResponseIncompleteStatusReason MaxOutputTokens { get; } = new ResponseIncompleteStatusReason(MaxOutputTokensValue); + + public static ResponseIncompleteStatusReason ContentFilter { get; } = new ResponseIncompleteStatusReason(ContentFilterValue); + + public static bool operator ==(ResponseIncompleteStatusReason left, ResponseIncompleteStatusReason right) => left.Equals(right); + + public static bool operator !=(ResponseIncompleteStatusReason left, ResponseIncompleteStatusReason right) => !left.Equals(right); + + public static implicit operator ResponseIncompleteStatusReason(string value) => new ResponseIncompleteStatusReason(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is ResponseIncompleteStatusReason other && Equals(other); + + public bool Equals(ResponseIncompleteStatusReason 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/ResponseItem.Serialization.cs b/src/Generated/Models/ResponseItem.Serialization.cs new file mode 100644 index 000000000..1be232552 --- /dev/null +++ b/src/Generated/Models/ResponseItem.Serialization.cs @@ -0,0 +1,159 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class ResponseItem : IJsonModel + { + internal ResponseItem() + { + } + + 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(ResponseItem)} 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 + } + } + } + + ResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual 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 ResponseItem DeserializeResponseItem(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 MessageResponseItem.DeserializeMessageResponseItem(element, options); + case "function_call": + return FunctionCallResponseItem.DeserializeFunctionCallResponseItem(element, options); + case "function_call_output": + return FunctionCallOutputResponseItem.DeserializeFunctionCallOutputResponseItem(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 "reasoning": + return ReasoningResponseItem.DeserializeReasoningResponseItem(element, options); + } + } + return InternalUnknownResponsesItem.DeserializeInternalUnknownResponsesItem(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(ResponseItem)} does not support writing '{options.Format}' format."); + } + } + + ResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual 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"; + + 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 new file mode 100644 index 000000000..327ba454f --- /dev/null +++ b/src/Generated/Models/ResponseItem.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseItem + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected ResponseItem(InternalResponsesItemType @type) + { + Type = @type; + } + + internal ResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties) + { + Type = @type; + Id = id; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalResponsesItemType Type { get; set; } + + public string Id { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseMessageAnnotation.Serialization.cs b/src/Generated/Models/ResponseMessageAnnotation.Serialization.cs new file mode 100644 index 000000000..bc929438d --- /dev/null +++ b/src/Generated/Models/ResponseMessageAnnotation.Serialization.cs @@ -0,0 +1,142 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class ResponseMessageAnnotation : IJsonModel + { + internal ResponseMessageAnnotation() + { + } + + 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(ResponseMessageAnnotation)} 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 + } + } + } + + ResponseMessageAnnotation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual 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 ResponseMessageAnnotation DeserializeResponseMessageAnnotation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "file_citation": + return InternalResponsesMessageAnnotationFileCitation.DeserializeInternalResponsesMessageAnnotationFileCitation(element, options); + case "url_citation": + return InternalResponsesMessageAnnotationUrlCitation.DeserializeInternalResponsesMessageAnnotationUrlCitation(element, options); + case "file_path": + return InternalResponsesMessageAnnotationFilePath.DeserializeInternalResponsesMessageAnnotationFilePath(element, options); + } + } + return UnknownResponsesOutputTextAnnotation.DeserializeUnknownResponsesOutputTextAnnotation(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(ResponseMessageAnnotation)} does not support writing '{options.Format}' format."); + } + } + + ResponseMessageAnnotation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual 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"; + + 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 new file mode 100644 index 000000000..9fd5c7f85 --- /dev/null +++ b/src/Generated/Models/ResponseMessageAnnotation.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseMessageAnnotation + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected ResponseMessageAnnotation(ResponseMessageAnnotationKind kind) + { + Kind = kind; + } + + internal ResponseMessageAnnotation(ResponseMessageAnnotationKind kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseMessageAnnotationKind.Serialization.cs b/src/Generated/Models/ResponseMessageAnnotationKind.Serialization.cs new file mode 100644 index 000000000..b7cbb0be4 --- /dev/null +++ b/src/Generated/Models/ResponseMessageAnnotationKind.Serialization.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + internal static partial class ResponseMessageAnnotationKindExtensions + { + public static string ToSerialString(this ResponseMessageAnnotationKind value) => value switch + { + ResponseMessageAnnotationKind.FileCitation => "file_citation", + ResponseMessageAnnotationKind.UriCitation => "url_citation", + ResponseMessageAnnotationKind.FilePath => "file_path", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ResponseMessageAnnotationKind value.") + }; + + public static ResponseMessageAnnotationKind ToResponseMessageAnnotationKind(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "file_citation")) + { + return ResponseMessageAnnotationKind.FileCitation; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "url_citation")) + { + return ResponseMessageAnnotationKind.UriCitation; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "file_path")) + { + return ResponseMessageAnnotationKind.FilePath; + } + 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 new file mode 100644 index 000000000..b591f822b --- /dev/null +++ b/src/Generated/Models/ResponseOutputTokenUsageDetails.Serialization.cs @@ -0,0 +1,142 @@ +// + +#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 ResponseOutputTokenUsageDetails : IJsonModel + { + internal ResponseOutputTokenUsageDetails() + { + } + + 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(ResponseOutputTokenUsageDetails)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("reasoning_tokens") != true) + { + writer.WritePropertyName("reasoning_tokens"u8); + writer.WriteNumberValue(ReasoningTokenCount); + } + 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 + } + } + } + + ResponseOutputTokenUsageDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual ResponseOutputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseOutputTokenUsageDetails)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseOutputTokenUsageDetails(document.RootElement, options); + } + + internal static ResponseOutputTokenUsageDetails DeserializeResponseOutputTokenUsageDetails(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + int reasoningTokenCount = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("reasoning_tokens"u8)) + { + reasoningTokenCount = prop.Value.GetInt32(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ResponseOutputTokenUsageDetails(reasoningTokenCount, 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(ResponseOutputTokenUsageDetails)} does not support writing '{options.Format}' format."); + } + } + + ResponseOutputTokenUsageDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual ResponseOutputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseOutputTokenUsageDetails(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseOutputTokenUsageDetails)} does not support reading '{options.Format}' format."); + } + } + + 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/ResponseOutputTokenUsageDetails.cs b/src/Generated/Models/ResponseOutputTokenUsageDetails.cs new file mode 100644 index 000000000..e8e81ce5b --- /dev/null +++ b/src/Generated/Models/ResponseOutputTokenUsageDetails.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseOutputTokenUsageDetails + { + private protected IDictionary _additionalBinaryDataProperties; + + internal ResponseOutputTokenUsageDetails(int reasoningTokenCount) + { + ReasoningTokenCount = reasoningTokenCount; + } + + internal ResponseOutputTokenUsageDetails(int reasoningTokenCount, IDictionary additionalBinaryDataProperties) + { + ReasoningTokenCount = reasoningTokenCount; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseReasoningEffortLevel.cs b/src/Generated/Models/ResponseReasoningEffortLevel.cs new file mode 100644 index 000000000..e29f302ae --- /dev/null +++ b/src/Generated/Models/ResponseReasoningEffortLevel.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + public readonly partial struct ResponseReasoningEffortLevel : IEquatable + { + private readonly string _value; + private const string LowValue = "low"; + private const string MediumValue = "medium"; + private const string HighValue = "high"; + + public ResponseReasoningEffortLevel(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static ResponseReasoningEffortLevel Low { get; } = new ResponseReasoningEffortLevel(LowValue); + + public static ResponseReasoningEffortLevel Medium { get; } = new ResponseReasoningEffortLevel(MediumValue); + + public static ResponseReasoningEffortLevel High { get; } = new ResponseReasoningEffortLevel(HighValue); + + public static bool operator ==(ResponseReasoningEffortLevel left, ResponseReasoningEffortLevel right) => left.Equals(right); + + public static bool operator !=(ResponseReasoningEffortLevel left, ResponseReasoningEffortLevel right) => !left.Equals(right); + + public static implicit operator ResponseReasoningEffortLevel(string value) => new ResponseReasoningEffortLevel(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is ResponseReasoningEffortLevel other && Equals(other); + + public bool Equals(ResponseReasoningEffortLevel 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/ResponseReasoningOptions.Serialization.cs b/src/Generated/Models/ResponseReasoningOptions.Serialization.cs new file mode 100644 index 000000000..3993dd6ac --- /dev/null +++ b/src/Generated/Models/ResponseReasoningOptions.Serialization.cs @@ -0,0 +1,166 @@ +// + +#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 ResponseReasoningOptions : 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(ResponseReasoningOptions)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("effort") != true) + { + if (Optional.IsDefined(ReasoningEffortLevel)) + { + writer.WritePropertyName("effort"u8); + writer.WriteStringValue(ReasoningEffortLevel.Value.ToString()); + } + else + { + writer.WriteNull("effort"u8); + } + } + if (Optional.IsDefined(ReasoningSummaryVerbosity) && _additionalBinaryDataProperties?.ContainsKey("generate_summary") != true) + { + writer.WritePropertyName("generate_summary"u8); + writer.WriteStringValue(ReasoningSummaryVerbosity.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 + } + } + } + + ResponseReasoningOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual ResponseReasoningOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseReasoningOptions)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseReasoningOptions(document.RootElement, options); + } + + internal static ResponseReasoningOptions DeserializeResponseReasoningOptions(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ResponseReasoningEffortLevel? reasoningEffortLevel = default; + ResponseReasoningSummaryVerbosity? reasoningSummaryVerbosity = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("effort"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + reasoningEffortLevel = null; + continue; + } + reasoningEffortLevel = new ResponseReasoningEffortLevel(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("generate_summary"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + reasoningSummaryVerbosity = null; + continue; + } + reasoningSummaryVerbosity = new ResponseReasoningSummaryVerbosity(prop.Value.GetString()); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ResponseReasoningOptions(reasoningEffortLevel, reasoningSummaryVerbosity, 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(ResponseReasoningOptions)} does not support writing '{options.Format}' format."); + } + } + + ResponseReasoningOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual ResponseReasoningOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseReasoningOptions(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseReasoningOptions)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..b1ba483d3 --- /dev/null +++ b/src/Generated/Models/ResponseReasoningOptions.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseReasoningOptions + { + private protected IDictionary _additionalBinaryDataProperties; + + public ResponseReasoningOptions(ResponseReasoningEffortLevel? reasoningEffortLevel) + { + ReasoningEffortLevel = reasoningEffortLevel; + } + + internal ResponseReasoningOptions(ResponseReasoningEffortLevel? reasoningEffortLevel, ResponseReasoningSummaryVerbosity? reasoningSummaryVerbosity, IDictionary additionalBinaryDataProperties) + { + ReasoningEffortLevel = reasoningEffortLevel; + ReasoningSummaryVerbosity = reasoningSummaryVerbosity; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseReasoningSummaryVerbosity.cs b/src/Generated/Models/ResponseReasoningSummaryVerbosity.cs new file mode 100644 index 000000000..1562b0816 --- /dev/null +++ b/src/Generated/Models/ResponseReasoningSummaryVerbosity.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + public readonly partial struct ResponseReasoningSummaryVerbosity : IEquatable + { + private readonly string _value; + private const string ConciseValue = "concise"; + private const string DetailedValue = "detailed"; + + public ResponseReasoningSummaryVerbosity(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static ResponseReasoningSummaryVerbosity Concise { get; } = new ResponseReasoningSummaryVerbosity(ConciseValue); + + public static ResponseReasoningSummaryVerbosity Detailed { get; } = new ResponseReasoningSummaryVerbosity(DetailedValue); + + public static bool operator ==(ResponseReasoningSummaryVerbosity left, ResponseReasoningSummaryVerbosity right) => left.Equals(right); + + public static bool operator !=(ResponseReasoningSummaryVerbosity left, ResponseReasoningSummaryVerbosity right) => !left.Equals(right); + + public static implicit operator ResponseReasoningSummaryVerbosity(string value) => new ResponseReasoningSummaryVerbosity(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is ResponseReasoningSummaryVerbosity other && Equals(other); + + public bool Equals(ResponseReasoningSummaryVerbosity 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/ResponseStatus.Serialization.cs b/src/Generated/Models/ResponseStatus.Serialization.cs new file mode 100644 index 000000000..4c749c4a9 --- /dev/null +++ b/src/Generated/Models/ResponseStatus.Serialization.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + 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.Incomplete => "incomplete", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ResponseStatus value.") + }; + + public static ResponseStatus ToResponseStatus(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "completed")) + { + return ResponseStatus.Completed; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) + { + return ResponseStatus.InProgress; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "failed")) + { + return ResponseStatus.Failed; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "incomplete")) + { + return ResponseStatus.Incomplete; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ResponseStatus value."); + } + } +} diff --git a/src/Generated/Models/ResponseTextFormat.Serialization.cs b/src/Generated/Models/ResponseTextFormat.Serialization.cs new file mode 100644 index 000000000..8cdb79b8c --- /dev/null +++ b/src/Generated/Models/ResponseTextFormat.Serialization.cs @@ -0,0 +1,142 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class ResponseTextFormat : IJsonModel + { + internal ResponseTextFormat() + { + } + + 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(ResponseTextFormat)} 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 + } + } + } + + ResponseTextFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual 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 ResponseTextFormat DeserializeResponseTextFormat(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 InternalResponsesTextFormatText.DeserializeInternalResponsesTextFormatText(element, options); + case "json_object": + return InternalResponsesTextFormatJsonObject.DeserializeInternalResponsesTextFormatJsonObject(element, options); + case "json_schema": + return InternalResponsesTextFormatJsonSchema.DeserializeInternalResponsesTextFormatJsonSchema(element, options); + } + } + return InternalUnknownResponsesTextFormat.DeserializeInternalUnknownResponsesTextFormat(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(ResponseTextFormat)} does not support writing '{options.Format}' format."); + } + } + + ResponseTextFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual 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"; + + 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/ResponseTextFormat.cs b/src/Generated/Models/ResponseTextFormat.cs new file mode 100644 index 000000000..c1f994a74 --- /dev/null +++ b/src/Generated/Models/ResponseTextFormat.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseTextFormat + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected ResponseTextFormat(InternalResponsesTextFormatType @type) + { + Type = @type; + } + + internal ResponseTextFormat(InternalResponsesTextFormatType @type, IDictionary additionalBinaryDataProperties) + { + Type = @type; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalResponsesTextFormatType Type { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseTextOptions.Serialization.cs b/src/Generated/Models/ResponseTextOptions.Serialization.cs new file mode 100644 index 000000000..6da104a8d --- /dev/null +++ b/src/Generated/Models/ResponseTextOptions.Serialization.cs @@ -0,0 +1,142 @@ +// + +#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 ResponseTextOptions : 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(ResponseTextOptions)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("format") != true) + { + writer.WritePropertyName("format"u8); + writer.WriteObjectValue(ResponseFormat, 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 + } + } + } + + ResponseTextOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual ResponseTextOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseTextOptions)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseTextOptions(document.RootElement, options); + } + + internal static ResponseTextOptions DeserializeResponseTextOptions(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ResponseTextFormat responseFormat = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + responseFormat = ResponseTextFormat.DeserializeResponseTextFormat(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ResponseTextOptions(responseFormat, 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(ResponseTextOptions)} does not support writing '{options.Format}' format."); + } + } + + ResponseTextOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual ResponseTextOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseTextOptions(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseTextOptions)} does not support reading '{options.Format}' format."); + } + } + + 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/ChatMessageContent.cs b/src/Generated/Models/ResponseTextOptions.cs similarity index 61% rename from src/Generated/Models/ChatMessageContent.cs rename to src/Generated/Models/ResponseTextOptions.cs index c3e8dec13..b85d11dce 100644 --- a/src/Generated/Models/ChatMessageContent.cs +++ b/src/Generated/Models/ResponseTextOptions.cs @@ -5,14 +5,19 @@ using System; using System.Collections.Generic; -namespace OpenAI.Chat +namespace OpenAI.Responses { - public partial class ChatMessageContent + public partial class ResponseTextOptions { private protected IDictionary _additionalBinaryDataProperties; - internal ChatMessageContent(IDictionary additionalBinaryDataProperties) + public ResponseTextOptions() { + } + + internal ResponseTextOptions(ResponseTextFormat responseFormat, IDictionary additionalBinaryDataProperties) + { + ResponseFormat = responseFormat; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ResponseTokenUsage.Serialization.cs b/src/Generated/Models/ResponseTokenUsage.Serialization.cs new file mode 100644 index 000000000..677646dc7 --- /dev/null +++ b/src/Generated/Models/ResponseTokenUsage.Serialization.cs @@ -0,0 +1,175 @@ +// + +#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 ResponseTokenUsage : IJsonModel + { + internal ResponseTokenUsage() + { + } + + 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(ResponseTokenUsage)} 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("output_tokens_details") != true) + { + writer.WritePropertyName("output_tokens_details"u8); + writer.WriteObjectValue(OutputTokenDetails, 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 + } + } + } + + ResponseTokenUsage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual ResponseTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseTokenUsage)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseTokenUsage(document.RootElement, options); + } + + internal static ResponseTokenUsage DeserializeResponseTokenUsage(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + int inputTokenCount = default; + int outputTokenCount = default; + int totalTokenCount = default; + ResponseOutputTokenUsageDetails outputTokenDetails = 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("output_tokens_details"u8)) + { + outputTokenDetails = ResponseOutputTokenUsageDetails.DeserializeResponseOutputTokenUsageDetails(prop.Value, options); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ResponseTokenUsage(inputTokenCount, outputTokenCount, totalTokenCount, outputTokenDetails, 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(ResponseTokenUsage)} does not support writing '{options.Format}' format."); + } + } + + ResponseTokenUsage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual ResponseTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseTokenUsage(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseTokenUsage)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..8d02b4667 --- /dev/null +++ b/src/Generated/Models/ResponseTokenUsage.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseTokenUsage + { + private protected IDictionary _additionalBinaryDataProperties; + + internal ResponseTokenUsage(int inputTokenCount, int outputTokenCount, int totalTokenCount, ResponseOutputTokenUsageDetails outputTokenDetails) + { + InputTokenCount = inputTokenCount; + OutputTokenCount = outputTokenCount; + TotalTokenCount = totalTokenCount; + OutputTokenDetails = outputTokenDetails; + } + + internal ResponseTokenUsage(int inputTokenCount, int outputTokenCount, int totalTokenCount, ResponseOutputTokenUsageDetails outputTokenDetails, IDictionary additionalBinaryDataProperties) + { + InputTokenCount = inputTokenCount; + OutputTokenCount = outputTokenCount; + TotalTokenCount = totalTokenCount; + OutputTokenDetails = outputTokenDetails; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseTool.Serialization.cs b/src/Generated/Models/ResponseTool.Serialization.cs new file mode 100644 index 000000000..91f4c8b72 --- /dev/null +++ b/src/Generated/Models/ResponseTool.Serialization.cs @@ -0,0 +1,144 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class ResponseTool : IJsonModel + { + internal ResponseTool() + { + } + + 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(ResponseTool)} 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 + } + } + } + + ResponseTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual 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 ResponseTool DeserializeResponseTool(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 InternalResponsesFunctionTool.DeserializeInternalResponsesFunctionTool(element, options); + case "file_search": + return InternalResponsesFileSearchTool.DeserializeInternalResponsesFileSearchTool(element, options); + case "web_search_preview": + return InternalResponsesWebSearchTool.DeserializeInternalResponsesWebSearchTool(element, options); + case "computer_use_preview": + return InternalResponsesComputerTool.DeserializeInternalResponsesComputerTool(element, options); + } + } + return InternalUnknownResponsesTool.DeserializeInternalUnknownResponsesTool(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(ResponseTool)} does not support writing '{options.Format}' format."); + } + } + + ResponseTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual 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"; + + 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 new file mode 100644 index 000000000..f5cb97d31 --- /dev/null +++ b/src/Generated/Models/ResponseTool.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseTool + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected ResponseTool(InternalResponsesToolType @type) + { + Type = @type; + } + + internal ResponseTool(InternalResponsesToolType @type, IDictionary additionalBinaryDataProperties) + { + Type = @type; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseTruncationMode.cs b/src/Generated/Models/ResponseTruncationMode.cs new file mode 100644 index 000000000..4294acc06 --- /dev/null +++ b/src/Generated/Models/ResponseTruncationMode.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + public readonly partial struct ResponseTruncationMode : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + private const string DisabledValue = "disabled"; + + public ResponseTruncationMode(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static ResponseTruncationMode Auto { get; } = new ResponseTruncationMode(AutoValue); + + public static ResponseTruncationMode Disabled { get; } = new ResponseTruncationMode(DisabledValue); + + public static bool operator ==(ResponseTruncationMode left, ResponseTruncationMode right) => left.Equals(right); + + public static bool operator !=(ResponseTruncationMode left, ResponseTruncationMode right) => !left.Equals(right); + + public static implicit operator ResponseTruncationMode(string value) => new ResponseTruncationMode(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is ResponseTruncationMode other && Equals(other); + + public bool Equals(ResponseTruncationMode 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/RunCollectionOrder.cs b/src/Generated/Models/RunCollectionOrder.cs deleted file mode 100644 index d16dcacf3..000000000 --- a/src/Generated/Models/RunCollectionOrder.cs +++ /dev/null @@ -1,40 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - public readonly partial struct RunCollectionOrder : IEquatable - { - private readonly string _value; - private const string AscValue = "asc"; - private const string DescValue = "desc"; - - public RunCollectionOrder(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static bool operator ==(RunCollectionOrder left, RunCollectionOrder right) => left.Equals(right); - - public static bool operator !=(RunCollectionOrder left, RunCollectionOrder right) => !left.Equals(right); - - public static implicit operator RunCollectionOrder(string value) => new RunCollectionOrder(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is RunCollectionOrder other && Equals(other); - - public bool Equals(RunCollectionOrder 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/RunCreationOptions.Serialization.cs b/src/Generated/Models/RunCreationOptions.Serialization.cs index e205dd689..533ec3d2a 100644 --- a/src/Generated/Models/RunCreationOptions.Serialization.cs +++ b/src/Generated/Models/RunCreationOptions.Serialization.cs @@ -8,6 +8,7 @@ using System.Collections.Generic; using System.Text.Json; using OpenAI; +using OpenAI.Chat; namespace OpenAI.Assistants { @@ -34,80 +35,38 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Stream) && _additionalBinaryDataProperties?.ContainsKey("stream") != true) { - if (Stream != null) - { - writer.WritePropertyName("stream"u8); - writer.WriteBooleanValue(Stream.Value); - } - else - { - writer.WriteNull("stream"u8); - } + writer.WritePropertyName("stream"u8); + writer.WriteBooleanValue(Stream.Value); } if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) { - if (ResponseFormat != null) - { - writer.WritePropertyName("response_format"u8); - writer.WriteObjectValue(ResponseFormat, options); - } - else - { - writer.WriteNull("responseFormat"u8); - } + writer.WritePropertyName("response_format"u8); + writer.WriteObjectValue(ResponseFormat, options); } if (Optional.IsDefined(ModelOverride) && _additionalBinaryDataProperties?.ContainsKey("model") != true) { - if (ModelOverride != null) - { - writer.WritePropertyName("model"u8); - writer.WriteStringValue(ModelOverride); - } - else - { - writer.WriteNull("model"u8); - } + writer.WritePropertyName("model"u8); + writer.WriteStringValue(ModelOverride); } if (Optional.IsDefined(InstructionsOverride) && _additionalBinaryDataProperties?.ContainsKey("instructions") != true) { - if (InstructionsOverride != null) - { - writer.WritePropertyName("instructions"u8); - writer.WriteStringValue(InstructionsOverride); - } - else - { - writer.WriteNull("instructions"u8); - } + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(InstructionsOverride); } if (Optional.IsDefined(AdditionalInstructions) && _additionalBinaryDataProperties?.ContainsKey("additional_instructions") != true) { - if (AdditionalInstructions != null) - { - writer.WritePropertyName("additional_instructions"u8); - writer.WriteStringValue(AdditionalInstructions); - } - else - { - writer.WriteNull("additionalInstructions"u8); - } + writer.WritePropertyName("additional_instructions"u8); + writer.WriteStringValue(AdditionalInstructions); } if (Optional.IsCollectionDefined(InternalMessages) && _additionalBinaryDataProperties?.ContainsKey("additional_messages") != true) { - if (InternalMessages != null) + writer.WritePropertyName("additional_messages"u8); + writer.WriteStartArray(); + foreach (MessageCreationOptions item in InternalMessages) { - writer.WritePropertyName("additional_messages"u8); - writer.WriteStartArray(); - foreach (MessageCreationOptions item in InternalMessages) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else - { - writer.WriteNull("additionalMessages"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); } if (Optional.IsDefined(AllowParallelToolCalls) && _additionalBinaryDataProperties?.ContainsKey("parallel_tool_calls") != true) { @@ -116,20 +75,13 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsCollectionDefined(ToolsOverride) && _additionalBinaryDataProperties?.ContainsKey("tools") != true) { - if (ToolsOverride != null) + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (ToolDefinition item in ToolsOverride) { - writer.WritePropertyName("tools"u8); - writer.WriteStartArray(); - foreach (ToolDefinition item in ToolsOverride) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else - { - writer.WriteNull("tools"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); } if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) { @@ -149,77 +101,40 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) { - if (Temperature != null) - { - writer.WritePropertyName("temperature"u8); - writer.WriteNumberValue(Temperature.Value); - } - else - { - writer.WriteNull("temperature"u8); - } + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); } if (Optional.IsDefined(NucleusSamplingFactor) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) { - if (NucleusSamplingFactor != null) - { - writer.WritePropertyName("top_p"u8); - writer.WriteNumberValue(NucleusSamplingFactor.Value); - } - else - { - writer.WriteNull("topP"u8); - } + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(NucleusSamplingFactor.Value); } if (Optional.IsDefined(MaxInputTokenCount) && _additionalBinaryDataProperties?.ContainsKey("max_prompt_tokens") != true) { - if (MaxInputTokenCount != null) - { - writer.WritePropertyName("max_prompt_tokens"u8); - writer.WriteNumberValue(MaxInputTokenCount.Value); - } - else - { - writer.WriteNull("maxPromptTokens"u8); - } + writer.WritePropertyName("max_prompt_tokens"u8); + writer.WriteNumberValue(MaxInputTokenCount.Value); } if (Optional.IsDefined(MaxOutputTokenCount) && _additionalBinaryDataProperties?.ContainsKey("max_completion_tokens") != true) { - if (MaxOutputTokenCount != null) - { - writer.WritePropertyName("max_completion_tokens"u8); - writer.WriteNumberValue(MaxOutputTokenCount.Value); - } - else - { - writer.WriteNull("maxCompletionTokens"u8); - } + writer.WritePropertyName("max_completion_tokens"u8); + writer.WriteNumberValue(MaxOutputTokenCount.Value); } if (Optional.IsDefined(TruncationStrategy) && _additionalBinaryDataProperties?.ContainsKey("truncation_strategy") != true) { - if (TruncationStrategy != null) - { - writer.WritePropertyName("truncation_strategy"u8); - writer.WriteObjectValue(TruncationStrategy, options); - } - else - { - writer.WriteNull("truncationStrategy"u8); - } + writer.WritePropertyName("truncation_strategy"u8); + writer.WriteObjectValue(TruncationStrategy, options); } if (Optional.IsDefined(ToolConstraint) && _additionalBinaryDataProperties?.ContainsKey("tool_choice") != true) { - if (ToolConstraint != null) - { - writer.WritePropertyName("tool_choice"u8); - this.SerializeToolConstraint(writer, options); - } - else - { - writer.WriteNull("toolChoice"u8); - } + writer.WritePropertyName("tool_choice"u8); + SerializeToolConstraint(writer, options); } - if (true && _additionalBinaryDataProperties != null) + if (Optional.IsDefined(ReasoningEffortLevel) && _additionalBinaryDataProperties?.ContainsKey("reasoning_effort") != true) + { + writer.WritePropertyName("reasoning_effort"u8); + writer.WriteStringValue(ReasoningEffortLevel.Value.ToString()); + } + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -275,6 +190,7 @@ internal static RunCreationOptions DeserializeRunCreationOptions(JsonElement ele int? maxOutputTokenCount = default; RunTruncationStrategy truncationStrategy = default; ToolConstraint toolConstraint = default; + ChatReasoningEffortLevel? reasoningEffortLevel = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -451,10 +367,17 @@ internal static RunCreationOptions DeserializeRunCreationOptions(JsonElement ele toolConstraint = ToolConstraint.DeserializeToolConstraint(prop.Value, options); continue; } - if (true) + if (prop.NameEquals("reasoning_effort"u8)) { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + if (prop.Value.ValueKind == JsonValueKind.Null) + { + reasoningEffortLevel = null; + continue; + } + reasoningEffortLevel = new ChatReasoningEffortLevel(prop.Value.GetString()); + continue; } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunCreationOptions( assistantId, @@ -473,6 +396,7 @@ internal static RunCreationOptions DeserializeRunCreationOptions(JsonElement ele maxOutputTokenCount, truncationStrategy, toolConstraint, + reasoningEffortLevel, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/RunCreationOptions.cs b/src/Generated/Models/RunCreationOptions.cs index a25c920fc..f0c3a2c53 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.Chat; namespace OpenAI.Assistants { @@ -11,7 +12,7 @@ public partial class RunCreationOptions { private protected IDictionary _additionalBinaryDataProperties; - 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, IDictionary additionalBinaryDataProperties) + 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) { AssistantId = assistantId; Stream = stream; @@ -29,6 +30,7 @@ internal RunCreationOptions(string assistantId, bool? stream, AssistantResponseF MaxOutputTokenCount = maxOutputTokenCount; TruncationStrategy = truncationStrategy; ToolConstraint = toolConstraint; + ReasoningEffortLevel = reasoningEffortLevel; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/RunError.Serialization.cs b/src/Generated/Models/RunError.Serialization.cs index 2075c5e8d..a6acf9464 100644 --- a/src/Generated/Models/RunError.Serialization.cs +++ b/src/Generated/Models/RunError.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static RunError DeserializeRunError(JsonElement element, ModelReaderWri message = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunError(code, message, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/RunIncompleteDetails.Serialization.cs b/src/Generated/Models/RunIncompleteDetails.Serialization.cs index a051dfbe6..a490872a8 100644 --- a/src/Generated/Models/RunIncompleteDetails.Serialization.cs +++ b/src/Generated/Models/RunIncompleteDetails.Serialization.cs @@ -32,7 +32,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reason"u8); writer.WriteStringValue(Reason.Value.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -85,10 +85,7 @@ internal static RunIncompleteDetails DeserializeRunIncompleteDetails(JsonElement reason = new RunIncompleteReason(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunIncompleteDetails(reason, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/RunModificationOptions.Serialization.cs b/src/Generated/Models/RunModificationOptions.Serialization.cs index 4a77d2e2b..7386bfeb6 100644 --- a/src/Generated/Models/RunModificationOptions.Serialization.cs +++ b/src/Generated/Models/RunModificationOptions.Serialization.cs @@ -43,7 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndObject(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -108,10 +108,7 @@ internal static RunModificationOptions DeserializeRunModificationOptions(JsonEle metadata = dictionary; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunModificationOptions(metadata ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/RunStep.Serialization.cs b/src/Generated/Models/RunStep.Serialization.cs index f23a7ef63..52163d483 100644 --- a/src/Generated/Models/RunStep.Serialization.cs +++ b/src/Generated/Models/RunStep.Serialization.cs @@ -63,67 +63,67 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("last_error") != true) { - if (LastError != null) + if (Optional.IsDefined(LastError)) { writer.WritePropertyName("last_error"u8); writer.WriteObjectValue(LastError, options); } else { - writer.WriteNull("lastError"u8); + writer.WriteNull("last_error"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("expired_at") != true) { - if (ExpiredAt != null) + if (Optional.IsDefined(ExpiredAt)) { writer.WritePropertyName("expired_at"u8); writer.WriteNumberValue(ExpiredAt.Value, "U"); } else { - writer.WriteNull("expiredAt"u8); + writer.WriteNull("expired_at"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("cancelled_at") != true) { - if (CancelledAt != null) + if (Optional.IsDefined(CancelledAt)) { writer.WritePropertyName("cancelled_at"u8); writer.WriteNumberValue(CancelledAt.Value, "U"); } else { - writer.WriteNull("cancelledAt"u8); + writer.WriteNull("cancelled_at"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("failed_at") != true) { - if (FailedAt != null) + if (Optional.IsDefined(FailedAt)) { writer.WritePropertyName("failed_at"u8); writer.WriteNumberValue(FailedAt.Value, "U"); } else { - writer.WriteNull("failedAt"u8); + writer.WriteNull("failed_at"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("completed_at") != true) { - if (CompletedAt != null) + if (Optional.IsDefined(CompletedAt)) { writer.WritePropertyName("completed_at"u8); writer.WriteNumberValue(CompletedAt.Value, "U"); } else { - writer.WriteNull("completedAt"u8); + writer.WriteNull("completed_at"u8); } } - if (true && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) { writer.WritePropertyName("metadata"u8); writer.WriteStartObject(); @@ -146,7 +146,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("usage") != true) { - if (Usage != null) + if (Optional.IsDefined(Usage)) { writer.WritePropertyName("usage"u8); writer.WriteObjectValue(Usage, options); @@ -159,7 +159,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { @@ -169,9 +169,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("step_details") != true) { writer.WritePropertyName("step_details"u8); - writer.WriteObjectValue(Details, options); + writer.WriteObjectValue(Details, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -225,7 +225,7 @@ internal static RunStep DeserializeRunStep(JsonElement element, ModelReaderWrite IReadOnlyDictionary metadata = default; RunStepTokenUsage usage = default; InternalRunStepObjectObject @object = default; - Assistants.RunStepKind kind = default; + RunStepKind kind = default; RunStepDetails details = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -357,10 +357,7 @@ internal static RunStep DeserializeRunStep(JsonElement element, ModelReaderWrite details = RunStepDetails.DeserializeRunStepDetails(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunStep( id, diff --git a/src/Generated/Models/RunStep.cs b/src/Generated/Models/RunStep.cs index 017ba1e29..3f35a02b6 100644 --- a/src/Generated/Models/RunStep.cs +++ b/src/Generated/Models/RunStep.cs @@ -12,7 +12,7 @@ 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, Assistants.RunStepKind kind, RunStepDetails 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, RunStepTokenUsage usage, RunStepKind kind, RunStepDetails details) { Id = id; CreatedAt = createdAt; @@ -31,7 +31,7 @@ internal RunStep(string id, DateTimeOffset createdAt, string assistantId, string 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, Assistants.RunStepKind kind, RunStepDetails details, 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, IReadOnlyDictionary metadata, RunStepTokenUsage usage, InternalRunStepObjectObject @object, RunStepKind kind, RunStepDetails details, IDictionary additionalBinaryDataProperties) { Id = id; CreatedAt = createdAt; @@ -46,7 +46,7 @@ internal RunStep(string id, DateTimeOffset createdAt, string assistantId, string CompletedAt = completedAt; Metadata = metadata; Usage = usage; - this.Object = @object; + Object = @object; Kind = kind; Details = details; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs b/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs index e6c7642f7..7acd96d87 100644 --- a/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs +++ b/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/RunStepCollectionOrder.cs b/src/Generated/Models/RunStepCollectionOrder.cs deleted file mode 100644 index ec2f727c4..000000000 --- a/src/Generated/Models/RunStepCollectionOrder.cs +++ /dev/null @@ -1,40 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - public readonly partial struct RunStepCollectionOrder : IEquatable - { - private readonly string _value; - private const string AscValue = "asc"; - private const string DescValue = "desc"; - - public RunStepCollectionOrder(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static bool operator ==(RunStepCollectionOrder left, RunStepCollectionOrder right) => left.Equals(right); - - public static bool operator !=(RunStepCollectionOrder left, RunStepCollectionOrder right) => !left.Equals(right); - - public static implicit operator RunStepCollectionOrder(string value) => new RunStepCollectionOrder(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is RunStepCollectionOrder other && Equals(other); - - public bool Equals(RunStepCollectionOrder 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/RunStepDetails.Serialization.cs b/src/Generated/Models/RunStepDetails.Serialization.cs index dc51e99f1..4300f8347 100644 --- a/src/Generated/Models/RunStepDetails.Serialization.cs +++ b/src/Generated/Models/RunStepDetails.Serialization.cs @@ -36,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/RunStepError.Serialization.cs b/src/Generated/Models/RunStepError.Serialization.cs index dedc4b148..0502fe07a 100644 --- a/src/Generated/Models/RunStepError.Serialization.cs +++ b/src/Generated/Models/RunStepError.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static RunStepError DeserializeRunStepError(JsonElement element, ModelR message = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunStepError(code, message, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/RunStepFileSearchResult.Serialization.cs b/src/Generated/Models/RunStepFileSearchResult.Serialization.cs index 9d77a2d41..927575474 100644 --- a/src/Generated/Models/RunStepFileSearchResult.Serialization.cs +++ b/src/Generated/Models/RunStepFileSearchResult.Serialization.cs @@ -46,7 +46,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("score"u8); writer.WriteNumberValue(Score); } - if (true && Optional.IsCollectionDefined(Content) && _additionalBinaryDataProperties?.ContainsKey("content") != true) + if (Optional.IsCollectionDefined(Content) && _additionalBinaryDataProperties?.ContainsKey("content") != true) { writer.WritePropertyName("content"u8); writer.WriteStartArray(); @@ -56,7 +56,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -132,10 +132,7 @@ internal static RunStepFileSearchResult DeserializeRunStepFileSearchResult(JsonE content = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunStepFileSearchResult(fileId, fileName, score, content ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/RunStepFileSearchResultContent.Serialization.cs b/src/Generated/Models/RunStepFileSearchResultContent.Serialization.cs index 26de3553b..cd2cc296d 100644 --- a/src/Generated/Models/RunStepFileSearchResultContent.Serialization.cs +++ b/src/Generated/Models/RunStepFileSearchResultContent.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -82,7 +82,7 @@ internal static RunStepFileSearchResultContent DeserializeRunStepFileSearchResul return null; } string text = default; - Assistants.RunStepFileSearchResultContentKind kind = default; + RunStepFileSearchResultContentKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -96,10 +96,7 @@ internal static RunStepFileSearchResultContent DeserializeRunStepFileSearchResul kind = prop.Value.GetString().ToRunStepFileSearchResultContentKind(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunStepFileSearchResultContent(text, kind, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/RunStepFileSearchResultContent.cs b/src/Generated/Models/RunStepFileSearchResultContent.cs index 8324a3dbd..65b5ebb81 100644 --- a/src/Generated/Models/RunStepFileSearchResultContent.cs +++ b/src/Generated/Models/RunStepFileSearchResultContent.cs @@ -16,7 +16,7 @@ internal RunStepFileSearchResultContent(string text) Text = text; } - internal RunStepFileSearchResultContent(string text, Assistants.RunStepFileSearchResultContentKind kind, IDictionary additionalBinaryDataProperties) + internal RunStepFileSearchResultContent(string text, RunStepFileSearchResultContentKind kind, IDictionary additionalBinaryDataProperties) { Text = text; Kind = kind; diff --git a/src/Generated/Models/RunStepFileSearchResultContentKind.Serialization.cs b/src/Generated/Models/RunStepFileSearchResultContentKind.Serialization.cs index b78bfaa22..7e5221579 100644 --- a/src/Generated/Models/RunStepFileSearchResultContentKind.Serialization.cs +++ b/src/Generated/Models/RunStepFileSearchResultContentKind.Serialization.cs @@ -8,17 +8,17 @@ namespace OpenAI.Assistants { internal static partial class RunStepFileSearchResultContentKindExtensions { - public static string ToSerialString(this Assistants.RunStepFileSearchResultContentKind value) => value switch + public static string ToSerialString(this RunStepFileSearchResultContentKind value) => value switch { - Assistants.RunStepFileSearchResultContentKind.Text => "text", + RunStepFileSearchResultContentKind.Text => "text", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown RunStepFileSearchResultContentKind value.") }; - public static Assistants.RunStepFileSearchResultContentKind ToRunStepFileSearchResultContentKind(this string value) + public static RunStepFileSearchResultContentKind ToRunStepFileSearchResultContentKind(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "text")) { - return Assistants.RunStepFileSearchResultContentKind.Text; + return RunStepFileSearchResultContentKind.Text; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown RunStepFileSearchResultContentKind value."); } diff --git a/src/Generated/Models/RunStepKind.Serialization.cs b/src/Generated/Models/RunStepKind.Serialization.cs index 7372a1f0e..5aebc06a9 100644 --- a/src/Generated/Models/RunStepKind.Serialization.cs +++ b/src/Generated/Models/RunStepKind.Serialization.cs @@ -8,22 +8,22 @@ namespace OpenAI.Assistants { internal static partial class RunStepKindExtensions { - public static string ToSerialString(this Assistants.RunStepKind value) => value switch + public static string ToSerialString(this RunStepKind value) => value switch { - Assistants.RunStepKind.CreatedMessage => "message_creation", - Assistants.RunStepKind.ToolCall => "tool_calls", + RunStepKind.CreatedMessage => "message_creation", + RunStepKind.ToolCall => "tool_calls", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown RunStepKind value.") }; - public static Assistants.RunStepKind ToRunStepKind(this string value) + public static RunStepKind ToRunStepKind(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "message_creation")) { - return Assistants.RunStepKind.CreatedMessage; + return RunStepKind.CreatedMessage; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "tool_calls")) { - return Assistants.RunStepKind.ToolCall; + return RunStepKind.ToolCall; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown RunStepKind value."); } diff --git a/src/Generated/Models/RunStepTokenUsage.Serialization.cs b/src/Generated/Models/RunStepTokenUsage.Serialization.cs index d6932bd3f..291d1c36d 100644 --- a/src/Generated/Models/RunStepTokenUsage.Serialization.cs +++ b/src/Generated/Models/RunStepTokenUsage.Serialization.cs @@ -46,7 +46,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total_tokens"u8); writer.WriteNumberValue(TotalTokenCount); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static RunStepTokenUsage DeserializeRunStepTokenUsage(JsonElement eleme totalTokenCount = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunStepTokenUsage(outputTokenCount, inputTokenCount, totalTokenCount, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/RunStepToolCall.Serialization.cs b/src/Generated/Models/RunStepToolCall.Serialization.cs index f41610cd6..3e41dbab9 100644 --- a/src/Generated/Models/RunStepToolCall.Serialization.cs +++ b/src/Generated/Models/RunStepToolCall.Serialization.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { - [PersistableModelProxy(typeof(UnknownRunStepDetailsToolCallsObjectToolCallsObject))] - public abstract partial class RunStepToolCall : IJsonModel + public partial class RunStepToolCall : IJsonModel { void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { @@ -37,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/RunStepToolCall.cs b/src/Generated/Models/RunStepToolCall.cs index a1ff98139..9b11c28a5 100644 --- a/src/Generated/Models/RunStepToolCall.cs +++ b/src/Generated/Models/RunStepToolCall.cs @@ -7,17 +7,17 @@ namespace OpenAI.Assistants { - public abstract partial class RunStepToolCall + public partial class RunStepToolCall { private protected IDictionary _additionalBinaryDataProperties; - private protected RunStepToolCall(string id, Assistants.RunStepToolCallKind kind) + private protected RunStepToolCall(string id, RunStepToolCallKind kind) { Id = id; Kind = kind; } - internal RunStepToolCall(string id, Assistants.RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties) + internal RunStepToolCall(string id, RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties) { Id = id; Kind = kind; diff --git a/src/Generated/Models/RunStepToolCallKind.Serialization.cs b/src/Generated/Models/RunStepToolCallKind.Serialization.cs index cf4164a28..5341ac2bd 100644 --- a/src/Generated/Models/RunStepToolCallKind.Serialization.cs +++ b/src/Generated/Models/RunStepToolCallKind.Serialization.cs @@ -8,27 +8,27 @@ namespace OpenAI.Assistants { internal static partial class RunStepToolCallKindExtensions { - public static string ToSerialString(this Assistants.RunStepToolCallKind value) => value switch + public static string ToSerialString(this RunStepToolCallKind value) => value switch { - Assistants.RunStepToolCallKind.CodeInterpreter => "code_interpreter", - Assistants.RunStepToolCallKind.FileSearch => "file_search", - Assistants.RunStepToolCallKind.Function => "function", + RunStepToolCallKind.CodeInterpreter => "code_interpreter", + RunStepToolCallKind.FileSearch => "file_search", + RunStepToolCallKind.Function => "function", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown RunStepToolCallKind value.") }; - public static Assistants.RunStepToolCallKind ToRunStepToolCallKind(this string value) + public static RunStepToolCallKind ToRunStepToolCallKind(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "code_interpreter")) { - return Assistants.RunStepToolCallKind.CodeInterpreter; + return RunStepToolCallKind.CodeInterpreter; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "file_search")) { - return Assistants.RunStepToolCallKind.FileSearch; + return RunStepToolCallKind.FileSearch; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "function")) { - return Assistants.RunStepToolCallKind.Function; + return RunStepToolCallKind.Function; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown RunStepToolCallKind value."); } diff --git a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs index 0e7fec323..09245301a 100644 --- a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs +++ b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs @@ -10,8 +10,7 @@ namespace OpenAI.Assistants { - [PersistableModelProxy(typeof(UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject))] - public abstract partial class RunStepUpdateCodeInterpreterOutput : IJsonModel + public partial class RunStepUpdateCodeInterpreterOutput : IJsonModel { internal RunStepUpdateCodeInterpreterOutput() { @@ -36,7 +35,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs index a70737784..ecd137966 100644 --- a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs +++ b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs @@ -7,7 +7,7 @@ namespace OpenAI.Assistants { - public abstract partial class RunStepUpdateCodeInterpreterOutput + public partial class RunStepUpdateCodeInterpreterOutput { private protected IDictionary _additionalBinaryDataProperties; diff --git a/src/Generated/Models/RunTokenUsage.Serialization.cs b/src/Generated/Models/RunTokenUsage.Serialization.cs index c0d0347cd..d1905041a 100644 --- a/src/Generated/Models/RunTokenUsage.Serialization.cs +++ b/src/Generated/Models/RunTokenUsage.Serialization.cs @@ -46,7 +46,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total_tokens"u8); writer.WriteNumberValue(TotalTokenCount); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static RunTokenUsage DeserializeRunTokenUsage(JsonElement element, Mode totalTokenCount = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunTokenUsage(outputTokenCount, inputTokenCount, totalTokenCount, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/RunTruncationStrategy.Serialization.cs b/src/Generated/Models/RunTruncationStrategy.Serialization.cs index 7a07b063d..c8d705ef5 100644 --- a/src/Generated/Models/RunTruncationStrategy.Serialization.cs +++ b/src/Generated/Models/RunTruncationStrategy.Serialization.cs @@ -33,22 +33,15 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(LastMessages) && _additionalBinaryDataProperties?.ContainsKey("last_messages") != true) { - if (LastMessages != null) - { - writer.WritePropertyName("last_messages"u8); - writer.WriteNumberValue(LastMessages.Value); - } - else - { - writer.WriteNull("lastMessages"u8); - } + writer.WritePropertyName("last_messages"u8); + writer.WriteNumberValue(LastMessages.Value); } if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); writer.WriteStringValue(_type.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -108,10 +101,7 @@ internal static RunTruncationStrategy DeserializeRunTruncationStrategy(JsonEleme @type = new InternalTruncationObjectType(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunTruncationStrategy(lastMessages, @type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/SpeechGenerationOptions.Serialization.cs b/src/Generated/Models/SpeechGenerationOptions.Serialization.cs index bf52744ba..2b21d9196 100644 --- a/src/Generated/Models/SpeechGenerationOptions.Serialization.cs +++ b/src/Generated/Models/SpeechGenerationOptions.Serialization.cs @@ -52,7 +52,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("speed"u8); writer.WriteNumberValue(SpeedRatio.Value); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -133,10 +133,7 @@ internal static SpeechGenerationOptions DeserializeSpeechGenerationOptions(JsonE speedRatio = prop.Value.GetSingle(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new SpeechGenerationOptions( responseFormat, diff --git a/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs b/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs index d480e4317..6535b929c 100644 --- a/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs +++ b/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs @@ -35,7 +35,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("static") != true) { writer.WritePropertyName("static"u8); - writer.WriteObjectValue(_internalDetails, options); + writer.WriteObjectValue(_internalDetails, options); } } @@ -73,10 +73,7 @@ internal static StaticFileChunkingStrategy DeserializeStaticFileChunkingStrategy internalDetails = InternalStaticChunkingStrategyDetails.DeserializeInternalStaticChunkingStrategyDetails(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StaticFileChunkingStrategy(@type, additionalBinaryDataProperties, internalDetails); } diff --git a/src/Generated/Models/StreamingChatCompletionUpdate.Serialization.cs b/src/Generated/Models/StreamingChatCompletionUpdate.Serialization.cs index db571acc7..c3966f662 100644 --- a/src/Generated/Models/StreamingChatCompletionUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingChatCompletionUpdate.Serialization.cs @@ -44,7 +44,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("id") != true) { @@ -53,15 +53,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(ServiceTier) && _additionalBinaryDataProperties?.ContainsKey("service_tier") != true) { - if (ServiceTier != null) - { - writer.WritePropertyName("service_tier"u8); - writer.WriteStringValue(ServiceTier.Value.ToString()); - } - else - { - writer.WriteNull("serviceTier"u8); - } + writer.WritePropertyName("service_tier"u8); + writer.WriteStringValue(ServiceTier.Value.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("choices") != true) { @@ -80,17 +73,10 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Usage) && _additionalBinaryDataProperties?.ContainsKey("usage") != true) { - if (Usage != null) - { - writer.WritePropertyName("usage"u8); - writer.WriteObjectValue(Usage, options); - } - else - { - writer.WriteNull("usage"u8); - } + writer.WritePropertyName("usage"u8); + writer.WriteObjectValue(Usage, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -196,10 +182,7 @@ internal static StreamingChatCompletionUpdate DeserializeStreamingChatCompletion usage = ChatTokenUsage.DeserializeChatTokenUsage(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingChatCompletionUpdate( model, diff --git a/src/Generated/Models/StreamingChatCompletionUpdate.cs b/src/Generated/Models/StreamingChatCompletionUpdate.cs index 1271eb74d..13a134ed7 100644 --- a/src/Generated/Models/StreamingChatCompletionUpdate.cs +++ b/src/Generated/Models/StreamingChatCompletionUpdate.cs @@ -24,7 +24,7 @@ internal StreamingChatCompletionUpdate(string model, string systemFingerprint, I { Model = model; SystemFingerprint = systemFingerprint; - this.Object = @object; + Object = @object; CompletionId = completionId; ServiceTier = serviceTier; Choices = choices; diff --git a/src/Generated/Models/StreamingChatFunctionCallUpdate.Serialization.cs b/src/Generated/Models/StreamingChatFunctionCallUpdate.Serialization.cs index 465dc3953..e937d4b0f 100644 --- a/src/Generated/Models/StreamingChatFunctionCallUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingChatFunctionCallUpdate.Serialization.cs @@ -35,9 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(FunctionArgumentsUpdate) && _additionalBinaryDataProperties?.ContainsKey("arguments") != true) { writer.WritePropertyName("arguments"u8); - this.SerializeFunctionArgumentsUpdateValue(writer, options); + SerializeFunctionArgumentsUpdateValue(writer, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -92,10 +92,7 @@ internal static StreamingChatFunctionCallUpdate DeserializeStreamingChatFunction DeserializeFunctionArgumentsUpdateValue(prop, ref functionArgumentsUpdate); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingChatFunctionCallUpdate(functionName, functionArgumentsUpdate, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/StreamingChatOutputAudioUpdate.Serialization.cs b/src/Generated/Models/StreamingChatOutputAudioUpdate.Serialization.cs index 080cfa4c5..6c8fccc46 100644 --- a/src/Generated/Models/StreamingChatOutputAudioUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingChatOutputAudioUpdate.Serialization.cs @@ -47,7 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("data"u8); writer.WriteBase64StringValue(AudioBytesUpdate.ToArray(), "D"); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -122,10 +122,7 @@ internal static StreamingChatOutputAudioUpdate DeserializeStreamingChatOutputAud audioBytesUpdate = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingChatOutputAudioUpdate(id, expiresAt, transcriptUpdate, audioBytesUpdate, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs b/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs index 57c15eb9f..5a33c0019 100644 --- a/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs @@ -39,7 +39,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(Function) && _additionalBinaryDataProperties?.ContainsKey("function") != true) { writer.WritePropertyName("function"u8); - writer.WriteObjectValue(Function, options); + writer.WriteObjectValue(Function, options); } if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { @@ -51,7 +51,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("id"u8); writer.WriteStringValue(ToolCallId); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -93,7 +93,7 @@ internal static StreamingChatToolCallUpdate DeserializeStreamingChatToolCallUpda } int index = default; InternalChatCompletionMessageToolCallChunkFunction function = default; - Chat.ChatToolCallKind kind = default; + ChatToolCallKind kind = default; string toolCallId = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -126,10 +126,7 @@ internal static StreamingChatToolCallUpdate DeserializeStreamingChatToolCallUpda toolCallId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingChatToolCallUpdate(index, function, kind, toolCallId, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/StreamingChatToolCallUpdate.cs b/src/Generated/Models/StreamingChatToolCallUpdate.cs index 299399632..4aa70619c 100644 --- a/src/Generated/Models/StreamingChatToolCallUpdate.cs +++ b/src/Generated/Models/StreamingChatToolCallUpdate.cs @@ -11,7 +11,7 @@ public partial class StreamingChatToolCallUpdate { private protected IDictionary _additionalBinaryDataProperties; - internal StreamingChatToolCallUpdate(int index, InternalChatCompletionMessageToolCallChunkFunction function, Chat.ChatToolCallKind kind, string toolCallId, IDictionary additionalBinaryDataProperties) + internal StreamingChatToolCallUpdate(int index, InternalChatCompletionMessageToolCallChunkFunction function, ChatToolCallKind kind, string toolCallId, IDictionary additionalBinaryDataProperties) { Index = index; Function = function; diff --git a/src/Generated/Models/StreamingResponseErrorUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseErrorUpdate.Serialization.cs new file mode 100644 index 000000000..5b2f2ddef --- /dev/null +++ b/src/Generated/Models/StreamingResponseErrorUpdate.Serialization.cs @@ -0,0 +1,176 @@ +// + +#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 StreamingResponseErrorUpdate : IJsonModel + { + internal StreamingResponseErrorUpdate() + { + } + + 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(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)) + { + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code); + } + else + { + writer.WriteNull("code"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("param") != true) + { + if (Optional.IsDefined(Param)) + { + writer.WritePropertyName("param"u8); + writer.WriteStringValue(Param); + } + else + { + writer.WriteNull("param"u8); + } + } + } + + StreamingResponseErrorUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseErrorUpdate)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(StreamingResponseErrorUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeStreamingResponseErrorUpdate(document.RootElement, options); + } + + internal static StreamingResponseErrorUpdate DeserializeStreamingResponseErrorUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string message = default; + string code = default; + string @param = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("message"u8)) + { + message = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("code"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + code = null; + continue; + } + code = 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 StreamingResponseErrorUpdate(kind, additionalBinaryDataProperties, message, code, @param); + } + + 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(StreamingResponseErrorUpdate)} does not support writing '{options.Format}' format."); + } + } + + StreamingResponseErrorUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseErrorUpdate)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 DeserializeStreamingResponseErrorUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(StreamingResponseErrorUpdate)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..9e45d2bbe --- /dev/null +++ b/src/Generated/Models/StreamingResponseErrorUpdate.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class StreamingResponseErrorUpdate : StreamingResponseUpdate + { + internal StreamingResponseErrorUpdate(string message, string code, string @param) : base(StreamingResponseUpdateKind.Error) + { + Message = message; + Code = code; + Param = @param; + } + + internal StreamingResponseErrorUpdate(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string message, string code, string @param) : base(kind, additionalBinaryDataProperties) + { + Message = message; + Code = code; + Param = @param; + } + + public string Message { get; } + + public string Code { get; } + + public string Param { get; } + } +} diff --git a/src/Generated/Models/StreamingResponseTextAnnotationUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseTextAnnotationUpdate.Serialization.cs new file mode 100644 index 000000000..d500f0810 --- /dev/null +++ b/src/Generated/Models/StreamingResponseTextAnnotationUpdate.Serialization.cs @@ -0,0 +1,169 @@ +// + +#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 StreamingResponseTextAnnotationUpdate : IJsonModel + { + internal StreamingResponseTextAnnotationUpdate() + { + } + + 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(StreamingResponseTextAnnotationUpdate)} 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); + } + } + + StreamingResponseTextAnnotationUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseTextAnnotationUpdate)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(StreamingResponseTextAnnotationUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeStreamingResponseTextAnnotationUpdate(document.RootElement, options); + } + + internal static StreamingResponseTextAnnotationUpdate DeserializeStreamingResponseTextAnnotationUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingResponseUpdateKind kind = 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)) + { + kind = new StreamingResponseUpdateKind(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 StreamingResponseTextAnnotationUpdate( + kind, + 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(StreamingResponseTextAnnotationUpdate)} does not support writing '{options.Format}' format."); + } + } + + StreamingResponseTextAnnotationUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseTextAnnotationUpdate)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 DeserializeStreamingResponseTextAnnotationUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(StreamingResponseTextAnnotationUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + public static implicit operator BinaryContent(StreamingResponseTextAnnotationUpdate streamingResponseTextAnnotationUpdate) + { + if (streamingResponseTextAnnotationUpdate == null) + { + return null; + } + return BinaryContent.Create(streamingResponseTextAnnotationUpdate, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator StreamingResponseTextAnnotationUpdate(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeStreamingResponseTextAnnotationUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Generated/Models/StreamingResponseTextAnnotationUpdate.cs b/src/Generated/Models/StreamingResponseTextAnnotationUpdate.cs new file mode 100644 index 000000000..29c46dbfe --- /dev/null +++ b/src/Generated/Models/StreamingResponseTextAnnotationUpdate.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class StreamingResponseTextAnnotationUpdate : StreamingResponseUpdate + { + internal StreamingResponseTextAnnotationUpdate(string itemId, int outputIndex, int contentIndex, ResponseMessageAnnotation annotation) : base(StreamingResponseUpdateKind.ResponseOutputTextAnnotationAdded) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Annotation = annotation; + } + + internal StreamingResponseTextAnnotationUpdate(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, ResponseMessageAnnotation annotation) : base(kind, 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 new file mode 100644 index 000000000..765e6f3b3 --- /dev/null +++ b/src/Generated/Models/StreamingResponseUpdate.Serialization.cs @@ -0,0 +1,182 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class StreamingResponseUpdate : IJsonModel + { + internal StreamingResponseUpdate() + { + } + + 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(StreamingResponseUpdate)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.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 + } + } + } + + StreamingResponseUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + protected virtual 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 StreamingResponseUpdate DeserializeStreamingResponseUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "error": + return StreamingResponseErrorUpdate.DeserializeStreamingResponseErrorUpdate(element, options); + case "response.completed": + return InternalResponsesResponseStreamEventResponseCompleted.DeserializeInternalResponsesResponseStreamEventResponseCompleted(element, options); + case "response.content_part.added": + return InternalResponsesResponseStreamEventResponseContentPartAdded.DeserializeInternalResponsesResponseStreamEventResponseContentPartAdded(element, options); + case "response.content_part.done": + return InternalResponsesResponseStreamEventResponseContentPartDone.DeserializeInternalResponsesResponseStreamEventResponseContentPartDone(element, options); + case "response.created": + return InternalResponsesResponseStreamEventResponseCreated.DeserializeInternalResponsesResponseStreamEventResponseCreated(element, options); + case "response.failed": + return InternalResponsesResponseStreamEventResponseFailed.DeserializeInternalResponsesResponseStreamEventResponseFailed(element, options); + case "response.file_search_call.completed": + return InternalResponsesResponseStreamEventResponseFileSearchCallCompleted.DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallCompleted(element, options); + case "response.file_search_call.in.progress": + return InternalResponsesResponseStreamEventResponseFileSearchCallInProgress.DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallInProgress(element, options); + case "response.file_search_call.searching": + return InternalResponsesResponseStreamEventResponseFileSearchCallSearching.DeserializeInternalResponsesResponseStreamEventResponseFileSearchCallSearching(element, options); + case "response.function_call_arguments.delta": + return InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta.DeserializeInternalResponsesResponseStreamEventResponseFunctionCallArgumentsDelta(element, options); + case "response.function_call_arguments.done": + return InternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone.DeserializeInternalResponsesResponseStreamEventResponseFunctionCallArgumentsDone(element, options); + case "response.incomplete": + return InternalResponsesResponseStreamEventResponseIncomplete.DeserializeInternalResponsesResponseStreamEventResponseIncomplete(element, options); + case "response.in_progress": + return InternalResponsesResponseStreamEventResponseInProgress.DeserializeInternalResponsesResponseStreamEventResponseInProgress(element, options); + case "response.output_item.added": + return InternalResponsesResponseStreamEventResponseOutputItemAdded.DeserializeInternalResponsesResponseStreamEventResponseOutputItemAdded(element, options); + case "response.output_item.done": + return InternalResponsesResponseStreamEventResponseOutputItemDone.DeserializeInternalResponsesResponseStreamEventResponseOutputItemDone(element, options); + case "response.output_text.annotation.added": + return StreamingResponseTextAnnotationUpdate.DeserializeStreamingResponseTextAnnotationUpdate(element, options); + case "response.output_text.delta": + return InternalResponsesResponseStreamEventResponseOutputTextDelta.DeserializeInternalResponsesResponseStreamEventResponseOutputTextDelta(element, options); + case "response.output_text.done": + return InternalResponsesResponseStreamEventResponseOutputTextDone.DeserializeInternalResponsesResponseStreamEventResponseOutputTextDone(element, options); + case "response.refusal.delta": + return InternalResponsesResponseStreamEventResponseRefusalDelta.DeserializeInternalResponsesResponseStreamEventResponseRefusalDelta(element, options); + case "response.refusal.done": + return InternalResponsesResponseStreamEventResponseRefusalDone.DeserializeInternalResponsesResponseStreamEventResponseRefusalDone(element, options); + case "response.web_search_call.completed": + return InternalResponsesResponseStreamEventResponseWebSearchCallCompleted.DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallCompleted(element, options); + case "response.web_search_call.in_progress": + return InternalResponsesResponseStreamEventResponseWebSearchCallInProgress.DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallInProgress(element, options); + case "response.web_search_call.searching": + return InternalResponsesResponseStreamEventResponseWebSearchCallSearching.DeserializeInternalResponsesResponseStreamEventResponseWebSearchCallSearching(element, options); + } + } + return UnknownResponsesResponseStreamEvent.DeserializeUnknownResponsesResponseStreamEvent(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(StreamingResponseUpdate)} does not support writing '{options.Format}' format."); + } + } + + StreamingResponseUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + protected virtual 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"; + + 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 new file mode 100644 index 000000000..b5c21bd07 --- /dev/null +++ b/src/Generated/Models/StreamingResponseUpdate.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class StreamingResponseUpdate + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected StreamingResponseUpdate(StreamingResponseUpdateKind kind) + { + Kind = kind; + } + + internal StreamingResponseUpdate(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/StreamingResponseUpdateKind.cs b/src/Generated/Models/StreamingResponseUpdateKind.cs new file mode 100644 index 000000000..fbed5f21e --- /dev/null +++ b/src/Generated/Models/StreamingResponseUpdateKind.cs @@ -0,0 +1,107 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + public readonly partial struct StreamingResponseUpdateKind : 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 StreamingResponseUpdateKind(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static StreamingResponseUpdateKind Error { get; } = new StreamingResponseUpdateKind(ErrorValue); + + public static StreamingResponseUpdateKind ResponseCompleted { get; } = new StreamingResponseUpdateKind(ResponseCompletedValue); + + public static StreamingResponseUpdateKind ResponseContentPartAdded { get; } = new StreamingResponseUpdateKind(ResponseContentPartAddedValue); + + public static StreamingResponseUpdateKind ResponseContentPartDone { get; } = new StreamingResponseUpdateKind(ResponseContentPartDoneValue); + + public static StreamingResponseUpdateKind ResponseCreated { get; } = new StreamingResponseUpdateKind(ResponseCreatedValue); + + public static StreamingResponseUpdateKind ResponseFailed { get; } = new StreamingResponseUpdateKind(ResponseFailedValue); + + public static StreamingResponseUpdateKind ResponseFileSearchCallCompleted { get; } = new StreamingResponseUpdateKind(ResponseFileSearchCallCompletedValue); + + public static StreamingResponseUpdateKind ResponseFileSearchCallInProgress { get; } = new StreamingResponseUpdateKind(ResponseFileSearchCallInProgressValue); + + public static StreamingResponseUpdateKind ResponseFileSearchCallSearching { get; } = new StreamingResponseUpdateKind(ResponseFileSearchCallSearchingValue); + + public static StreamingResponseUpdateKind ResponseFunctionCallArgumentsDelta { get; } = new StreamingResponseUpdateKind(ResponseFunctionCallArgumentsDeltaValue); + + public static StreamingResponseUpdateKind ResponseFunctionCallArgumentsDone { get; } = new StreamingResponseUpdateKind(ResponseFunctionCallArgumentsDoneValue); + + public static StreamingResponseUpdateKind ResponseInProgress { get; } = new StreamingResponseUpdateKind(ResponseInProgressValue); + + public static StreamingResponseUpdateKind ResponseIncomplete { get; } = new StreamingResponseUpdateKind(ResponseIncompleteValue); + + public static StreamingResponseUpdateKind ResponseOutputItemAdded { get; } = new StreamingResponseUpdateKind(ResponseOutputItemAddedValue); + + public static StreamingResponseUpdateKind ResponseOutputItemDone { get; } = new StreamingResponseUpdateKind(ResponseOutputItemDoneValue); + + public static StreamingResponseUpdateKind ResponseOutputTextAnnotationAdded { get; } = new StreamingResponseUpdateKind(ResponseOutputTextAnnotationAddedValue); + + public static StreamingResponseUpdateKind ResponseOutputTextDelta { get; } = new StreamingResponseUpdateKind(ResponseOutputTextDeltaValue); + + public static StreamingResponseUpdateKind ResponseOutputTextDone { get; } = new StreamingResponseUpdateKind(ResponseOutputTextDoneValue); + + public static StreamingResponseUpdateKind ResponseRefusalDelta { get; } = new StreamingResponseUpdateKind(ResponseRefusalDeltaValue); + + public static StreamingResponseUpdateKind ResponseRefusalDone { get; } = new StreamingResponseUpdateKind(ResponseRefusalDoneValue); + + public static StreamingResponseUpdateKind ResponseWebSearchCallCompleted { get; } = new StreamingResponseUpdateKind(ResponseWebSearchCallCompletedValue); + + public static StreamingResponseUpdateKind ResponseWebSearchCallInProgress { get; } = new StreamingResponseUpdateKind(ResponseWebSearchCallInProgressValue); + + public static StreamingResponseUpdateKind ResponseWebSearchCallSearching { get; } = new StreamingResponseUpdateKind(ResponseWebSearchCallSearchingValue); + + public static bool operator ==(StreamingResponseUpdateKind left, StreamingResponseUpdateKind right) => left.Equals(right); + + public static bool operator !=(StreamingResponseUpdateKind left, StreamingResponseUpdateKind right) => !left.Equals(right); + + public static implicit operator StreamingResponseUpdateKind(string value) => new StreamingResponseUpdateKind(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is StreamingResponseUpdateKind other && Equals(other); + + public bool Equals(StreamingResponseUpdateKind 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/SystemChatMessage.Serialization.cs b/src/Generated/Models/SystemChatMessage.Serialization.cs index 9f11bed16..28b285fce 100644 --- a/src/Generated/Models/SystemChatMessage.Serialization.cs +++ b/src/Generated/Models/SystemChatMessage.Serialization.cs @@ -48,7 +48,7 @@ internal static SystemChatMessage DeserializeSystemChatMessage(JsonElement eleme return null; } ChatMessageContent content = default; - Chat.ChatMessageRole role = default; + ChatMessageRole role = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string participantName = default; foreach (var prop in element.EnumerateObject()) @@ -68,13 +68,9 @@ internal static SystemChatMessage DeserializeSystemChatMessage(JsonElement eleme participantName = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - // CUSTOM: Initialize Content collection property. - return new SystemChatMessage(content ?? new ChatMessageContent(), role, additionalBinaryDataProperties, participantName); + return new SystemChatMessage(content, role, additionalBinaryDataProperties, participantName); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); diff --git a/src/Generated/Models/SystemChatMessage.cs b/src/Generated/Models/SystemChatMessage.cs index 0f8453e0e..e4aabc90d 100644 --- a/src/Generated/Models/SystemChatMessage.cs +++ b/src/Generated/Models/SystemChatMessage.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat { public partial class SystemChatMessage : ChatMessage { - internal SystemChatMessage(ChatMessageContent content, Chat.ChatMessageRole role, IDictionary additionalBinaryDataProperties, string participantName) : base(content, role, additionalBinaryDataProperties) + 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 ebe9da764..042dc5857 100644 --- a/src/Generated/Models/ThreadCreationOptions.Serialization.cs +++ b/src/Generated/Models/ThreadCreationOptions.Serialization.cs @@ -45,15 +45,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(ToolResources) && _additionalBinaryDataProperties?.ContainsKey("tool_resources") != true) { - if (ToolResources != null) - { - writer.WritePropertyName("tool_resources"u8); - writer.WriteObjectValue(ToolResources, options); - } - else - { - writer.WriteNull("toolResources"u8); - } + writer.WritePropertyName("tool_resources"u8); + writer.WriteObjectValue(ToolResources, options); } if (Optional.IsCollectionDefined(InternalMessages) && _additionalBinaryDataProperties?.ContainsKey("messages") != true) { @@ -65,7 +58,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -156,10 +149,7 @@ internal static ThreadCreationOptions DeserializeThreadCreationOptions(JsonEleme internalMessages = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ThreadCreationOptions(metadata ?? new ChangeTrackingDictionary(), toolResources, internalMessages ?? new ChangeTrackingList(), additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ThreadDeletionResult.Serialization.cs b/src/Generated/Models/ThreadDeletionResult.Serialization.cs index 273d1f6e6..df4529f20 100644 --- a/src/Generated/Models/ThreadDeletionResult.Serialization.cs +++ b/src/Generated/Models/ThreadDeletionResult.Serialization.cs @@ -44,9 +44,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static ThreadDeletionResult DeserializeThreadDeletionResult(JsonElement @object = new InternalDeleteThreadResponseObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ThreadDeletionResult(deleted, threadId, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ThreadDeletionResult.cs b/src/Generated/Models/ThreadDeletionResult.cs index 209c7f80a..afaa8fb1b 100644 --- a/src/Generated/Models/ThreadDeletionResult.cs +++ b/src/Generated/Models/ThreadDeletionResult.cs @@ -21,7 +21,7 @@ internal ThreadDeletionResult(bool deleted, string threadId, InternalDeleteThrea { Deleted = deleted; ThreadId = threadId; - this.Object = @object; + Object = @object; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ThreadMessage.Serialization.cs b/src/Generated/Models/ThreadMessage.Serialization.cs index 6e31ee878..72b7ff3ad 100644 --- a/src/Generated/Models/ThreadMessage.Serialization.cs +++ b/src/Generated/Models/ThreadMessage.Serialization.cs @@ -53,41 +53,41 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("incomplete_details") != true) { - if (IncompleteDetails != null) + if (Optional.IsDefined(IncompleteDetails)) { writer.WritePropertyName("incomplete_details"u8); writer.WriteObjectValue(IncompleteDetails, options); } else { - writer.WriteNull("incompleteDetails"u8); + writer.WriteNull("incomplete_details"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("completed_at") != true) { - if (CompletedAt != null) + if (Optional.IsDefined(CompletedAt)) { writer.WritePropertyName("completed_at"u8); writer.WriteNumberValue(CompletedAt.Value, "U"); } else { - writer.WriteNull("completedAt"u8); + writer.WriteNull("completed_at"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("incomplete_at") != true) { - if (IncompleteAt != null) + if (Optional.IsDefined(IncompleteAt)) { writer.WritePropertyName("incomplete_at"u8); writer.WriteNumberValue(IncompleteAt.Value, "U"); } else { - writer.WriteNull("incompleteAt"u8); + writer.WriteNull("incomplete_at"u8); } } - if (true && _additionalBinaryDataProperties?.ContainsKey("content") != true) + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) { writer.WritePropertyName("content"u8); writer.WriteStartArray(); @@ -99,31 +99,31 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("assistant_id") != true) { - if (AssistantId != null) + if (Optional.IsDefined(AssistantId)) { writer.WritePropertyName("assistant_id"u8); writer.WriteStringValue(AssistantId); } else { - writer.WriteNull("assistantId"u8); + writer.WriteNull("assistant_id"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("run_id") != true) { - if (RunId != null) + if (Optional.IsDefined(RunId)) { writer.WritePropertyName("run_id"u8); writer.WriteStringValue(RunId); } else { - writer.WriteNull("runId"u8); + writer.WriteNull("run_id"u8); } } - if (true && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) { writer.WritePropertyName("metadata"u8); writer.WriteStartObject(); @@ -147,7 +147,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("role") != true) { @@ -156,7 +156,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("attachments") != true) { - if (Attachments != null && Optional.IsCollectionDefined(Attachments)) + if (Optional.IsCollectionDefined(Attachments)) { writer.WritePropertyName("attachments"u8); writer.WriteStartArray(); @@ -171,7 +171,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("attachments"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -223,7 +223,7 @@ internal static ThreadMessage DeserializeThreadMessage(JsonElement element, Mode string runId = default; IReadOnlyDictionary metadata = default; InternalMessageObjectObject @object = default; - Assistants.MessageRole role = default; + MessageRole role = default; IReadOnlyList attachments = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -355,10 +355,7 @@ internal static ThreadMessage DeserializeThreadMessage(JsonElement element, Mode attachments = array; continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ThreadMessage( id, diff --git a/src/Generated/Models/ThreadMessage.cs b/src/Generated/Models/ThreadMessage.cs index b18cc0085..95ceaf0d5 100644 --- a/src/Generated/Models/ThreadMessage.cs +++ b/src/Generated/Models/ThreadMessage.cs @@ -13,7 +13,7 @@ public partial class ThreadMessage { private protected IDictionary _additionalBinaryDataProperties; - internal ThreadMessage(string id, DateTimeOffset createdAt, string threadId, MessageStatus status, MessageFailureDetails incompleteDetails, DateTimeOffset? completedAt, DateTimeOffset? incompleteAt, string assistantId, string runId, Assistants.MessageRole role, IEnumerable attachments) + internal ThreadMessage(string id, DateTimeOffset createdAt, string threadId, MessageStatus status, MessageFailureDetails incompleteDetails, DateTimeOffset? completedAt, DateTimeOffset? incompleteAt, string assistantId, string runId, MessageRole role, IEnumerable attachments) { Id = id; CreatedAt = createdAt; @@ -30,7 +30,7 @@ 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, Assistants.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, InternalMessageObjectObject @object, MessageRole role, IReadOnlyList attachments, IDictionary additionalBinaryDataProperties) { Id = id; CreatedAt = createdAt; @@ -43,7 +43,7 @@ internal ThreadMessage(string id, DateTimeOffset createdAt, string threadId, Mes AssistantId = assistantId; RunId = runId; Metadata = metadata; - this.Object = @object; + Object = @object; Role = role; Attachments = attachments; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/ThreadModificationOptions.Serialization.cs b/src/Generated/Models/ThreadModificationOptions.Serialization.cs index 93c91dc45..a5658f709 100644 --- a/src/Generated/Models/ThreadModificationOptions.Serialization.cs +++ b/src/Generated/Models/ThreadModificationOptions.Serialization.cs @@ -45,17 +45,10 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(ToolResources) && _additionalBinaryDataProperties?.ContainsKey("tool_resources") != true) { - if (ToolResources != null) - { - writer.WritePropertyName("tool_resources"u8); - writer.WriteObjectValue(ToolResources, options); - } - else - { - writer.WriteNull("toolResources"u8); - } + writer.WritePropertyName("tool_resources"u8); + writer.WriteObjectValue(ToolResources, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -131,10 +124,7 @@ internal static ThreadModificationOptions DeserializeThreadModificationOptions(J toolResources = ToolResources.DeserializeToolResources(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ThreadModificationOptions(metadata ?? new ChangeTrackingDictionary(), toolResources, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ThreadRun.Serialization.cs b/src/Generated/Models/ThreadRun.Serialization.cs index cce0cb264..2b320a41c 100644 --- a/src/Generated/Models/ThreadRun.Serialization.cs +++ b/src/Generated/Models/ThreadRun.Serialization.cs @@ -58,86 +58,86 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("last_error") != true) { - if (LastError != null) + if (Optional.IsDefined(LastError)) { writer.WritePropertyName("last_error"u8); writer.WriteObjectValue(LastError, options); } else { - writer.WriteNull("lastError"u8); + writer.WriteNull("last_error"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("expires_at") != true) { - if (ExpiresAt != null) + if (Optional.IsDefined(ExpiresAt)) { writer.WritePropertyName("expires_at"u8); writer.WriteNumberValue(ExpiresAt.Value, "U"); } else { - writer.WriteNull("expiresAt"u8); + writer.WriteNull("expires_at"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("started_at") != true) { - if (StartedAt != null) + if (Optional.IsDefined(StartedAt)) { writer.WritePropertyName("started_at"u8); writer.WriteNumberValue(StartedAt.Value, "U"); } else { - writer.WriteNull("startedAt"u8); + writer.WriteNull("started_at"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("cancelled_at") != true) { - if (CancelledAt != null) + if (Optional.IsDefined(CancelledAt)) { writer.WritePropertyName("cancelled_at"u8); writer.WriteNumberValue(CancelledAt.Value, "U"); } else { - writer.WriteNull("cancelledAt"u8); + writer.WriteNull("cancelled_at"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("failed_at") != true) { - if (FailedAt != null) + if (Optional.IsDefined(FailedAt)) { writer.WritePropertyName("failed_at"u8); writer.WriteNumberValue(FailedAt.Value, "U"); } else { - writer.WriteNull("failedAt"u8); + writer.WriteNull("failed_at"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("completed_at") != true) { - if (CompletedAt != null) + if (Optional.IsDefined(CompletedAt)) { writer.WritePropertyName("completed_at"u8); writer.WriteNumberValue(CompletedAt.Value, "U"); } else { - writer.WriteNull("completedAt"u8); + writer.WriteNull("completed_at"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("incomplete_details") != true) { - if (IncompleteDetails != null) + if (Optional.IsDefined(IncompleteDetails)) { writer.WritePropertyName("incomplete_details"u8); writer.WriteObjectValue(IncompleteDetails, options); } else { - writer.WriteNull("incompleteDetails"u8); + writer.WriteNull("incomplete_details"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("model") != true) @@ -150,7 +150,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("instructions"u8); writer.WriteStringValue(Instructions); } - if (true && _additionalBinaryDataProperties?.ContainsKey("tools") != true) + if (_additionalBinaryDataProperties?.ContainsKey("tools") != true) { writer.WritePropertyName("tools"u8); writer.WriteStartArray(); @@ -160,9 +160,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (true && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) { writer.WritePropertyName("metadata"u8); writer.WriteStartObject(); @@ -185,7 +185,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("usage") != true) { - if (Usage != null) + if (Optional.IsDefined(Usage)) { writer.WritePropertyName("usage"u8); writer.WriteObjectValue(Usage, options); @@ -197,68 +197,54 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) { - if (Temperature != null) - { - writer.WritePropertyName("temperature"u8); - writer.WriteNumberValue(Temperature.Value); - } - else - { - writer.WriteNull("temperature"u8); - } + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); } if (_additionalBinaryDataProperties?.ContainsKey("truncation_strategy") != true) { - if (TruncationStrategy != null) + if (Optional.IsDefined(TruncationStrategy)) { writer.WritePropertyName("truncation_strategy"u8); writer.WriteObjectValue(TruncationStrategy, options); } else { - writer.WriteNull("truncationStrategy"u8); + writer.WriteNull("truncation_strategy"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("response_format") != true) { - if (ResponseFormat != null) + if (Optional.IsDefined(ResponseFormat)) { writer.WritePropertyName("response_format"u8); - writer.WriteObjectValue(ResponseFormat, options); + writer.WriteObjectValue(ResponseFormat, options); } else { - writer.WriteNull("responseFormat"u8); + writer.WriteNull("response_format"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("tool_choice") != true) { - if (ToolConstraint != null) + if (Optional.IsDefined(ToolConstraint)) { writer.WritePropertyName("tool_choice"u8); writer.WriteObjectValue(ToolConstraint, options); } else { - writer.WriteNull("toolChoice"u8); + writer.WriteNull("tool_choice"u8); } } if (Optional.IsDefined(NucleusSamplingFactor) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) { - if (NucleusSamplingFactor != null) - { - writer.WritePropertyName("top_p"u8); - writer.WriteNumberValue(NucleusSamplingFactor.Value); - } - else - { - writer.WriteNull("topP"u8); - } + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(NucleusSamplingFactor.Value); } if (_additionalBinaryDataProperties?.ContainsKey("parallel_tool_calls") != true) { @@ -267,41 +253,41 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("max_prompt_tokens") != true) { - if (MaxInputTokenCount != null) + if (Optional.IsDefined(MaxInputTokenCount)) { writer.WritePropertyName("max_prompt_tokens"u8); writer.WriteNumberValue(MaxInputTokenCount.Value); } else { - writer.WriteNull("maxPromptTokens"u8); + writer.WriteNull("max_prompt_tokens"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("max_completion_tokens") != true) { - if (MaxOutputTokenCount != null) + if (Optional.IsDefined(MaxOutputTokenCount)) { writer.WritePropertyName("max_completion_tokens"u8); writer.WriteNumberValue(MaxOutputTokenCount.Value); } else { - writer.WriteNull("maxCompletionTokens"u8); + writer.WriteNull("max_completion_tokens"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("required_action") != true) { - if (_internalRequiredAction != null) + if (Optional.IsDefined(_internalRequiredAction)) { writer.WritePropertyName("required_action"u8); - writer.WriteObjectValue(_internalRequiredAction, options); + writer.WriteObjectValue(_internalRequiredAction, options); } else { - writer.WriteNull("requiredAction"u8); + writer.WriteNull("required_action"u8); } } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -608,10 +594,7 @@ internal static ThreadRun DeserializeThreadRun(JsonElement element, ModelReaderW internalRequiredAction = InternalRunRequiredAction.DeserializeInternalRunRequiredAction(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ThreadRun( id, diff --git a/src/Generated/Models/ThreadRun.cs b/src/Generated/Models/ThreadRun.cs index 46d28f1e9..c59cd845a 100644 --- a/src/Generated/Models/ThreadRun.cs +++ b/src/Generated/Models/ThreadRun.cs @@ -61,7 +61,7 @@ internal ThreadRun(string id, DateTimeOffset createdAt, string threadId, string Usage = usage; Temperature = temperature; TruncationStrategy = truncationStrategy; - this.Object = @object; + Object = @object; ResponseFormat = responseFormat; ToolConstraint = toolConstraint; NucleusSamplingFactor = nucleusSamplingFactor; diff --git a/src/Generated/Models/ToolChatMessage.Serialization.cs b/src/Generated/Models/ToolChatMessage.Serialization.cs index 6762d530b..b1fad4081 100644 --- a/src/Generated/Models/ToolChatMessage.Serialization.cs +++ b/src/Generated/Models/ToolChatMessage.Serialization.cs @@ -52,7 +52,7 @@ internal static ToolChatMessage DeserializeToolChatMessage(JsonElement element, return null; } ChatMessageContent content = default; - Chat.ChatMessageRole role = default; + ChatMessageRole role = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string toolCallId = default; foreach (var prop in element.EnumerateObject()) @@ -72,13 +72,9 @@ internal static ToolChatMessage DeserializeToolChatMessage(JsonElement element, toolCallId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - // CUSTOM: Initialize Content collection property. - return new ToolChatMessage(content ?? new ChatMessageContent(), role, additionalBinaryDataProperties, toolCallId); + return new ToolChatMessage(content, role, additionalBinaryDataProperties, toolCallId); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); diff --git a/src/Generated/Models/ToolChatMessage.cs b/src/Generated/Models/ToolChatMessage.cs index c0c786560..fe45badb4 100644 --- a/src/Generated/Models/ToolChatMessage.cs +++ b/src/Generated/Models/ToolChatMessage.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat { public partial class ToolChatMessage : ChatMessage { - internal ToolChatMessage(ChatMessageContent content, Chat.ChatMessageRole role, IDictionary additionalBinaryDataProperties, string toolCallId) : base(content, role, additionalBinaryDataProperties) + internal ToolChatMessage(ChatMessageContent content, ChatMessageRole role, IDictionary additionalBinaryDataProperties, string toolCallId) : base(content, role, additionalBinaryDataProperties) { ToolCallId = toolCallId; } diff --git a/src/Generated/Models/ToolConstraint.Serialization.cs b/src/Generated/Models/ToolConstraint.Serialization.cs index c816ad7cc..cf3897d34 100644 --- a/src/Generated/Models/ToolConstraint.Serialization.cs +++ b/src/Generated/Models/ToolConstraint.Serialization.cs @@ -26,14 +26,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(Function) && _additionalBinaryDataProperties?.ContainsKey("function") != true) { writer.WritePropertyName("function"u8); - writer.WriteObjectValue(Function, options); + writer.WriteObjectValue(Function, options); } if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); writer.WriteStringValue(_objectType); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -62,7 +62,7 @@ protected virtual ToolConstraint JsonModelCreateCore(ref Utf8JsonReader reader, throw new FormatException($"The model {nameof(ToolConstraint)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return ToolConstraint.DeserializeToolConstraint(document.RootElement, options); + return DeserializeToolConstraint(document.RootElement, options); } protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) @@ -85,7 +85,7 @@ protected virtual ToolConstraint PersistableModelCreateCore(BinaryData data, Mod case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return ToolConstraint.DeserializeToolConstraint(document.RootElement, options); + return DeserializeToolConstraint(document.RootElement, options); } default: throw new FormatException($"The model {nameof(ToolConstraint)} does not support reading '{options.Format}' format."); @@ -107,7 +107,7 @@ public static explicit operator ToolConstraint(ClientResult result) { using PipelineResponse response = result.GetRawResponse(); using JsonDocument document = JsonDocument.Parse(response.Content); - return ToolConstraint.DeserializeToolConstraint(document.RootElement, ModelSerializationExtensions.WireOptions); + return DeserializeToolConstraint(document.RootElement, ModelSerializationExtensions.WireOptions); } } } diff --git a/src/Generated/Models/ToolDefinition.Serialization.cs b/src/Generated/Models/ToolDefinition.Serialization.cs index 123272c7e..378bb50cb 100644 --- a/src/Generated/Models/ToolDefinition.Serialization.cs +++ b/src/Generated/Models/ToolDefinition.Serialization.cs @@ -25,7 +25,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Type); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { diff --git a/src/Generated/Models/ToolOutput.Serialization.cs b/src/Generated/Models/ToolOutput.Serialization.cs index 552ade35f..b20587b46 100644 --- a/src/Generated/Models/ToolOutput.Serialization.cs +++ b/src/Generated/Models/ToolOutput.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("output"u8); writer.WriteStringValue(Output); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -92,10 +92,7 @@ internal static ToolOutput DeserializeToolOutput(JsonElement element, ModelReade output = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ToolOutput(toolCallId, output, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ToolResources.Serialization.cs b/src/Generated/Models/ToolResources.Serialization.cs index 1bf9b3d4e..ff33e5a6c 100644 --- a/src/Generated/Models/ToolResources.Serialization.cs +++ b/src/Generated/Models/ToolResources.Serialization.cs @@ -30,14 +30,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(CodeInterpreter) && _additionalBinaryDataProperties?.ContainsKey("code_interpreter") != true) { writer.WritePropertyName("code_interpreter"u8); - writer.WriteObjectValue(CodeInterpreter, options); + writer.WriteObjectValue(CodeInterpreter, options); } if (Optional.IsDefined(FileSearch) && _additionalBinaryDataProperties?.ContainsKey("file_search") != true) { writer.WritePropertyName("file_search"u8); - this.SerializeFileSearch(writer, options); + SerializeFileSearch(writer, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -100,10 +100,7 @@ internal static ToolResources DeserializeToolResources(JsonElement element, Mode fileSearch = FileSearchToolResources.DeserializeFileSearchToolResources(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/TranscribedSegment.Serialization.cs b/src/Generated/Models/TranscribedSegment.Serialization.cs index 383ba7fd9..c443b1f14 100644 --- a/src/Generated/Models/TranscribedSegment.Serialization.cs +++ b/src/Generated/Models/TranscribedSegment.Serialization.cs @@ -86,7 +86,7 @@ private void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WritePropertyName("no_speech_prob"u8); writer.WriteNumberValue(NoSpeechProbability); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -200,10 +200,7 @@ internal static TranscribedSegment DeserializeTranscribedSegment(JsonElement ele noSpeechProbability = prop.Value.GetSingle(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new TranscribedSegment( id, diff --git a/src/Generated/Models/TranscribedWord.Serialization.cs b/src/Generated/Models/TranscribedWord.Serialization.cs index 28a1bc287..c6ccf2ec2 100644 --- a/src/Generated/Models/TranscribedWord.Serialization.cs +++ b/src/Generated/Models/TranscribedWord.Serialization.cs @@ -46,7 +46,7 @@ private void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WritePropertyName("end"u8); writer.WriteNumberValue(Convert.ToDouble(EndTime.ToString("s\\.FFF"))); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static TranscribedWord DeserializeTranscribedWord(JsonElement element, endTime = TimeSpan.FromSeconds(prop.Value.GetDouble()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new TranscribedWord(word, startTime, endTime, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs b/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs index 929e01eb3..8cbab500e 100644 --- a/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs +++ b/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs @@ -54,10 +54,7 @@ internal static UnknownAssistantToolDefinition DeserializeUnknownAssistantToolDe @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownAssistantToolDefinition(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.Serialization.cs b/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.Serialization.cs index 18646e9bd..a5a5c1404 100644 --- a/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.Serialization.cs +++ b/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownCreateFineTuningJobRequestIntegration DeserializeUnknownC @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownCreateFineTuningJobRequestIntegration(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownFineTuningIntegration.Serialization.cs b/src/Generated/Models/UnknownFineTuningIntegration.Serialization.cs index f38d39bce..b284b4d5d 100644 --- a/src/Generated/Models/UnknownFineTuningIntegration.Serialization.cs +++ b/src/Generated/Models/UnknownFineTuningIntegration.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownFineTuningIntegration DeserializeUnknownFineTuningIntegra @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownFineTuningIntegration(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs b/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs index f1faf7745..df3275cc1 100644 --- a/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs +++ b/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownMessageContentTextObjectAnnotation DeserializeUnknownMess @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownMessageContentTextObjectAnnotation(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs b/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs index 4b88fb791..eeb50495d 100644 --- a/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs +++ b/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownMessageDeltaContent DeserializeUnknownMessageDeltaContent @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownMessageDeltaContent(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs b/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs index fd95ef989..c008c47ce 100644 --- a/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs +++ b/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownMessageDeltaTextContentAnnotation DeserializeUnknownMessa @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownMessageDeltaTextContentAnnotation(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRealtimeClientEvent.Serialization.cs b/src/Generated/Models/UnknownRealtimeClientEvent.Serialization.cs index 16f2281c8..1f00a7232 100644 --- a/src/Generated/Models/UnknownRealtimeClientEvent.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeClientEvent.Serialization.cs @@ -67,10 +67,7 @@ internal static UnknownRealtimeClientEvent DeserializeUnknownRealtimeClientEvent eventId = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeClientEvent(kind, eventId, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRealtimeContentPart.Serialization.cs b/src/Generated/Models/UnknownRealtimeContentPart.Serialization.cs index 28867bbbd..7ee436310 100644 --- a/src/Generated/Models/UnknownRealtimeContentPart.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeContentPart.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownRealtimeContentPart DeserializeUnknownRealtimeContentPart kind = new ConversationContentPartKind(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeContentPart(kind, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRealtimeRequestItem.Serialization.cs b/src/Generated/Models/UnknownRealtimeRequestItem.Serialization.cs index c32837795..09f58b955 100644 --- a/src/Generated/Models/UnknownRealtimeRequestItem.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeRequestItem.Serialization.cs @@ -67,10 +67,7 @@ internal static UnknownRealtimeRequestItem DeserializeUnknownRealtimeRequestItem id = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeRequestItem(@type, id, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRealtimeRequestMessageItem.Serialization.cs b/src/Generated/Models/UnknownRealtimeRequestMessageItem.Serialization.cs index bf48837ab..893328a41 100644 --- a/src/Generated/Models/UnknownRealtimeRequestMessageItem.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeRequestMessageItem.Serialization.cs @@ -83,10 +83,7 @@ internal static UnknownRealtimeRequestMessageItem DeserializeUnknownRealtimeRequ status = new ConversationItemStatus(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeRequestMessageItem(@type, id, additionalBinaryDataProperties, role, status); } diff --git a/src/Generated/Models/UnknownRealtimeResponseItem.Serialization.cs b/src/Generated/Models/UnknownRealtimeResponseItem.Serialization.cs index 5a0d718b7..48410c5a8 100644 --- a/src/Generated/Models/UnknownRealtimeResponseItem.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeResponseItem.Serialization.cs @@ -78,10 +78,7 @@ internal static UnknownRealtimeResponseItem DeserializeUnknownRealtimeResponseIt id = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeResponseItem(@object, @type, id, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRealtimeServerEvent.Serialization.cs b/src/Generated/Models/UnknownRealtimeServerEvent.Serialization.cs index aa48c7391..097c70ac3 100644 --- a/src/Generated/Models/UnknownRealtimeServerEvent.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeServerEvent.Serialization.cs @@ -43,7 +43,7 @@ protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader rea throw new FormatException($"The model {nameof(ConversationUpdate)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return ConversationUpdate.DeserializeConversationUpdate(document.RootElement, options); + return DeserializeConversationUpdate(document.RootElement, options); } internal static UnknownRealtimeServerEvent DeserializeUnknownRealtimeServerEvent(JsonElement element, ModelReaderWriterOptions options) @@ -53,7 +53,7 @@ internal static UnknownRealtimeServerEvent DeserializeUnknownRealtimeServerEvent return null; } string eventId = default; - RealtimeConversation.ConversationUpdateKind kind = default; + ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -67,10 +67,7 @@ internal static UnknownRealtimeServerEvent DeserializeUnknownRealtimeServerEvent kind = prop.Value.GetString().ToConversationUpdateKind(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeServerEvent(eventId, kind, additionalBinaryDataProperties); } @@ -99,7 +96,7 @@ protected override ConversationUpdate PersistableModelCreateCore(BinaryData data case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return ConversationUpdate.DeserializeConversationUpdate(document.RootElement, options); + return DeserializeConversationUpdate(document.RootElement, options); } default: throw new FormatException($"The model {nameof(ConversationUpdate)} does not support reading '{options.Format}' format."); diff --git a/src/Generated/Models/UnknownRealtimeServerEvent.cs b/src/Generated/Models/UnknownRealtimeServerEvent.cs index d2e999978..ac6f10345 100644 --- a/src/Generated/Models/UnknownRealtimeServerEvent.cs +++ b/src/Generated/Models/UnknownRealtimeServerEvent.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { internal partial class UnknownRealtimeServerEvent : ConversationUpdate { - internal UnknownRealtimeServerEvent(string eventId, RealtimeConversation.ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties) : base(eventId, kind, additionalBinaryDataProperties) + internal UnknownRealtimeServerEvent(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties) : base(eventId, kind, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRealtimeTool.Serialization.cs b/src/Generated/Models/UnknownRealtimeTool.Serialization.cs index bbf65b2f3..4a0bf9184 100644 --- a/src/Generated/Models/UnknownRealtimeTool.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeTool.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownRealtimeTool DeserializeUnknownRealtimeTool(JsonElement e kind = new ConversationToolKind(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeTool(kind, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRealtimeToolChoiceObject.Serialization.cs b/src/Generated/Models/UnknownRealtimeToolChoiceObject.Serialization.cs index ced86e48a..342de3617 100644 --- a/src/Generated/Models/UnknownRealtimeToolChoiceObject.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeToolChoiceObject.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownRealtimeToolChoiceObject DeserializeUnknownRealtimeToolCh @type = new ConversationToolKind(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeToolChoiceObject(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRealtimeTurnDetection.Serialization.cs b/src/Generated/Models/UnknownRealtimeTurnDetection.Serialization.cs index 893f07b6a..bf926c082 100644 --- a/src/Generated/Models/UnknownRealtimeTurnDetection.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeTurnDetection.Serialization.cs @@ -43,7 +43,7 @@ protected override ConversationTurnDetectionOptions JsonModelCreateCore(ref Utf8 throw new FormatException($"The model {nameof(ConversationTurnDetectionOptions)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return ConversationTurnDetectionOptions.DeserializeConversationTurnDetectionOptions(document.RootElement, options); + return DeserializeConversationTurnDetectionOptions(document.RootElement, options); } internal static UnknownRealtimeTurnDetection DeserializeUnknownRealtimeTurnDetection(JsonElement element, ModelReaderWriterOptions options) @@ -52,7 +52,7 @@ internal static UnknownRealtimeTurnDetection DeserializeUnknownRealtimeTurnDetec { return null; } - RealtimeConversation.ConversationTurnDetectionKind kind = default; + ConversationTurnDetectionKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -61,10 +61,7 @@ internal static UnknownRealtimeTurnDetection DeserializeUnknownRealtimeTurnDetec kind = prop.Value.GetString().ToConversationTurnDetectionKind(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeTurnDetection(kind, additionalBinaryDataProperties); } @@ -93,7 +90,7 @@ protected override ConversationTurnDetectionOptions PersistableModelCreateCore(B case "J": using (JsonDocument document = JsonDocument.Parse(data)) { - return ConversationTurnDetectionOptions.DeserializeConversationTurnDetectionOptions(document.RootElement, options); + return DeserializeConversationTurnDetectionOptions(document.RootElement, options); } default: throw new FormatException($"The model {nameof(ConversationTurnDetectionOptions)} does not support reading '{options.Format}' format."); diff --git a/src/Generated/Models/UnknownRealtimeTurnDetection.cs b/src/Generated/Models/UnknownRealtimeTurnDetection.cs index e5706b570..80e07f0ef 100644 --- a/src/Generated/Models/UnknownRealtimeTurnDetection.cs +++ b/src/Generated/Models/UnknownRealtimeTurnDetection.cs @@ -9,7 +9,7 @@ namespace OpenAI.RealtimeConversation { internal partial class UnknownRealtimeTurnDetection : ConversationTurnDetectionOptions { - internal UnknownRealtimeTurnDetection(RealtimeConversation.ConversationTurnDetectionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + internal UnknownRealtimeTurnDetection(ConversationTurnDetectionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownResponsesComputerCallItemAction.Serialization.cs b/src/Generated/Models/UnknownResponsesComputerCallItemAction.Serialization.cs new file mode 100644 index 000000000..afaba4523 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesComputerCallItemAction.Serialization.cs @@ -0,0 +1,102 @@ +// + +#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 new file mode 100644 index 000000000..38fa6ed60 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesComputerCallItemAction.cs @@ -0,0 +1,16 @@ +// + +#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 new file mode 100644 index 000000000..c7efebc93 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesComputerCallOutputItemOutput.Serialization.cs @@ -0,0 +1,102 @@ +// + +#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 new file mode 100644 index 000000000..b16406068 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesComputerCallOutputItemOutput.cs @@ -0,0 +1,16 @@ +// + +#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/UnknownResponsesContent.Serialization.cs b/src/Generated/Models/UnknownResponsesContent.Serialization.cs new file mode 100644 index 000000000..59f4ac91c --- /dev/null +++ b/src/Generated/Models/UnknownResponsesContent.Serialization.cs @@ -0,0 +1,102 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Text.Json; +using OpenAI.Responses; + +namespace OpenAI +{ + internal partial class UnknownResponsesContent : IJsonModel + { + internal UnknownResponsesContent() + { + } + + 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 UnknownResponsesContent DeserializeUnknownResponsesContent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ResponseContentPartKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToResponseContentPartKind(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new UnknownResponsesContent(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(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/UnknownResponsesContent.cs b/src/Generated/Models/UnknownResponsesContent.cs new file mode 100644 index 000000000..20293275b --- /dev/null +++ b/src/Generated/Models/UnknownResponsesContent.cs @@ -0,0 +1,17 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Responses; + +namespace OpenAI +{ + internal partial class UnknownResponsesContent : ResponseContentPart + { + internal UnknownResponsesContent(ResponseContentPartKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/UnknownResponsesOutputTextAnnotation.Serialization.cs b/src/Generated/Models/UnknownResponsesOutputTextAnnotation.Serialization.cs new file mode 100644 index 000000000..09eb45243 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesOutputTextAnnotation.Serialization.cs @@ -0,0 +1,102 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Text.Json; +using OpenAI.Responses; + +namespace OpenAI +{ + internal partial class UnknownResponsesOutputTextAnnotation : IJsonModel + { + internal UnknownResponsesOutputTextAnnotation() + { + } + + 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 UnknownResponsesOutputTextAnnotation DeserializeUnknownResponsesOutputTextAnnotation(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 UnknownResponsesOutputTextAnnotation(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/UnknownResponsesOutputTextAnnotation.cs b/src/Generated/Models/UnknownResponsesOutputTextAnnotation.cs new file mode 100644 index 000000000..0c3b555b8 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesOutputTextAnnotation.cs @@ -0,0 +1,17 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Responses; + +namespace OpenAI +{ + internal partial class UnknownResponsesOutputTextAnnotation : ResponseMessageAnnotation + { + internal UnknownResponsesOutputTextAnnotation(ResponseMessageAnnotationKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/UnknownResponsesReasoningItemSummaryElement.Serialization.cs b/src/Generated/Models/UnknownResponsesReasoningItemSummaryElement.Serialization.cs new file mode 100644 index 000000000..32c3962a8 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesReasoningItemSummaryElement.Serialization.cs @@ -0,0 +1,102 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Text.Json; +using OpenAI.Responses; + +namespace OpenAI +{ + internal partial class UnknownResponsesReasoningItemSummaryElement : IJsonModel + { + internal UnknownResponsesReasoningItemSummaryElement() + { + } + + 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 UnknownResponsesReasoningItemSummaryElement DeserializeUnknownResponsesReasoningItemSummaryElement(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 UnknownResponsesReasoningItemSummaryElement(@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/UnknownResponsesReasoningItemSummaryElement.cs b/src/Generated/Models/UnknownResponsesReasoningItemSummaryElement.cs new file mode 100644 index 000000000..c618d6a69 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesReasoningItemSummaryElement.cs @@ -0,0 +1,17 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Responses; + +namespace OpenAI +{ + internal partial class UnknownResponsesReasoningItemSummaryElement : InternalResponsesReasoningItemSummaryElement + { + internal UnknownResponsesReasoningItemSummaryElement(InternalResponsesReasoningItemSummaryType @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 new file mode 100644 index 000000000..cbdab1514 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesResponseStreamEvent.Serialization.cs @@ -0,0 +1,102 @@ +// + +#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; + } + StreamingResponseUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingResponseUpdateKind(prop.Value.GetString()); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new UnknownResponsesResponseStreamEvent(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(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 new file mode 100644 index 000000000..8ee608057 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesResponseStreamEvent.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class UnknownResponsesResponseStreamEvent : StreamingResponseUpdate + { + internal UnknownResponsesResponseStreamEvent(StreamingResponseUpdateKind kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/UnknownResponsesToolChoiceObject.Serialization.cs b/src/Generated/Models/UnknownResponsesToolChoiceObject.Serialization.cs new file mode 100644 index 000000000..63bb2b90e --- /dev/null +++ b/src/Generated/Models/UnknownResponsesToolChoiceObject.Serialization.cs @@ -0,0 +1,102 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Text.Json; +using OpenAI.Responses; + +namespace OpenAI +{ + internal partial class UnknownResponsesToolChoiceObject : IJsonModel + { + internal UnknownResponsesToolChoiceObject() + { + } + + 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 UnknownResponsesToolChoiceObject DeserializeUnknownResponsesToolChoiceObject(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 UnknownResponsesToolChoiceObject(@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/UnknownResponsesToolChoiceObject.cs b/src/Generated/Models/UnknownResponsesToolChoiceObject.cs new file mode 100644 index 000000000..cf98164f0 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesToolChoiceObject.cs @@ -0,0 +1,17 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Responses; + +namespace OpenAI +{ + internal partial class UnknownResponsesToolChoiceObject : InternalResponsesToolChoiceObject + { + internal UnknownResponsesToolChoiceObject(InternalResponsesToolChoiceObjectType @type, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/UnknownResponsesWebSearchLocation.Serialization.cs b/src/Generated/Models/UnknownResponsesWebSearchLocation.Serialization.cs new file mode 100644 index 000000000..cae3f08a4 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesWebSearchLocation.Serialization.cs @@ -0,0 +1,102 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Text.Json; +using OpenAI.Responses; + +namespace OpenAI +{ + internal partial class UnknownResponsesWebSearchLocation : IJsonModel + { + internal UnknownResponsesWebSearchLocation() + { + } + + 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 UnknownResponsesWebSearchLocation DeserializeUnknownResponsesWebSearchLocation(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 UnknownResponsesWebSearchLocation(@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/UnknownResponsesWebSearchLocation.cs b/src/Generated/Models/UnknownResponsesWebSearchLocation.cs new file mode 100644 index 000000000..0c755dfe8 --- /dev/null +++ b/src/Generated/Models/UnknownResponsesWebSearchLocation.cs @@ -0,0 +1,17 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Responses; + +namespace OpenAI +{ + internal partial class UnknownResponsesWebSearchLocation : WebSearchToolLocation + { + internal UnknownResponsesWebSearchLocation(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs index 1001a346d..42b73610e 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownRunStepDeltaStepDetails DeserializeUnknownRunStepDeltaSte @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRunStepDeltaStepDetails(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs index 53787e08c..0ef6efe8e 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs index 9ca843d25..ec9bd02d4 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject Des @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs index ca2a237bd..ce9e9daa7 100644 --- a/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsOb @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs index 66a751e3a..240a7b108 100644 --- a/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs @@ -53,7 +53,7 @@ internal static UnknownRunStepDetailsToolCallsObjectToolCallsObject DeserializeU return null; } string id = default; - Assistants.RunStepToolCallKind kind = default; + RunStepToolCallKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -67,10 +67,7 @@ internal static UnknownRunStepDetailsToolCallsObjectToolCallsObject DeserializeU kind = prop.Value.GetString().ToRunStepToolCallKind(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRunStepDetailsToolCallsObjectToolCallsObject(id, kind, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.cs b/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.cs index 64e0d13c9..d16094186 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, Assistants.RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties) : base(id, kind, additionalBinaryDataProperties) + internal UnknownRunStepDetailsToolCallsObjectToolCallsObject(string id, RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties) : base(id, kind, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs b/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs index 9eed83689..b0145a2a2 100644 --- a/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs @@ -61,10 +61,7 @@ internal static UnknownRunStepObjectStepDetails DeserializeUnknownRunStepObjectS @type = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRunStepObjectStepDetails(@type, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/UserChatMessage.Serialization.cs b/src/Generated/Models/UserChatMessage.Serialization.cs index c53bf0f9d..d8029da3e 100644 --- a/src/Generated/Models/UserChatMessage.Serialization.cs +++ b/src/Generated/Models/UserChatMessage.Serialization.cs @@ -48,7 +48,7 @@ internal static UserChatMessage DeserializeUserChatMessage(JsonElement element, return null; } ChatMessageContent content = default; - Chat.ChatMessageRole role = default; + ChatMessageRole role = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string participantName = default; foreach (var prop in element.EnumerateObject()) @@ -68,13 +68,9 @@ internal static UserChatMessage DeserializeUserChatMessage(JsonElement element, participantName = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - // CUSTOM: Initialize Content collection property. - return new UserChatMessage(content ?? new ChatMessageContent(), role, additionalBinaryDataProperties, participantName); + return new UserChatMessage(content, role, additionalBinaryDataProperties, participantName); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); diff --git a/src/Generated/Models/UserChatMessage.cs b/src/Generated/Models/UserChatMessage.cs index 4d7bda7a0..3d71f7d85 100644 --- a/src/Generated/Models/UserChatMessage.cs +++ b/src/Generated/Models/UserChatMessage.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat { public partial class UserChatMessage : ChatMessage { - internal UserChatMessage(ChatMessageContent content, Chat.ChatMessageRole role, IDictionary additionalBinaryDataProperties, string participantName) : base(content, role, additionalBinaryDataProperties) + 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 8779c4de8..20352302a 100644 --- a/src/Generated/Models/VectorStore.Serialization.cs +++ b/src/Generated/Models/VectorStore.Serialization.cs @@ -63,31 +63,24 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(ExpiresAt) && _additionalBinaryDataProperties?.ContainsKey("expires_at") != true) { - if (ExpiresAt != null) - { - writer.WritePropertyName("expires_at"u8); - writer.WriteNumberValue(ExpiresAt.Value, "U"); - } - else - { - writer.WriteNull("expiresAt"u8); - } + writer.WritePropertyName("expires_at"u8); + writer.WriteNumberValue(ExpiresAt.Value, "U"); } if (_additionalBinaryDataProperties?.ContainsKey("last_active_at") != true) { - if (LastActiveAt != null) + if (Optional.IsDefined(LastActiveAt)) { writer.WritePropertyName("last_active_at"u8); writer.WriteNumberValue(LastActiveAt.Value, "U"); } else { - writer.WriteNull("lastActiveAt"u8); + writer.WriteNull("last_active_at"u8); } } - if (true && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (Metadata != null && Optional.IsCollectionDefined(Metadata)) + if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) { writer.WritePropertyName("metadata"u8); writer.WriteStartObject(); @@ -111,14 +104,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (Optional.IsDefined(ExpirationPolicy) && _additionalBinaryDataProperties?.ContainsKey("expires_after") != true) { writer.WritePropertyName("expires_after"u8); - writer.WriteObjectValue(ExpirationPolicy, options); + writer.WriteObjectValue(ExpirationPolicy, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -163,7 +156,7 @@ internal static VectorStore DeserializeVectorStore(JsonElement element, ModelRea string name = default; int usageBytes = default; VectorStoreFileCounts fileCounts = default; - VectorStores.VectorStoreStatus status = default; + VectorStoreStatus status = default; DateTimeOffset? expiresAt = default; DateTimeOffset? lastActiveAt = default; IReadOnlyDictionary metadata = default; @@ -258,10 +251,7 @@ internal static VectorStore DeserializeVectorStore(JsonElement element, ModelRea expirationPolicy = VectorStoreExpirationPolicy.DeserializeVectorStoreExpirationPolicy(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStore( id, diff --git a/src/Generated/Models/VectorStore.cs b/src/Generated/Models/VectorStore.cs index b86c907e8..7ead1d272 100644 --- a/src/Generated/Models/VectorStore.cs +++ b/src/Generated/Models/VectorStore.cs @@ -12,7 +12,7 @@ public partial class VectorStore { private protected IDictionary _additionalBinaryDataProperties; - internal VectorStore(string id, DateTimeOffset createdAt, string name, int usageBytes, VectorStoreFileCounts fileCounts, VectorStores.VectorStoreStatus status, DateTimeOffset? lastActiveAt) + internal VectorStore(string id, DateTimeOffset createdAt, string name, int usageBytes, VectorStoreFileCounts fileCounts, VectorStoreStatus status, DateTimeOffset? lastActiveAt) { Id = id; CreatedAt = createdAt; @@ -24,7 +24,7 @@ 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, VectorStores.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, InternalVectorStoreObjectObject @object, VectorStoreExpirationPolicy expirationPolicy, IDictionary additionalBinaryDataProperties) { Id = id; CreatedAt = createdAt; @@ -35,7 +35,7 @@ internal VectorStore(string id, DateTimeOffset createdAt, string name, int usage ExpiresAt = expiresAt; LastActiveAt = lastActiveAt; Metadata = metadata; - this.Object = @object; + Object = @object; ExpirationPolicy = expirationPolicy; _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -50,7 +50,7 @@ internal VectorStore(string id, DateTimeOffset createdAt, string name, int usage public VectorStoreFileCounts FileCounts { get; } - public VectorStores.VectorStoreStatus Status { get; } + public VectorStoreStatus Status { get; } public DateTimeOffset? ExpiresAt { get; } diff --git a/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs b/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs index 643b8ac93..a6640392e 100644 --- a/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs +++ b/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs @@ -54,14 +54,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("file_counts") != true) { writer.WritePropertyName("file_counts"u8); - writer.WriteObjectValue(FileCounts, options); + writer.WriteObjectValue(FileCounts, options); } if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteObjectValue(this.Object, options); + writer.WriteObjectValue(Object, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -140,10 +140,7 @@ internal static VectorStoreBatchFileJob DeserializeVectorStoreBatchFileJob(JsonE @object = prop.Value.GetObject(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreBatchFileJob( createdAt, diff --git a/src/Generated/Models/VectorStoreBatchFileJob.cs b/src/Generated/Models/VectorStoreBatchFileJob.cs index 919b553ca..3fe31301f 100644 --- a/src/Generated/Models/VectorStoreBatchFileJob.cs +++ b/src/Generated/Models/VectorStoreBatchFileJob.cs @@ -27,7 +27,7 @@ internal VectorStoreBatchFileJob(DateTimeOffset createdAt, string vectorStoreId, Status = status; BatchId = batchId; FileCounts = fileCounts; - this.Object = @object; + Object = @object; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs b/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs index 68824cf3c..468170a5d 100644 --- a/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs +++ b/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs @@ -62,9 +62,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(ChunkingStrategy) && _additionalBinaryDataProperties?.ContainsKey("chunking_strategy") != true) { writer.WritePropertyName("chunking_strategy"u8); - writer.WriteObjectValue(ChunkingStrategy, options); + writer.WriteObjectValue(ChunkingStrategy, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -161,10 +161,7 @@ internal static VectorStoreCreationHelper DeserializeVectorStoreCreationHelper(J chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreCreationHelper(fileIds ?? new ChangeTrackingList(), metadata ?? new ChangeTrackingDictionary(), chunkingStrategy, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs b/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs index e5147480d..daab452f4 100644 --- a/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs +++ b/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs @@ -66,14 +66,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(ExpirationPolicy) && _additionalBinaryDataProperties?.ContainsKey("expires_after") != true) { writer.WritePropertyName("expires_after"u8); - writer.WriteObjectValue(ExpirationPolicy, options); + writer.WriteObjectValue(ExpirationPolicy, options); } if (Optional.IsDefined(ChunkingStrategy) && _additionalBinaryDataProperties?.ContainsKey("chunking_strategy") != true) { writer.WritePropertyName("chunking_strategy"u8); - writer.WriteObjectValue(ChunkingStrategy, options); + writer.WriteObjectValue(ChunkingStrategy, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -186,10 +186,7 @@ internal static VectorStoreCreationOptions DeserializeVectorStoreCreationOptions chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreCreationOptions( fileIds ?? new ChangeTrackingList(), diff --git a/src/Generated/Models/VectorStoreDeletionResult.Serialization.cs b/src/Generated/Models/VectorStoreDeletionResult.Serialization.cs index ffbcc14f0..966ed1749 100644 --- a/src/Generated/Models/VectorStoreDeletionResult.Serialization.cs +++ b/src/Generated/Models/VectorStoreDeletionResult.Serialization.cs @@ -44,9 +44,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -107,10 +107,7 @@ internal static VectorStoreDeletionResult DeserializeVectorStoreDeletionResult(J @object = new InternalDeleteVectorStoreResponseObject(prop.Value.GetString()); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreDeletionResult(deleted, vectorStoreId, @object, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/VectorStoreDeletionResult.cs b/src/Generated/Models/VectorStoreDeletionResult.cs index 35a6a2908..c02962e8a 100644 --- a/src/Generated/Models/VectorStoreDeletionResult.cs +++ b/src/Generated/Models/VectorStoreDeletionResult.cs @@ -21,7 +21,7 @@ internal VectorStoreDeletionResult(bool deleted, string vectorStoreId, InternalD { Deleted = deleted; VectorStoreId = vectorStoreId; - this.Object = @object; + Object = @object; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/VectorStoreExpirationAnchor.Serialization.cs b/src/Generated/Models/VectorStoreExpirationAnchor.Serialization.cs index 0c7b2962c..d77adf5be 100644 --- a/src/Generated/Models/VectorStoreExpirationAnchor.Serialization.cs +++ b/src/Generated/Models/VectorStoreExpirationAnchor.Serialization.cs @@ -8,17 +8,17 @@ namespace OpenAI.VectorStores { internal static partial class VectorStoreExpirationAnchorExtensions { - public static string ToSerialString(this VectorStores.VectorStoreExpirationAnchor value) => value switch + public static string ToSerialString(this VectorStoreExpirationAnchor value) => value switch { - VectorStores.VectorStoreExpirationAnchor.LastActiveAt => "last_active_at", + VectorStoreExpirationAnchor.LastActiveAt => "last_active_at", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown VectorStoreExpirationAnchor value.") }; - public static VectorStores.VectorStoreExpirationAnchor ToVectorStoreExpirationAnchor(this string value) + public static VectorStoreExpirationAnchor ToVectorStoreExpirationAnchor(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "last_active_at")) { - return VectorStores.VectorStoreExpirationAnchor.LastActiveAt; + return VectorStoreExpirationAnchor.LastActiveAt; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown VectorStoreExpirationAnchor value."); } diff --git a/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs b/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs index a6e7d9c89..ef557c1d6 100644 --- a/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs +++ b/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs @@ -37,7 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("days"u8); writer.WriteNumberValue(_days); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -77,7 +77,7 @@ internal static VectorStoreExpirationPolicy DeserializeVectorStoreExpirationPoli { return null; } - VectorStores.VectorStoreExpirationAnchor anchor = default; + VectorStoreExpirationAnchor anchor = default; int days = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -92,10 +92,7 @@ internal static VectorStoreExpirationPolicy DeserializeVectorStoreExpirationPoli days = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreExpirationPolicy(anchor, days, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs b/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs index 38cb0416e..bb107c8b7 100644 --- a/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs +++ b/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs @@ -48,20 +48,20 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (_additionalBinaryDataProperties?.ContainsKey("last_error") != true) { - if (LastError != null) + if (Optional.IsDefined(LastError)) { writer.WritePropertyName("last_error"u8); writer.WriteObjectValue(LastError, options); } else { - writer.WriteNull("lastError"u8); + writer.WriteNull("last_error"u8); } } if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(this.Object.ToString()); + writer.WriteStringValue(Object.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("id") != true) { @@ -73,12 +73,35 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("usage_bytes"u8); writer.WriteNumberValue(Size); } + if (Optional.IsCollectionDefined(Attributes) && _additionalBinaryDataProperties?.ContainsKey("attributes") != true) + { + 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(); + } if (Optional.IsDefined(ChunkingStrategy) && _additionalBinaryDataProperties?.ContainsKey("chunking_strategy") != true) { writer.WritePropertyName("chunking_strategy"u8); - writer.WriteObjectValue(ChunkingStrategy, options); + writer.WriteObjectValue(ChunkingStrategy, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -120,11 +143,12 @@ internal static VectorStoreFileAssociation DeserializeVectorStoreFileAssociation } DateTimeOffset createdAt = default; string vectorStoreId = default; - VectorStores.VectorStoreFileAssociationStatus status = default; + VectorStoreFileAssociationStatus status = default; VectorStoreFileAssociationError lastError = default; InternalVectorStoreFileObjectObject @object = default; string fileId = default; int size = default; + IDictionary attributes = default; FileChunkingStrategy chunkingStrategy = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -169,19 +193,37 @@ internal static VectorStoreFileAssociation DeserializeVectorStoreFileAssociation size = prop.Value.GetInt32(); continue; } - if (prop.NameEquals("chunking_strategy"u8)) + if (prop.NameEquals("attributes"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { continue; } - chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(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 (true) + if (prop.NameEquals("chunking_strategy"u8)) { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(prop.Value, options); + continue; } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreFileAssociation( createdAt, @@ -191,6 +233,7 @@ internal static VectorStoreFileAssociation DeserializeVectorStoreFileAssociation @object, fileId, size, + attributes ?? new ChangeTrackingDictionary(), chunkingStrategy, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/VectorStoreFileAssociation.cs b/src/Generated/Models/VectorStoreFileAssociation.cs index 037763511..2323433ec 100644 --- a/src/Generated/Models/VectorStoreFileAssociation.cs +++ b/src/Generated/Models/VectorStoreFileAssociation.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI; namespace OpenAI.VectorStores { @@ -11,7 +12,7 @@ public partial class VectorStoreFileAssociation { private protected IDictionary _additionalBinaryDataProperties; - internal VectorStoreFileAssociation(DateTimeOffset createdAt, string vectorStoreId, VectorStores.VectorStoreFileAssociationStatus status, VectorStoreFileAssociationError lastError, string fileId, int size) + internal VectorStoreFileAssociation(DateTimeOffset createdAt, string vectorStoreId, VectorStoreFileAssociationStatus status, VectorStoreFileAssociationError lastError, string fileId, int size) { CreatedAt = createdAt; VectorStoreId = vectorStoreId; @@ -19,17 +20,19 @@ internal VectorStoreFileAssociation(DateTimeOffset createdAt, string vectorStore LastError = lastError; FileId = fileId; Size = size; + Attributes = new ChangeTrackingDictionary(); } - internal VectorStoreFileAssociation(DateTimeOffset createdAt, string vectorStoreId, VectorStores.VectorStoreFileAssociationStatus status, VectorStoreFileAssociationError lastError, InternalVectorStoreFileObjectObject @object, string fileId, int size, FileChunkingStrategy chunkingStrategy, IDictionary additionalBinaryDataProperties) + internal VectorStoreFileAssociation(DateTimeOffset createdAt, string vectorStoreId, VectorStoreFileAssociationStatus status, VectorStoreFileAssociationError lastError, InternalVectorStoreFileObjectObject @object, string fileId, int size, IDictionary attributes, FileChunkingStrategy chunkingStrategy, IDictionary additionalBinaryDataProperties) { CreatedAt = createdAt; VectorStoreId = vectorStoreId; Status = status; LastError = lastError; - this.Object = @object; + Object = @object; FileId = fileId; Size = size; + Attributes = attributes; ChunkingStrategy = chunkingStrategy; _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -38,7 +41,7 @@ internal VectorStoreFileAssociation(DateTimeOffset createdAt, string vectorStore public string VectorStoreId { get; } - public VectorStores.VectorStoreFileAssociationStatus Status { get; } + public VectorStoreFileAssociationStatus Status { get; } public VectorStoreFileAssociationError LastError { get; } diff --git a/src/Generated/Models/VectorStoreFileAssociationCollectionOrder.cs b/src/Generated/Models/VectorStoreFileAssociationCollectionOrder.cs deleted file mode 100644 index 0f1f67686..000000000 --- a/src/Generated/Models/VectorStoreFileAssociationCollectionOrder.cs +++ /dev/null @@ -1,40 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.VectorStores -{ - public readonly partial struct VectorStoreFileAssociationCollectionOrder : IEquatable - { - private readonly string _value; - private const string AscValue = "asc"; - private const string DescValue = "desc"; - - public VectorStoreFileAssociationCollectionOrder(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static bool operator ==(VectorStoreFileAssociationCollectionOrder left, VectorStoreFileAssociationCollectionOrder right) => left.Equals(right); - - public static bool operator !=(VectorStoreFileAssociationCollectionOrder left, VectorStoreFileAssociationCollectionOrder right) => !left.Equals(right); - - public static implicit operator VectorStoreFileAssociationCollectionOrder(string value) => new VectorStoreFileAssociationCollectionOrder(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is VectorStoreFileAssociationCollectionOrder other && Equals(other); - - public bool Equals(VectorStoreFileAssociationCollectionOrder 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/VectorStoreFileAssociationError.Serialization.cs b/src/Generated/Models/VectorStoreFileAssociationError.Serialization.cs index d6e4ca8d5..124ba34a0 100644 --- a/src/Generated/Models/VectorStoreFileAssociationError.Serialization.cs +++ b/src/Generated/Models/VectorStoreFileAssociationError.Serialization.cs @@ -41,7 +41,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -96,10 +96,7 @@ internal static VectorStoreFileAssociationError DeserializeVectorStoreFileAssoci message = prop.Value.GetString(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreFileAssociationError(code, message, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/VectorStoreFileAssociationStatus.Serialization.cs b/src/Generated/Models/VectorStoreFileAssociationStatus.Serialization.cs index 49c9326c3..43a0d2b51 100644 --- a/src/Generated/Models/VectorStoreFileAssociationStatus.Serialization.cs +++ b/src/Generated/Models/VectorStoreFileAssociationStatus.Serialization.cs @@ -8,32 +8,32 @@ namespace OpenAI.VectorStores { internal static partial class VectorStoreFileAssociationStatusExtensions { - public static string ToSerialString(this VectorStores.VectorStoreFileAssociationStatus value) => value switch + public static string ToSerialString(this VectorStoreFileAssociationStatus value) => value switch { - VectorStores.VectorStoreFileAssociationStatus.InProgress => "in_progress", - VectorStores.VectorStoreFileAssociationStatus.Completed => "completed", - VectorStores.VectorStoreFileAssociationStatus.Cancelled => "cancelled", - VectorStores.VectorStoreFileAssociationStatus.Failed => "failed", + VectorStoreFileAssociationStatus.InProgress => "in_progress", + VectorStoreFileAssociationStatus.Completed => "completed", + VectorStoreFileAssociationStatus.Cancelled => "cancelled", + VectorStoreFileAssociationStatus.Failed => "failed", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown VectorStoreFileAssociationStatus value.") }; - public static VectorStores.VectorStoreFileAssociationStatus ToVectorStoreFileAssociationStatus(this string value) + public static VectorStoreFileAssociationStatus ToVectorStoreFileAssociationStatus(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) { - return VectorStores.VectorStoreFileAssociationStatus.InProgress; + return VectorStoreFileAssociationStatus.InProgress; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "completed")) { - return VectorStores.VectorStoreFileAssociationStatus.Completed; + return VectorStoreFileAssociationStatus.Completed; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "cancelled")) { - return VectorStores.VectorStoreFileAssociationStatus.Cancelled; + return VectorStoreFileAssociationStatus.Cancelled; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "failed")) { - return VectorStores.VectorStoreFileAssociationStatus.Failed; + return VectorStoreFileAssociationStatus.Failed; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown VectorStoreFileAssociationStatus value."); } diff --git a/src/Generated/Models/VectorStoreFileCounts.Serialization.cs b/src/Generated/Models/VectorStoreFileCounts.Serialization.cs index 05a8d299b..3f5e04a03 100644 --- a/src/Generated/Models/VectorStoreFileCounts.Serialization.cs +++ b/src/Generated/Models/VectorStoreFileCounts.Serialization.cs @@ -56,7 +56,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total"u8); writer.WriteNumberValue(Total); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -129,10 +129,7 @@ internal static VectorStoreFileCounts DeserializeVectorStoreFileCounts(JsonEleme total = prop.Value.GetInt32(); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreFileCounts( inProgress, diff --git a/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs b/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs index f74cbb1cb..06ace1219 100644 --- a/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs +++ b/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs @@ -29,15 +29,8 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(Name) && _additionalBinaryDataProperties?.ContainsKey("name") != true) { - if (Name != null) - { - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - } - else - { - writer.WriteNull("name"u8); - } + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); } if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) { @@ -57,17 +50,10 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } if (Optional.IsDefined(ExpirationPolicy) && _additionalBinaryDataProperties?.ContainsKey("expires_after") != true) { - if (ExpirationPolicy != null) - { - writer.WritePropertyName("expires_after"u8); - writer.WriteObjectValue(ExpirationPolicy, options); - } - else - { - writer.WriteNull("expiresAfter"u8); - } + writer.WritePropertyName("expires_after"u8); + writer.WriteObjectValue(ExpirationPolicy, options); } - if (true && _additionalBinaryDataProperties != null) + if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) { @@ -154,10 +140,7 @@ internal static VectorStoreModificationOptions DeserializeVectorStoreModificatio expirationPolicy = VectorStoreExpirationPolicy.DeserializeVectorStoreExpirationPolicy(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreModificationOptions(name, metadata ?? new ChangeTrackingDictionary(), expirationPolicy, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/VectorStoreStatus.Serialization.cs b/src/Generated/Models/VectorStoreStatus.Serialization.cs index 51e3ad31d..b841bc4dd 100644 --- a/src/Generated/Models/VectorStoreStatus.Serialization.cs +++ b/src/Generated/Models/VectorStoreStatus.Serialization.cs @@ -8,27 +8,27 @@ namespace OpenAI.VectorStores { internal static partial class VectorStoreStatusExtensions { - public static string ToSerialString(this VectorStores.VectorStoreStatus value) => value switch + public static string ToSerialString(this VectorStoreStatus value) => value switch { - VectorStores.VectorStoreStatus.Expired => "expired", - VectorStores.VectorStoreStatus.InProgress => "in_progress", - VectorStores.VectorStoreStatus.Completed => "completed", + VectorStoreStatus.Expired => "expired", + VectorStoreStatus.InProgress => "in_progress", + VectorStoreStatus.Completed => "completed", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown VectorStoreStatus value.") }; - public static VectorStores.VectorStoreStatus ToVectorStoreStatus(this string value) + public static VectorStoreStatus ToVectorStoreStatus(this string value) { if (StringComparer.OrdinalIgnoreCase.Equals(value, "expired")) { - return VectorStores.VectorStoreStatus.Expired; + return VectorStoreStatus.Expired; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) { - return VectorStores.VectorStoreStatus.InProgress; + return VectorStoreStatus.InProgress; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "completed")) { - return VectorStores.VectorStoreStatus.Completed; + return VectorStoreStatus.Completed; } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown VectorStoreStatus value."); } diff --git a/src/Generated/Models/WebSearchCallResponseItem.Serialization.cs b/src/Generated/Models/WebSearchCallResponseItem.Serialization.cs new file mode 100644 index 000000000..5dd469ea9 --- /dev/null +++ b/src/Generated/Models/WebSearchCallResponseItem.Serialization.cs @@ -0,0 +1,132 @@ +// + +#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 WebSearchCallResponseItem : 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(WebSearchCallResponseItem)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToSerialString()); + } + } + + WebSearchCallResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (WebSearchCallResponseItem)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(WebSearchCallResponseItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeWebSearchCallResponseItem(document.RootElement, options); + } + + internal static WebSearchCallResponseItem DeserializeWebSearchCallResponseItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesItemType @type = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + WebSearchCallStatus status = 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)) + { + status = prop.Value.GetString().ToWebSearchCallStatus(); + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new WebSearchCallResponseItem(@type, id, additionalBinaryDataProperties, status); + } + + 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(WebSearchCallResponseItem)} does not support writing '{options.Format}' format."); + } + } + + WebSearchCallResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (WebSearchCallResponseItem)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 DeserializeWebSearchCallResponseItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(WebSearchCallResponseItem)} does not support reading '{options.Format}' format."); + } + } + + 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 new file mode 100644 index 000000000..b10174636 --- /dev/null +++ b/src/Generated/Models/WebSearchCallResponseItem.cs @@ -0,0 +1,19 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class WebSearchCallResponseItem : ResponseItem + { + internal WebSearchCallResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, WebSearchCallStatus status) : base(@type, id, additionalBinaryDataProperties) + { + Status = status; + } + + public WebSearchCallStatus Status { get; } + } +} diff --git a/src/Generated/Models/WebSearchCallStatus.Serialization.cs b/src/Generated/Models/WebSearchCallStatus.Serialization.cs new file mode 100644 index 000000000..1bbe58551 --- /dev/null +++ b/src/Generated/Models/WebSearchCallStatus.Serialization.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Responses +{ + internal static partial class WebSearchCallStatusExtensions + { + public static string ToSerialString(this WebSearchCallStatus value) => value switch + { + WebSearchCallStatus.InProgress => "in_progress", + WebSearchCallStatus.Searching => "searching", + WebSearchCallStatus.Completed => "completed", + WebSearchCallStatus.Failed => "failed", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown WebSearchCallStatus value.") + }; + + public static WebSearchCallStatus ToWebSearchCallStatus(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) + { + return WebSearchCallStatus.InProgress; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "searching")) + { + return WebSearchCallStatus.Searching; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "completed")) + { + return WebSearchCallStatus.Completed; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "failed")) + { + return WebSearchCallStatus.Failed; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown WebSearchCallStatus value."); + } + } +} diff --git a/src/Generated/Models/WebSearchToolContextSize.cs b/src/Generated/Models/WebSearchToolContextSize.cs new file mode 100644 index 000000000..691dcb88c --- /dev/null +++ b/src/Generated/Models/WebSearchToolContextSize.cs @@ -0,0 +1,47 @@ +// + +#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 new file mode 100644 index 000000000..6cbf4214e --- /dev/null +++ b/src/Generated/Models/WebSearchToolLocation.Serialization.cs @@ -0,0 +1,134 @@ +// + +#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 UnknownResponsesWebSearchLocation.DeserializeUnknownResponsesWebSearchLocation(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 new file mode 100644 index 000000000..cbfdb8393 --- /dev/null +++ b/src/Generated/Models/WebSearchToolLocation.cs @@ -0,0 +1,32 @@ +// + +#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/WeightsAndBiasesIntegration.Serialization.cs b/src/Generated/Models/WeightsAndBiasesIntegration.Serialization.cs index 893030090..85e3ac124 100644 --- a/src/Generated/Models/WeightsAndBiasesIntegration.Serialization.cs +++ b/src/Generated/Models/WeightsAndBiasesIntegration.Serialization.cs @@ -73,10 +73,7 @@ internal static WeightsAndBiasesIntegration DeserializeWeightsAndBiasesIntegrati wandb = InternalCreateFineTuningJobRequestWandbIntegrationWandb.DeserializeInternalCreateFineTuningJobRequestWandbIntegrationWandb(prop.Value, options); continue; } - if (true) - { - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new WeightsAndBiasesIntegration(@type, additionalBinaryDataProperties, wandb); } diff --git a/src/Generated/ModerationClient.RestClient.cs b/src/Generated/ModerationClient.RestClient.cs index 6830098b0..013ff75d5 100644 --- a/src/Generated/ModerationClient.RestClient.cs +++ b/src/Generated/ModerationClient.RestClient.cs @@ -14,7 +14,7 @@ public partial class ModerationClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateCreateModerationRequest(BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateCreateModerationRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/ModerationClient.cs b/src/Generated/ModerationClient.cs index e9b11d1f4..c929b04b4 100644 --- a/src/Generated/ModerationClient.cs +++ b/src/Generated/ModerationClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.Moderations @@ -11,9 +10,6 @@ namespace OpenAI.Moderations public partial class ModerationClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected ModerationClient() { diff --git a/src/Generated/OpenAIClient.cs b/src/Generated/OpenAIClient.cs index 6d07001cd..b3167dce3 100644 --- a/src/Generated/OpenAIClient.cs +++ b/src/Generated/OpenAIClient.cs @@ -5,20 +5,28 @@ using System; using System.ClientModel; using System.ClientModel.Primitives; +using System.Threading; +using OpenAI.Responses; namespace OpenAI { public partial class OpenAIClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; 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 75e133f8b..d47b1cc5b 100644 --- a/src/Generated/OpenAIFileClient.RestClient.cs +++ b/src/Generated/OpenAIFileClient.RestClient.cs @@ -14,7 +14,7 @@ public partial class OpenAIFileClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateCreateFileRequest(BinaryContent content, string contentType, RequestOptions options) + internal virtual PipelineMessage CreateCreateFileRequest(BinaryContent content, string contentType, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -31,7 +31,7 @@ internal PipelineMessage CreateCreateFileRequest(BinaryContent content, string c return message; } - internal PipelineMessage CreateListFilesRequest(string purpose, RequestOptions options) + internal virtual PipelineMessage CreateListFilesRequest(string purpose, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -50,7 +50,7 @@ internal PipelineMessage CreateListFilesRequest(string purpose, RequestOptions o return message; } - internal PipelineMessage CreateRetrieveFileRequest(string fileId, RequestOptions options) + internal virtual PipelineMessage CreateRetrieveFileRequest(string fileId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -66,7 +66,7 @@ internal PipelineMessage CreateRetrieveFileRequest(string fileId, RequestOptions return message; } - internal PipelineMessage CreateDeleteFileRequest(string fileId, RequestOptions options) + internal virtual PipelineMessage CreateDeleteFileRequest(string fileId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -82,7 +82,7 @@ internal PipelineMessage CreateDeleteFileRequest(string fileId, RequestOptions o return message; } - internal PipelineMessage CreateDownloadFileRequest(string fileId, RequestOptions options) + internal virtual PipelineMessage CreateDownloadFileRequest(string fileId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/OpenAIFileClient.cs b/src/Generated/OpenAIFileClient.cs index bdab19cdd..24a40433e 100644 --- a/src/Generated/OpenAIFileClient.cs +++ b/src/Generated/OpenAIFileClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.Files @@ -11,9 +10,6 @@ namespace OpenAI.Files public partial class OpenAIFileClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected OpenAIFileClient() { diff --git a/src/Generated/OpenAIModelClient.RestClient.cs b/src/Generated/OpenAIModelClient.RestClient.cs index a94220acb..f1d547240 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 PipelineMessage CreateListModelsRequest(RequestOptions options) + internal virtual PipelineMessage CreateListModelsRequest(RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -28,7 +28,7 @@ internal PipelineMessage CreateListModelsRequest(RequestOptions options) return message; } - internal PipelineMessage CreateRetrieveModelRequest(string model, RequestOptions options) + internal virtual PipelineMessage CreateRetrieveModelRequest(string model, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -44,7 +44,7 @@ internal PipelineMessage CreateRetrieveModelRequest(string model, RequestOptions return message; } - internal PipelineMessage CreateDeleteModelRequest(string model, RequestOptions options) + internal virtual PipelineMessage CreateDeleteModelRequest(string model, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/OpenAIModelClient.cs b/src/Generated/OpenAIModelClient.cs index 77aafebbd..2fa603b06 100644 --- a/src/Generated/OpenAIModelClient.cs +++ b/src/Generated/OpenAIModelClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.Models @@ -11,9 +10,6 @@ namespace OpenAI.Models public partial class OpenAIModelClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected OpenAIModelClient() { diff --git a/src/Generated/OpenAIModelFactory.cs b/src/Generated/OpenAIModelFactory.cs index ae8b08455..c540279cb 100644 --- a/src/Generated/OpenAIModelFactory.cs +++ b/src/Generated/OpenAIModelFactory.cs @@ -9,51 +9,16 @@ using OpenAI.Audio; using OpenAI.Chat; using OpenAI.Embeddings; -using OpenAI.Files; using OpenAI.Images; -using OpenAI.Models; using OpenAI.Moderations; using OpenAI.RealtimeConversation; +using OpenAI.Responses; using OpenAI.VectorStores; namespace OpenAI { internal static partial class OpenAIModelFactory { - public static OpenAIFile OpenAIFile(string id = default, DateTimeOffset createdAt = default, string filename = default, Files.FilePurpose purpose = default, InternalOpenAIFileObject @object = default, int? sizeInBytes = default, Files.FileStatus status = default, string statusDetails = default) - { - - return new OpenAIFile( - id, - createdAt, - filename, - purpose, - @object, - sizeInBytes, - status, - statusDetails, - additionalBinaryDataProperties: null); - } - - public static VectorStore VectorStore(string id = default, DateTimeOffset createdAt = default, string name = default, int usageBytes = default, VectorStoreFileCounts fileCounts = default, VectorStores.VectorStoreStatus status = default, DateTimeOffset? expiresAt = default, DateTimeOffset? lastActiveAt = default, IReadOnlyDictionary metadata = default, InternalVectorStoreObjectObject @object = default, VectorStoreExpirationPolicy expirationPolicy = default) - { - metadata ??= new ChangeTrackingDictionary(); - - return new VectorStore( - id, - createdAt, - name, - usageBytes, - fileCounts, - status, - expiresAt, - lastActiveAt, - metadata, - @object, - expirationPolicy, - additionalBinaryDataProperties: null); - } - public static VectorStoreFileCounts VectorStoreFileCounts(int inProgress = default, int completed = default, int failed = default, int cancelled = default, int total = default) { @@ -66,10 +31,10 @@ public static VectorStoreFileCounts VectorStoreFileCounts(int inProgress = defau additionalBinaryDataProperties: null); } - public static VectorStoreExpirationPolicy VectorStoreExpirationPolicy(VectorStores.VectorStoreExpirationAnchor anchor = default, int days = default) + public static VectorStoreExpirationPolicy VectorStoreExpirationPolicy(VectorStoreExpirationAnchor anchor = default, int days = default) { - return new VectorStoreExpirationPolicy(anchor, days, serializedAdditionalRawData: null); + return new VectorStoreExpirationPolicy(anchor, days, additionalBinaryDataProperties: null); } public static VectorStoreCreationOptions VectorStoreCreationOptions(IEnumerable fileIds = default, string name = default, IDictionary metadata = default, VectorStoreExpirationPolicy expirationPolicy = default, FileChunkingStrategy chunkingStrategy = default) @@ -93,64 +58,140 @@ public static VectorStoreModificationOptions VectorStoreModificationOptions(stri return new VectorStoreModificationOptions(name, metadata, expirationPolicy, additionalBinaryDataProperties: null); } - public static VectorStoreDeletionResult VectorStoreDeletionResult(bool deleted = default, string vectorStoreId = default, InternalDeleteVectorStoreResponseObject @object = default) + public static VectorStoreFileAssociationError VectorStoreFileAssociationError(VectorStoreFileAssociationErrorCode code = default, string message = default) { - return new VectorStoreDeletionResult(deleted, vectorStoreId, @object, additionalBinaryDataProperties: null); + return new VectorStoreFileAssociationError(code, message, additionalBinaryDataProperties: null); } - public static VectorStoreFileAssociation VectorStoreFileAssociation(DateTimeOffset createdAt = default, string vectorStoreId = default, VectorStores.VectorStoreFileAssociationStatus status = default, VectorStoreFileAssociationError lastError = default, InternalVectorStoreFileObjectObject @object = default, string fileId = default, int size = default, FileChunkingStrategy chunkingStrategy = default) + public static FileChunkingStrategy FileChunkingStrategy(string @type = default) { - return new VectorStoreFileAssociation( + return new InternalUnknownFileChunkingStrategyResponseParamProxy(@type, additionalBinaryDataProperties: null); + } + + public static VectorStoreBatchFileJob VectorStoreBatchFileJob(DateTimeOffset createdAt = default, string vectorStoreId = default, VectorStoreBatchFileJobStatus status = default, string batchId = default, VectorStoreFileCounts fileCounts = default, object @object = default) + { + + return new VectorStoreBatchFileJob( createdAt, vectorStoreId, status, - lastError, + batchId, + fileCounts, @object, - fileId, - size, - chunkingStrategy, additionalBinaryDataProperties: null); } - public static VectorStoreFileAssociationError VectorStoreFileAssociationError(VectorStoreFileAssociationErrorCode code = default, string message = default) + public static ResponseReasoningOptions ResponseReasoningOptions(ResponseReasoningEffortLevel? reasoningEffortLevel = default, ResponseReasoningSummaryVerbosity? reasoningSummaryVerbosity = default) { - return new VectorStoreFileAssociationError(code, message, additionalBinaryDataProperties: null); + return new ResponseReasoningOptions(reasoningEffortLevel, reasoningSummaryVerbosity, additionalBinaryDataProperties: null); } - public static StaticFileChunkingStrategy StaticFileChunkingStrategy(InternalStaticChunkingStrategyDetails internalDetails = default) + public static ResponseTextOptions ResponseTextOptions(ResponseTextFormat responseFormat = default) { - return new StaticFileChunkingStrategy("static", additionalBinaryDataProperties: null, internalDetails); + return new ResponseTextOptions(responseFormat, additionalBinaryDataProperties: null); } - public static FileChunkingStrategy FileChunkingStrategy(string @type = default) + public static FileSearchToolRankingOptions FileSearchToolRankingOptions(FileSearchToolRanker? ranker = default, float? scoreThreshold = default) { - return new InternalUnknownFileChunkingStrategyResponseParamProxy(@type, additionalBinaryDataProperties: null); + return new FileSearchToolRankingOptions(ranker, scoreThreshold, additionalBinaryDataProperties: null); } - public static FileFromStoreRemovalResult FileFromStoreRemovalResult(string fileId = default, bool removed = default, InternalDeleteVectorStoreFileResponseObject @object = default) + public static WebSearchToolLocation WebSearchToolLocation(string @type = default) { - return new FileFromStoreRemovalResult(fileId, removed, @object, additionalBinaryDataProperties: null); + return new UnknownResponsesWebSearchLocation(@type, 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 ResponseContentPart ResponseContentPart(string kind = default) { - return new VectorStoreBatchFileJob( - createdAt, - vectorStoreId, - status, - batchId, - fileCounts, - @object, + return new UnknownResponsesContent(kind.ToResponseContentPartKind(), additionalBinaryDataProperties: null); + } + + public static ResponseMessageAnnotation ResponseMessageAnnotation(string kind = default) + { + + return new UnknownResponsesOutputTextAnnotation(kind.ToResponseMessageAnnotationKind(), additionalBinaryDataProperties: null); + } + + public static ComputerCallAction ComputerCallAction(string kind = default) + { + + return new UnknownResponsesComputerCallItemAction(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 FileSearchCallResult FileSearchCallResult(string fileId = default, string text = default, string filename = default, IDictionary attributes = default, float? score = default) + { + attributes ??= new ChangeTrackingDictionary(); + + return new FileSearchCallResult( + fileId, + text, + filename, + attributes, + score, additionalBinaryDataProperties: null); } + public static StreamingResponseUpdate StreamingResponseUpdate(string kind = default) + { + + return new UnknownResponsesResponseStreamEvent(new StreamingResponseUpdateKind(kind), additionalBinaryDataProperties: null); + } + + public static StreamingResponseErrorUpdate StreamingResponseErrorUpdate(string message = default, string code = default, string @param = default) + { + + return new StreamingResponseErrorUpdate(StreamingResponseUpdateKind.Error, additionalBinaryDataProperties: null, message, code, @param); + } + + public static ResponseError ResponseError(string 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) + { + + return new ResponseTokenUsage(inputTokenCount, outputTokenCount, totalTokenCount, outputTokenDetails, additionalBinaryDataProperties: null); + } + + public static ResponseOutputTokenUsageDetails ResponseOutputTokenUsageDetails(int reasoningTokenCount = default) + { + + return new ResponseOutputTokenUsageDetails(reasoningTokenCount, additionalBinaryDataProperties: null); + } + + public static StreamingResponseTextAnnotationUpdate StreamingResponseTextAnnotationUpdate(string itemId = default, int outputIndex = default, int contentIndex = default, ResponseMessageAnnotation annotation = default) + { + + return new StreamingResponseTextAnnotationUpdate( + StreamingResponseUpdateKind.ResponseOutputTextAnnotationAdded, + additionalBinaryDataProperties: null, + itemId, + outputIndex, + contentIndex, + annotation); + } + public static ThreadCreationOptions ThreadCreationOptions(IDictionary metadata = default, ToolResources toolResources = default, IEnumerable internalMessages = default) { metadata ??= new ChangeTrackingDictionary(); @@ -187,24 +228,12 @@ public static ToolDefinition ToolDefinition(string @type = default) return new UnknownAssistantToolDefinition(@type, additionalBinaryDataProperties: null); } - public static FileSearchToolDefinition FileSearchToolDefinition(InternalAssistantToolsFileSearchFileSearch fileSearch = default) - { - - return new FileSearchToolDefinition("file_search", additionalBinaryDataProperties: null, fileSearch); - } - public static FileSearchRankingOptions FileSearchRankingOptions(FileSearchRanker? ranker = default, float scoreThreshold = default) { return new FileSearchRankingOptions(ranker, scoreThreshold, serializedAdditionalRawData: null); } - public static FunctionToolDefinition FunctionToolDefinition(string @type = default, InternalFunctionDefinition function = default) - { - - return new FunctionToolDefinition(@type, serializedAdditionalRawData: null, function); - } - public static FileSearchToolResources FileSearchToolResources(IEnumerable vectorStoreIds = default, IEnumerable newVectorStores = default) { vectorStoreIds ??= new ChangeTrackingList(); @@ -221,54 +250,6 @@ public static VectorStoreCreationHelper VectorStoreCreationHelper(IEnumerable tools = default, IReadOnlyDictionary metadata = default, RunTokenUsage usage = default, float? temperature = default, RunTruncationStrategy truncationStrategy = default, InternalRunObjectObject @object = default, AssistantResponseFormat responseFormat = default, ToolConstraint toolConstraint = default, float? nucleusSamplingFactor = default, bool? allowParallelToolCalls = default, int? maxInputTokenCount = default, int? maxOutputTokenCount = default, InternalRunRequiredAction internalRequiredAction = default) - { - tools ??= new ChangeTrackingList(); - metadata ??= new ChangeTrackingDictionary(); - - return new ThreadRun( - id, - createdAt, - threadId, - assistantId, - status, - lastError, - expiresAt, - startedAt, - cancelledAt, - failedAt, - completedAt, - incompleteDetails, - model, - instructions, - tools?.ToList(), - metadata, - usage, - temperature, - truncationStrategy, - @object, - responseFormat, - toolConstraint, - nucleusSamplingFactor, - allowParallelToolCalls, - maxInputTokenCount, - maxOutputTokenCount, - internalRequiredAction, - additionalBinaryDataProperties: null); - } - public static RunError RunError(RunErrorCode code = default, string message = default) { @@ -287,7 +268,7 @@ public static RunTokenUsage RunTokenUsage(int outputTokenCount = default, int in return new RunTokenUsage(outputTokenCount, inputTokenCount, totalTokenCount, 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) + 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(); @@ -310,6 +291,7 @@ public static RunCreationOptions RunCreationOptions(string assistantId = default maxOutputTokenCount, truncationStrategy, toolConstraint, + reasoningEffortLevel, additionalBinaryDataProperties: null); } @@ -326,30 +308,6 @@ public static ToolOutput ToolOutput(string toolCallId = default, string output = return new ToolOutput(toolCallId, output, additionalBinaryDataProperties: null); } - public static RunStep RunStep(string id = default, DateTimeOffset createdAt = default, string assistantId = default, string threadId = default, string runId = 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, InternalRunStepObjectObject @object = default, Assistants.RunStepKind kind = default, RunStepDetails details = default) - { - metadata ??= new ChangeTrackingDictionary(); - - return new RunStep( - id, - createdAt, - assistantId, - threadId, - runId, - status, - lastError, - expiredAt, - cancelledAt, - failedAt, - completedAt, - metadata, - usage, - @object, - kind, - details, - additionalBinaryDataProperties: null); - } - public static RunStepDetails RunStepDetails(string @type = default) { @@ -375,7 +333,7 @@ public static RunStepFileSearchResult RunStepFileSearchResult(string fileId = de return new RunStepFileSearchResult(fileId, fileName, score, content?.ToList(), additionalBinaryDataProperties: null); } - public static RunStepFileSearchResultContent RunStepFileSearchResultContent(string text = default, Assistants.RunStepFileSearchResultContentKind kind = default) + public static RunStepFileSearchResultContent RunStepFileSearchResultContent(string text = default, RunStepFileSearchResultContentKind kind = default) { return new RunStepFileSearchResultContent(text, kind, additionalBinaryDataProperties: null); @@ -393,19 +351,6 @@ public static RunStepTokenUsage RunStepTokenUsage(int outputTokenCount = default return new RunStepTokenUsage(outputTokenCount, inputTokenCount, totalTokenCount, additionalBinaryDataProperties: null); } - public static AssistantThread AssistantThread(string id = default, DateTimeOffset createdAt = default, IReadOnlyDictionary metadata = default, InternalThreadObjectObject @object = default, ToolResources toolResources = default) - { - metadata ??= new ChangeTrackingDictionary(); - - return new AssistantThread( - id, - createdAt, - metadata, - @object, - toolResources, - additionalBinaryDataProperties: null); - } - public static ThreadModificationOptions ThreadModificationOptions(IDictionary metadata = default, ToolResources toolResources = default) { metadata ??= new ChangeTrackingDictionary(); @@ -413,33 +358,6 @@ public static ThreadModificationOptions ThreadModificationOptions(IDictionary tools = default, float? temperature = default, InternalRealtimeRequestSessionModel? model = default, ConversationTurnDetectionOptions turnDetectionOptions = default, ConversationInputTranscriptionOptions inputTranscriptionOptions = default, IEnumerable internalModalities = default, BinaryData internalToolChoice = default, BinaryData maxResponseOutputTokens = default) - { - tools ??= new ChangeTrackingList(); - internalModalities ??= new ChangeTrackingList(); - - return new ConversationSessionOptions( - instructions, - voice, - inputAudioFormat, - outputAudioFormat, - tools?.ToList(), - temperature, - model, - turnDetectionOptions, - inputTranscriptionOptions, - internalModalities?.ToList(), - internalToolChoice, - maxResponseOutputTokens, - additionalBinaryDataProperties: null); - } - public static ConversationInputTranscriptionOptions ConversationInputTranscriptionOptions(ConversationTranscriptionModel? model = default) { @@ -464,92 +382,40 @@ public static ConversationFunctionTool ConversationFunctionTool(ConversationTool return new ConversationFunctionTool(kind, serializedAdditionalRawData: null, name, description, parameters); } - public static ConversationItem ConversationItem(string @type = default, string id = default) - { - - return new UnknownRealtimeRequestItem(new InternalRealtimeItemType(@type), id, additionalBinaryDataProperties: null); - } - public static ConversationContentPart ConversationContentPart(string kind = default) { return new UnknownRealtimeContentPart(new ConversationContentPartKind(kind), additionalBinaryDataProperties: null); } - public static ConversationResponseOptions ConversationResponseOptions(string instructions = default, ConversationVoice? voice = default, ConversationAudioFormat? outputAudioFormat = default, IEnumerable tools = default, float? temperature = default, IDictionary metadata = default, ResponseConversationSelection? conversationSelection = default, RealtimeConversation.ConversationMaxTokensChoice maxOutputTokens = default, IEnumerable overrideItems = default, IEnumerable internalModalities = default, BinaryData internalToolChoice = default) - { - tools ??= new ChangeTrackingList(); - metadata ??= new ChangeTrackingDictionary(); - overrideItems ??= new ChangeTrackingList(); - internalModalities ??= new ChangeTrackingList(); - - return new ConversationResponseOptions( - instructions, - voice, - outputAudioFormat, - tools?.ToList(), - temperature, - metadata, - conversationSelection, - maxOutputTokens, - overrideItems?.ToList(), - internalModalities?.ToList(), - internalToolChoice, - additionalBinaryDataProperties: null); - } - public static ConversationUpdate ConversationUpdate(string eventId = default, string kind = default) { return new UnknownRealtimeServerEvent(eventId, kind.ToConversationUpdateKind(), additionalBinaryDataProperties: null); } - public static ConversationErrorUpdate ConversationErrorUpdate(string eventId = default, InternalRealtimeServerEventErrorError error = default) - { - - return new ConversationErrorUpdate(eventId, RealtimeConversation.ConversationUpdateKind.Error, additionalBinaryDataProperties: null, error); - } - - public static ConversationSessionStartedUpdate ConversationSessionStartedUpdate(string eventId = default, InternalRealtimeResponseSession internalSession = default) - { - - return new ConversationSessionStartedUpdate(eventId, RealtimeConversation.ConversationUpdateKind.SessionStarted, additionalBinaryDataProperties: null, internalSession); - } - - public static ConversationSessionConfiguredUpdate ConversationSessionConfiguredUpdate(string eventId = default, InternalRealtimeResponseSession internalSession = default) - { - - return new ConversationSessionConfiguredUpdate(eventId, RealtimeConversation.ConversationUpdateKind.SessionConfigured, additionalBinaryDataProperties: null, internalSession); - } - public static ConversationInputAudioCommittedUpdate ConversationInputAudioCommittedUpdate(string eventId = default, string previousItemId = default, string itemId = default) { - return new ConversationInputAudioCommittedUpdate(eventId, RealtimeConversation.ConversationUpdateKind.InputAudioCommitted, additionalBinaryDataProperties: null, previousItemId, itemId); + return new ConversationInputAudioCommittedUpdate(eventId, ConversationUpdateKind.InputAudioCommitted, additionalBinaryDataProperties: null, previousItemId, itemId); } public static ConversationInputAudioClearedUpdate ConversationInputAudioClearedUpdate(string eventId = default) { - return new ConversationInputAudioClearedUpdate(eventId, RealtimeConversation.ConversationUpdateKind.InputAudioCleared, additionalBinaryDataProperties: null); + return new ConversationInputAudioClearedUpdate(eventId, ConversationUpdateKind.InputAudioCleared, additionalBinaryDataProperties: null); } public static ConversationInputSpeechStartedUpdate ConversationInputSpeechStartedUpdate(string eventId = default, string itemId = default, int audioStartMs = default) { - return new ConversationInputSpeechStartedUpdate(eventId, RealtimeConversation.ConversationUpdateKind.InputSpeechStarted, additionalBinaryDataProperties: null, itemId, audioStartMs); + return new ConversationInputSpeechStartedUpdate(eventId, ConversationUpdateKind.InputSpeechStarted, additionalBinaryDataProperties: null, itemId, audioStartMs); } public static ConversationInputSpeechFinishedUpdate ConversationInputSpeechFinishedUpdate(string eventId = default, string itemId = default, int audioEndMs = default) { - return new ConversationInputSpeechFinishedUpdate(eventId, RealtimeConversation.ConversationUpdateKind.InputSpeechStopped, additionalBinaryDataProperties: null, itemId, audioEndMs); - } - - public static ConversationItemCreatedUpdate ConversationItemCreatedUpdate(string eventId = default, string previousItemId = default, InternalRealtimeConversationResponseItem internalItem = default) - { - - return new ConversationItemCreatedUpdate(eventId, RealtimeConversation.ConversationUpdateKind.ItemCreated, additionalBinaryDataProperties: null, previousItemId, internalItem); + return new ConversationInputSpeechFinishedUpdate(eventId, ConversationUpdateKind.InputSpeechStopped, additionalBinaryDataProperties: null, itemId, audioEndMs); } public static ConversationInputTranscriptionFinishedUpdate ConversationInputTranscriptionFinishedUpdate(string eventId = default, string itemId = default, int contentIndex = default, string transcript = default) @@ -557,31 +423,19 @@ public static ConversationInputTranscriptionFinishedUpdate ConversationInputTran return new ConversationInputTranscriptionFinishedUpdate( eventId, - RealtimeConversation.ConversationUpdateKind.InputTranscriptionFinished, + ConversationUpdateKind.InputTranscriptionFinished, additionalBinaryDataProperties: null, itemId, contentIndex, transcript); } - public static ConversationInputTranscriptionFailedUpdate ConversationInputTranscriptionFailedUpdate(string eventId = default, string itemId = default, int contentIndex = default, InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError error = default) - { - - return new ConversationInputTranscriptionFailedUpdate( - eventId, - RealtimeConversation.ConversationUpdateKind.InputTranscriptionFailed, - additionalBinaryDataProperties: null, - itemId, - contentIndex, - error); - } - public static ConversationItemTruncatedUpdate ConversationItemTruncatedUpdate(string eventId = default, string itemId = default, int contentIndex = default, int audioEndMs = default) { return new ConversationItemTruncatedUpdate( eventId, - RealtimeConversation.ConversationUpdateKind.ItemTruncated, + ConversationUpdateKind.ItemTruncated, additionalBinaryDataProperties: null, itemId, contentIndex, @@ -591,19 +445,7 @@ public static ConversationItemTruncatedUpdate ConversationItemTruncatedUpdate(st public static ConversationItemDeletedUpdate ConversationItemDeletedUpdate(string eventId = default, string itemId = default) { - return new ConversationItemDeletedUpdate(eventId, RealtimeConversation.ConversationUpdateKind.ItemDeleted, additionalBinaryDataProperties: null, itemId); - } - - public static ConversationResponseStartedUpdate ConversationResponseStartedUpdate(string eventId = default, InternalRealtimeResponse internalResponse = default) - { - - return new ConversationResponseStartedUpdate(eventId, RealtimeConversation.ConversationUpdateKind.ResponseStarted, additionalBinaryDataProperties: null, internalResponse); - } - - public static ConversationStatusDetails ConversationStatusDetails(ConversationStatus statusKind = default, ConversationIncompleteReason? incompleteReason = default, InternalRealtimeResponseStatusDetailsError error = default) - { - - return new ConversationStatusDetails(statusKind, incompleteReason, error, additionalBinaryDataProperties: null); + return new ConversationItemDeletedUpdate(eventId, ConversationUpdateKind.ItemDeleted, additionalBinaryDataProperties: null, itemId); } public static ConversationTokenUsage ConversationTokenUsage(ConversationInputTokenUsageDetails inputTokenDetails = default, ConversationOutputTokenUsageDetails outputTokenDetails = default, int inputTokenCount = default, int outputTokenCount = default, int totalTokenCount = default) @@ -630,42 +472,12 @@ public static ConversationOutputTokenUsageDetails ConversationOutputTokenUsageDe return new ConversationOutputTokenUsageDetails(textTokenCount, audioTokenCount, additionalBinaryDataProperties: null); } - public static ConversationResponseFinishedUpdate ConversationResponseFinishedUpdate(string eventId = default, InternalRealtimeResponse internalResponse = default) - { - - return new ConversationResponseFinishedUpdate(eventId, RealtimeConversation.ConversationUpdateKind.ResponseFinished, additionalBinaryDataProperties: null, internalResponse); - } - - public static ConversationItemStreamingStartedUpdate ConversationItemStreamingStartedUpdate(string eventId = default, string responseId = default, int itemIndex = default, InternalRealtimeConversationResponseItem internalItem = default) - { - - return new ConversationItemStreamingStartedUpdate( - eventId, - RealtimeConversation.ConversationUpdateKind.ItemStreamingStarted, - additionalBinaryDataProperties: null, - responseId, - itemIndex, - internalItem); - } - - public static ConversationItemStreamingFinishedUpdate ConversationItemStreamingFinishedUpdate(string eventId = default, string responseId = default, int outputIndex = default, InternalRealtimeConversationResponseItem internalItem = default) - { - - return new ConversationItemStreamingFinishedUpdate( - eventId, - RealtimeConversation.ConversationUpdateKind.ItemStreamingFinished, - additionalBinaryDataProperties: null, - responseId, - outputIndex, - internalItem); - } - public static ConversationItemStreamingTextFinishedUpdate ConversationItemStreamingTextFinishedUpdate(string eventId = default, string responseId = default, string itemId = default, int outputIndex = default, int contentIndex = default, string text = default) { return new ConversationItemStreamingTextFinishedUpdate( eventId, - RealtimeConversation.ConversationUpdateKind.ItemStreamingPartTextFinished, + ConversationUpdateKind.ItemStreamingPartTextFinished, additionalBinaryDataProperties: null, responseId, itemId, @@ -679,7 +491,7 @@ public static ConversationItemStreamingAudioTranscriptionFinishedUpdate Conversa return new ConversationItemStreamingAudioTranscriptionFinishedUpdate( eventId, - RealtimeConversation.ConversationUpdateKind.ItemStreamingPartAudioTranscriptionFinished, + ConversationUpdateKind.ItemStreamingPartAudioTranscriptionFinished, additionalBinaryDataProperties: null, responseId, itemId, @@ -693,7 +505,7 @@ public static ConversationItemStreamingAudioFinishedUpdate ConversationItemStrea return new ConversationItemStreamingAudioFinishedUpdate( eventId, - RealtimeConversation.ConversationUpdateKind.ItemStreamingPartAudioFinished, + ConversationUpdateKind.ItemStreamingPartAudioFinished, additionalBinaryDataProperties: null, responseId, itemId, @@ -705,7 +517,7 @@ public static ConversationRateLimitsUpdate ConversationRateLimitsUpdate(string e { allDetails ??= new ChangeTrackingList(); - return new ConversationRateLimitsUpdate(eventId, RealtimeConversation.ConversationUpdateKind.RateLimitsUpdated, additionalBinaryDataProperties: null, allDetails?.ToList()); + 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) @@ -727,49 +539,6 @@ public static ModerationResult ModerationResult(bool flagged = default) return new ModerationResult(flagged, additionalBinaryDataProperties: null); } - public static OpenAIModelCollection OpenAIModelCollection(InternalListModelsResponseObject @object = default, IEnumerable data = default) - { - data ??= new ChangeTrackingList(); - - return new OpenAIModelCollection(@object, data?.ToList(), serializedAdditionalRawData: null); - } - - public static OpenAIModel OpenAIModel(string id = default, string ownedBy = default, InternalModelObject @object = default, DateTimeOffset createdAt = default) - { - - return new OpenAIModel(id, ownedBy, @object, createdAt, additionalBinaryDataProperties: null); - } - - public static ModelDeletionResult ModelDeletionResult(bool deleted = default, string modelId = default, InternalDeleteModelResponseObject @object = default) - { - - return new ModelDeletionResult(deleted, modelId, @object, additionalBinaryDataProperties: null); - } - - public static ThreadMessage ThreadMessage(string id = default, DateTimeOffset createdAt = default, string threadId = default, MessageStatus status = default, MessageFailureDetails incompleteDetails = default, DateTimeOffset? completedAt = default, DateTimeOffset? incompleteAt = default, IEnumerable content = default, string assistantId = default, string runId = default, IReadOnlyDictionary metadata = default, InternalMessageObjectObject @object = default, Assistants.MessageRole role = default, IEnumerable attachments = default) - { - content ??= new ChangeTrackingList(); - metadata ??= new ChangeTrackingDictionary(); - attachments ??= new ChangeTrackingList(); - - return new ThreadMessage( - id, - createdAt, - threadId, - status, - incompleteDetails, - completedAt, - incompleteAt, - content?.ToList(), - assistantId, - runId, - metadata, - @object, - role, - attachments?.ToList(), - additionalBinaryDataProperties: null); - } - public static MessageFailureDetails MessageFailureDetails(MessageFailureReason reason = default) { @@ -783,12 +552,6 @@ public static MessageModificationOptions MessageModificationOptions(IDictionary< return new MessageModificationOptions(metadata, additionalBinaryDataProperties: null); } - public static MessageDeletionResult MessageDeletionResult(bool deleted = default, string messageId = default, InternalDeleteMessageResponseObject @object = default) - { - - return new MessageDeletionResult(deleted, messageId, @object, 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) { @@ -845,50 +608,6 @@ public static ImageVariationOptions ImageVariationOptions(InternalCreateImageVar 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 FileDeletionResult FileDeletionResult(bool deleted = default, string fileId = default, InternalDeleteFileResponseObject @object = default) - { - - return new FileDeletionResult(deleted, fileId, @object, additionalBinaryDataProperties: null); - } - - public static EmbeddingGenerationOptions EmbeddingGenerationOptions(int? dimensions = default, BinaryData input = default, InternalCreateEmbeddingRequestModel model = default, InternalCreateEmbeddingRequestEncodingFormat? encodingFormat = default, string endUserId = default) - { - - return new EmbeddingGenerationOptions( - dimensions, - input, - model, - encodingFormat, - endUserId, - additionalBinaryDataProperties: null); - } - - public static OpenAIEmbeddingCollection OpenAIEmbeddingCollection(IEnumerable data = default, string model = default, InternalCreateEmbeddingResponseObject @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, InternalEmbeddingObject @object = default) - { - - return new OpenAIEmbedding(index, embeddingProperty, @object, serializedAdditionalRawData: null); - } - public static EmbeddingTokenUsage EmbeddingTokenUsage(int inputTokenCount = default, int totalTokenCount = default) { @@ -919,50 +638,6 @@ public static ChatInputTokenUsageDetails ChatInputTokenUsageDetails(int audioTok return new ChatInputTokenUsageDetails(audioTokenCount, cachedTokenCount, additionalBinaryDataProperties: null); } - public static ChatCompletionOptions ChatCompletionOptions(float? frequencyPenalty = default, float? presencePenalty = default, ChatResponseFormat responseFormat = default, float? temperature = default, float? topP = default, IEnumerable tools = default, IEnumerable messages = default, InternalCreateChatCompletionRequestModel? model = default, int? n = default, bool? stream = default, InternalChatCompletionStreamOptions streamOptions = default, bool? includeLogProbabilities = default, int? topLogProbabilityCount = default, IEnumerable stopSequences = default, IDictionary logitBiases = default, ChatToolChoice toolChoice = default, ChatFunctionChoice functionChoice = default, bool? allowParallelToolCalls = default, string endUserId = default, long? seed = default, int? deprecatedMaxTokens = default, int? maxOutputTokenCount = default, IEnumerable functions = default, IDictionary metadata = default, bool? storedOutputEnabled = default, ChatReasoningEffortLevel? reasoningEffortLevel = default, IEnumerable internalModalities = default, ChatAudioOptions audioOptions = default, ChatOutputPrediction outputPrediction = default, InternalCreateChatCompletionRequestServiceTier? serviceTier = default) - { - tools ??= new ChangeTrackingList(); - messages ??= new ChangeTrackingList(); - stopSequences ??= new ChangeTrackingList(); - logitBiases ??= new ChangeTrackingDictionary(); - functions ??= new ChangeTrackingList(); - metadata ??= new ChangeTrackingDictionary(); - internalModalities ??= new ChangeTrackingList(); - - return new ChatCompletionOptions( - frequencyPenalty, - presencePenalty, - responseFormat, - temperature, - topP, - tools?.ToList(), - messages?.ToList(), - model, - n, - stream, - streamOptions, - includeLogProbabilities, - topLogProbabilityCount, - stopSequences?.ToList(), - logitBiases, - toolChoice, - functionChoice, - allowParallelToolCalls, - endUserId, - seed, - deprecatedMaxTokens, - maxOutputTokenCount, - functions?.ToList(), - metadata, - storedOutputEnabled, - reasoningEffortLevel, - internalModalities?.ToList(), - audioOptions, - outputPrediction, - serviceTier, - additionalBinaryDataProperties: null); - } - public static ChatMessage ChatMessage(ChatMessageContent content = default, string role = default) { @@ -972,19 +647,19 @@ public static ChatMessage ChatMessage(ChatMessageContent content = default, stri public static SystemChatMessage SystemChatMessage(ChatMessageContent content = default, string participantName = default) { - return new SystemChatMessage(content, Chat.ChatMessageRole.System, additionalBinaryDataProperties: null, participantName); + return new SystemChatMessage(content, ChatMessageRole.System, additionalBinaryDataProperties: null, participantName); } public static DeveloperChatMessage DeveloperChatMessage(ChatMessageContent content = default, string participantName = default) { - return new DeveloperChatMessage(content, Chat.ChatMessageRole.Developer, additionalBinaryDataProperties: null, participantName); + return new DeveloperChatMessage(content, ChatMessageRole.Developer, additionalBinaryDataProperties: null, participantName); } public static UserChatMessage UserChatMessage(ChatMessageContent content = default, string participantName = default) { - return new UserChatMessage(content, Chat.ChatMessageRole.User, additionalBinaryDataProperties: null, participantName); + return new UserChatMessage(content, ChatMessageRole.User, additionalBinaryDataProperties: null, participantName); } public static AssistantChatMessage AssistantChatMessage(ChatMessageContent content = default, string refusal = default, string participantName = default, IEnumerable toolCalls = default, ChatFunctionCall functionCall = default, ChatOutputAudioReference outputAudioReference = default) @@ -993,7 +668,7 @@ public static AssistantChatMessage AssistantChatMessage(ChatMessageContent conte return new AssistantChatMessage( content, - Chat.ChatMessageRole.Assistant, + ChatMessageRole.Assistant, additionalBinaryDataProperties: null, refusal, participantName, @@ -1008,12 +683,6 @@ public static ChatOutputAudioReference ChatOutputAudioReference(string id = defa return new ChatOutputAudioReference(id, additionalBinaryDataProperties: null); } - public static ChatToolCall ChatToolCall(string id = default, InternalChatCompletionMessageToolCallFunction function = default, Chat.ChatToolCallKind kind = default) - { - - return new ChatToolCall(id, function, kind, additionalBinaryDataProperties: null); - } - public static ChatFunctionCall ChatFunctionCall(string functionName = default, BinaryData functionArguments = default) { @@ -1023,25 +692,13 @@ public static ChatFunctionCall ChatFunctionCall(string functionName = default, B public static ToolChatMessage ToolChatMessage(ChatMessageContent content = default, string toolCallId = default) { - return new ToolChatMessage(content, Chat.ChatMessageRole.Tool, additionalBinaryDataProperties: null, toolCallId); + return new ToolChatMessage(content, ChatMessageRole.Tool, additionalBinaryDataProperties: null, toolCallId); } public static FunctionChatMessage FunctionChatMessage(ChatMessageContent content = default, string functionName = default) { - return new FunctionChatMessage(content, Chat.ChatMessageRole.Function, additionalBinaryDataProperties: null, functionName); - } - - public static ChatOutputPrediction ChatOutputPrediction(string @type = default) - { - - return new InternalUnknownChatOutputPrediction(new InternalChatOutputPredictionKind(@type), additionalBinaryDataProperties: null); - } - - public static ChatAudioOptions ChatAudioOptions(ChatOutputAudioVoice outputAudioVoice = default, ChatOutputAudioFormat outputAudioFormat = default) - { - - return new ChatAudioOptions(outputAudioVoice, outputAudioFormat, additionalBinaryDataProperties: null); + return new FunctionChatMessage(content, ChatMessageRole.Function, additionalBinaryDataProperties: null, functionName); } public static ChatResponseFormat ChatResponseFormat(string @type = default) @@ -1050,10 +707,10 @@ public static ChatResponseFormat ChatResponseFormat(string @type = default) return new InternalUnknownChatResponseFormat(@type, additionalBinaryDataProperties: null); } - public static ChatTool ChatTool(InternalFunctionDefinition function = default, Chat.ChatToolKind kind = default) + public static ChatAudioOptions ChatAudioOptions(ChatOutputAudioVoice outputAudioVoice = default, ChatOutputAudioFormat outputAudioFormat = default) { - return new ChatTool(function, kind, additionalBinaryDataProperties: null); + return new ChatAudioOptions(outputAudioVoice, outputAudioFormat, additionalBinaryDataProperties: null); } public static ChatFunction ChatFunction(string functionName = default, string functionDescription = default, BinaryData functionParameters = default) @@ -1062,22 +719,6 @@ public static ChatFunction ChatFunction(string functionName = default, string fu return new ChatFunction(functionName, functionDescription, functionParameters, additionalBinaryDataProperties: null); } - public static ChatCompletion ChatCompletion(string id = default, string model = default, string systemFingerprint = default, ChatTokenUsage usage = default, InternalCreateChatCompletionResponseObject @object = default, InternalCreateChatCompletionResponseServiceTier? serviceTier = default, IEnumerable choices = default, DateTimeOffset createdAt = default) - { - choices ??= new ChangeTrackingList(); - - return new ChatCompletion( - id, - model, - systemFingerprint, - usage, - @object, - serviceTier, - choices?.ToList(), - createdAt, - additionalBinaryDataProperties: null); - } - public static ChatOutputAudio ChatOutputAudio(string id = default, DateTimeOffset expiresAt = default, string transcript = default, BinaryData audioBytes = default) { @@ -1097,7 +738,7 @@ public static ChatTokenTopLogProbabilityDetails ChatTokenTopLogProbabilityDetail return new ChatTokenTopLogProbabilityDetails(token, logProbability, utf8Bytes, 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) + 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(); @@ -1113,28 +754,7 @@ public static AssistantCreationOptions AssistantCreationOptions(string name = de toolResources, responseFormat, nucleusSamplingFactor, - 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, InternalAssistantObjectObject @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, + reasoningEffortLevel, additionalBinaryDataProperties: null); } @@ -1151,7 +771,7 @@ public static CodeInterpreterToolResources CodeInterpreterToolResources(IEnumera return new CodeInterpreterToolResources(fileIds?.ToList(), 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) + 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(); @@ -1167,54 +787,7 @@ public static AssistantModificationOptions AssistantModificationOptions(string n toolResources, responseFormat, nucleusSamplingFactor, - additionalBinaryDataProperties: null); - } - - public static AssistantDeletionResult AssistantDeletionResult(bool deleted = default, string assistantId = default, InternalDeleteAssistantResponseObject @object = default) - { - - return new AssistantDeletionResult(deleted, assistantId, @object, additionalBinaryDataProperties: null); - } - - public static SpeechGenerationOptions SpeechGenerationOptions(GeneratedSpeechFormat? responseFormat = default, InternalCreateSpeechRequestModel model = default, string input = default, GeneratedSpeechVoice voice = default, float? speedRatio = default) - { - - return new SpeechGenerationOptions( - responseFormat, - model, - input, - voice, - speedRatio, - additionalBinaryDataProperties: null); - } - - public static AudioTranscriptionOptions AudioTranscriptionOptions(string language = default, string prompt = default, AudioTranscriptionFormat? responseFormat = default, float? temperature = default, BinaryData @file = default, InternalCreateTranscriptionRequestModel model = default, IEnumerable internalTimestampGranularities = default) - { - internalTimestampGranularities ??= new ChangeTrackingList(); - - return new AudioTranscriptionOptions( - language, - prompt, - responseFormat, - temperature, - @file, - model, - internalTimestampGranularities?.ToList(), - additionalBinaryDataProperties: null); - } - - public static AudioTranscription AudioTranscription(string language = default, string text = default, IEnumerable words = default, IEnumerable segments = default, InternalCreateTranscriptionResponseVerboseJsonTask task = default, TimeSpan? duration = default) - { - words ??= new ChangeTrackingList(); - segments ??= new ChangeTrackingList(); - - return new AudioTranscription( - language, - text, - words?.ToList(), - segments?.ToList(), - task, - duration, + reasoningEffortLevel, additionalBinaryDataProperties: null); } @@ -1241,31 +814,6 @@ public static TranscribedSegment TranscribedSegment(int id = default, string tex additionalBinaryDataProperties: null); } - public static AudioTranslationOptions AudioTranslationOptions(string prompt = default, AudioTranslationFormat? responseFormat = default, float? temperature = default, BinaryData @file = default, InternalCreateTranslationRequestModel model = default) - { - - return new AudioTranslationOptions( - prompt, - responseFormat, - temperature, - @file, - model, - additionalBinaryDataProperties: null); - } - - public static AudioTranslation AudioTranslation(string language = default, string text = default, IEnumerable segments = default, InternalCreateTranslationResponseVerboseJsonTask task = default, TimeSpan? duration = default) - { - segments ??= new ChangeTrackingList(); - - return new AudioTranslation( - language, - text, - segments?.ToList(), - task, - duration, - additionalBinaryDataProperties: null); - } - public static AssistantResponseFormat AssistantResponseFormat(string @type = default) { @@ -1290,7 +838,7 @@ public static ChatMessageContent ChatMessageContent() return new ChatMessageContent(additionalBinaryDataProperties: null); } - public static ChatMessageContentPart ChatMessageContentPart(Chat.ChatMessageContentPartKind kind = default, string text = default, InternalChatCompletionRequestMessageContentPartImageImageUrl imageUri = default, string refusal = default, InternalChatCompletionRequestMessageContentPartAudioInputAudio inputAudio = default) + public static ChatMessageContentPart ChatMessageContentPart(ChatMessageContentPartKind kind = default, string text = default, InternalChatCompletionRequestMessageContentPartImageImageUrl imageUri = default, string refusal = default, InternalChatCompletionRequestMessageContentPartAudioInputAudio inputAudio = default) { return new ChatMessageContentPart( @@ -1314,28 +862,6 @@ public static StreamingChatFunctionCallUpdate StreamingChatFunctionCallUpdate(st return new StreamingChatFunctionCallUpdate(functionName, functionArgumentsUpdate, additionalBinaryDataProperties: null); } - public static StreamingChatToolCallUpdate StreamingChatToolCallUpdate(int index = default, InternalChatCompletionMessageToolCallChunkFunction function = default, Chat.ChatToolCallKind kind = default, string toolCallId = default) - { - - return new StreamingChatToolCallUpdate(index, function, kind, toolCallId, additionalBinaryDataProperties: null); - } - - public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate(string model = default, string systemFingerprint = default, InternalCreateChatCompletionStreamResponseObject @object = default, string completionId = default, InternalCreateChatCompletionStreamResponseServiceTier? serviceTier = default, IEnumerable choices = default, DateTimeOffset createdAt = default, ChatTokenUsage usage = default) - { - choices ??= new ChangeTrackingList(); - - return new StreamingChatCompletionUpdate( - model, - systemFingerprint, - @object, - completionId, - serviceTier, - choices?.ToList(), - createdAt, - usage, - additionalBinaryDataProperties: null); - } - public static RunStepUpdateCodeInterpreterOutput RunStepUpdateCodeInterpreterOutput(string @type = default) { diff --git a/src/Generated/OpenAIResponseClient.RestClient.cs b/src/Generated/OpenAIResponseClient.RestClient.cs new file mode 100644 index 000000000..fad18255a --- /dev/null +++ b/src/Generated/OpenAIResponseClient.RestClient.cs @@ -0,0 +1,107 @@ +// + +#nullable disable + +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class OpenAIResponseClient + { + private static PipelineMessageClassifier _pipelineMessageClassifier200; + + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); + + internal virtual PipelineMessage CreateCreateResponseRequest(BinaryContent content, string accept, 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); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", accept); + 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) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/responses/", false); + uri.AppendPath(responseId, true); + if (includables != null && !(includables is ChangeTrackingList changeTrackingList && changeTrackingList.IsUndefined)) + { + foreach (var @param in includables) + { + uri.AppendQuery("include[]", @param, true); + } + } + 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) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/responses/", false); + uri.AppendPath(responseId, true); + uri.AppendPath("/input_items", 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); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + 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 new file mode 100644 index 000000000..ff0f17fae --- /dev/null +++ b/src/Generated/OpenAIResponseClient.cs @@ -0,0 +1,26 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; + +namespace OpenAI.Responses +{ + public partial class OpenAIResponseClient + { + private readonly Uri _endpoint; + + protected OpenAIResponseClient() + { + } + + internal OpenAIResponseClient(ClientPipeline pipeline, Uri endpoint) + { + _endpoint = endpoint; + Pipeline = pipeline; + } + + public ClientPipeline Pipeline { get; } + } +} diff --git a/src/Generated/RealtimeConversationClient.cs b/src/Generated/RealtimeConversationClient.cs index 6f43538da..638a057da 100644 --- a/src/Generated/RealtimeConversationClient.cs +++ b/src/Generated/RealtimeConversationClient.cs @@ -3,7 +3,6 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; namespace OpenAI.RealtimeConversation @@ -11,19 +10,15 @@ namespace OpenAI.RealtimeConversation public partial class RealtimeConversationClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected RealtimeConversationClient() { } - internal RealtimeConversationClient(ClientPipeline pipeline, ApiKeyCredential keyCredential, Uri endpoint) + internal RealtimeConversationClient(ClientPipeline pipeline, Uri endpoint) { _endpoint = endpoint; Pipeline = pipeline; - _keyCredential = keyCredential; } public ClientPipeline Pipeline { get; } diff --git a/src/Generated/VectorStoreClient.RestClient.cs b/src/Generated/VectorStoreClient.RestClient.cs index 322a97d5f..1ff1b42cf 100644 --- a/src/Generated/VectorStoreClient.RestClient.cs +++ b/src/Generated/VectorStoreClient.RestClient.cs @@ -2,6 +2,7 @@ #nullable disable +using System.ClientModel; using System.ClientModel.Primitives; using OpenAI; @@ -13,7 +14,7 @@ public partial class VectorStoreClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal PipelineMessage CreateListVectorStoresRequest(int? limit, string order, string after, string before, RequestOptions options) + internal virtual PipelineMessage CreateListVectorStoresRequest(int? limit, string order, string after, string before, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -40,11 +41,83 @@ internal PipelineMessage CreateListVectorStoresRequest(int? limit, string order, } request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } - internal PipelineMessage CreateListVectorStoreFilesRequest(string vectorStoreId, int? limit, string order, string after, string before, string filter, RequestOptions options) + internal virtual PipelineMessage CreateCreateVectorStoreRequest(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); + 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 CreateGetVectorStoreRequest(string vectorStoreId, 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); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateModifyVectorStoreRequest(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); + 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 CreateDeleteVectorStoreRequest(string vectorStoreId, 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("/vector_stores/", false); + uri.AppendPath(vectorStoreId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateListVectorStoreFilesRequest(string vectorStoreId, int? limit, string order, string after, string before, string filter, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -77,11 +150,129 @@ internal PipelineMessage CreateListVectorStoreFilesRequest(string vectorStoreId, } request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateCreateVectorStoreFileRequest(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("/files", 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 CreateGetVectorStoreFileRequest(string vectorStoreId, 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("/vector_stores/", false); + uri.AppendPath(vectorStoreId, true); + uri.AppendPath("/files/", false); + uri.AppendPath(fileId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateDeleteVectorStoreFileRequest(string vectorStoreId, 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("/vector_stores/", false); + uri.AppendPath(vectorStoreId, true); + uri.AppendPath("/files/", false); + uri.AppendPath(fileId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); + message.Apply(options); + return message; + } + + 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("OpenAI-Beta", "assistants=v2"); + 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; + 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); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); + 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"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } - internal PipelineMessage CreateListFilesInVectorStoreBatchRequest(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options) + internal virtual PipelineMessage CreateListFilesInVectorStoreBatchRequest(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -116,6 +307,7 @@ internal PipelineMessage CreateListFilesInVectorStoreBatchRequest(string vectorS } request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); message.Apply(options); return message; } diff --git a/src/Generated/VectorStoreClient.cs b/src/Generated/VectorStoreClient.cs index 975fb140c..5c2b03fb6 100644 --- a/src/Generated/VectorStoreClient.cs +++ b/src/Generated/VectorStoreClient.cs @@ -13,9 +13,6 @@ namespace OpenAI.VectorStores public partial class VectorStoreClient { private readonly Uri _endpoint; - private const string AuthorizationHeader = "Authorization"; - private readonly ApiKeyCredential _keyCredential; - private const string AuthorizationApiKeyPrefix = "Bearer"; protected VectorStoreClient() { @@ -27,7 +24,7 @@ public virtual ClientResult CreateVectorStore(BinaryContent content, RequestOpti { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = this.CreateCreateVectorStoreRequest(content, options); + using PipelineMessage message = CreateCreateVectorStoreRequest(content, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } @@ -35,7 +32,7 @@ public virtual async Task CreateVectorStoreAsync(BinaryContent con { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = this.CreateCreateVectorStoreRequest(content, options); + using PipelineMessage message = CreateCreateVectorStoreRequest(content, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } } diff --git a/src/OpenAI.csproj b/src/OpenAI.csproj index b670b7905..d9d0b073b 100644 --- a/src/OpenAI.csproj +++ b/src/OpenAI.csproj @@ -9,7 +9,7 @@ Copyright (c) 2024 OpenAI (https://openai.com) 2.2.0 - beta.2 + beta.3 net8.0;net6.0;netstandard2.0 latest diff --git a/src/Custom/Chat/Streaming/InternalAsyncStreamingChatCompletionUpdateCollection.cs b/src/Utility/AsyncSseUpdateCollection.cs similarity index 55% rename from src/Custom/Chat/Streaming/InternalAsyncStreamingChatCompletionUpdateCollection.cs rename to src/Utility/AsyncSseUpdateCollection.cs index 847d8c89d..628331884 100644 --- a/src/Custom/Chat/Streaming/InternalAsyncStreamingChatCompletionUpdateCollection.cs +++ b/src/Utility/AsyncSseUpdateCollection.cs @@ -3,34 +3,62 @@ using System.ClientModel.Primitives; using System.Collections.Generic; using System.Net.ServerSentEvents; +using System.Runtime.CompilerServices; using System.Text.Json; using System.Threading; using System.Threading.Tasks; #nullable enable -namespace OpenAI.Chat; +namespace OpenAI; /// /// Implementation of collection abstraction over streaming chat updates. /// -internal class InternalAsyncStreamingChatCompletionUpdateCollection : AsyncCollectionResult +internal class AsyncSseUpdateCollection : AsyncCollectionResult { private readonly Func> _sendRequestAsync; + private readonly Func, IEnumerable> _eventDeserializerFunc; private readonly CancellationToken _cancellationToken; - public InternalAsyncStreamingChatCompletionUpdateCollection( + public AsyncSseUpdateCollection( Func> sendRequestAsync, + Func> jsonMultiDeserializerFunc, + CancellationToken cancellationToken) + : this( + sendRequestAsync, + DeserializeSseToMultipleViaJson(jsonMultiDeserializerFunc), + cancellationToken) + { + Argument.AssertNotNull(jsonMultiDeserializerFunc, nameof(jsonMultiDeserializerFunc)); + } + + public AsyncSseUpdateCollection( + Func> sendRequestAsync, + Func jsonSingleDeserializerFunc, + CancellationToken cancellationToken) + : this( + sendRequestAsync, + DeserializeSseToSingleViaJson(jsonSingleDeserializerFunc), + cancellationToken) + { + Argument.AssertNotNull(jsonSingleDeserializerFunc, nameof(jsonSingleDeserializerFunc)); + } + + public AsyncSseUpdateCollection( + Func> sendRequestAsync, + Func, IEnumerable> eventDeserializerFunc, CancellationToken cancellationToken) { Argument.AssertNotNull(sendRequestAsync, nameof(sendRequestAsync)); + Argument.AssertNotNull(eventDeserializerFunc, nameof(eventDeserializerFunc)); _sendRequestAsync = sendRequestAsync; + _eventDeserializerFunc = eventDeserializerFunc; _cancellationToken = cancellationToken; } public override ContinuationToken? GetContinuationToken(ClientResult page) - // Continuation is not supported for SSE streams. => null; @@ -41,16 +69,32 @@ public async override IAsyncEnumerable GetRawPagesAsync() yield return await _sendRequestAsync(); } - protected async override IAsyncEnumerable GetValuesFromPageAsync(ClientResult page) + protected async override IAsyncEnumerable GetValuesFromPageAsync(ClientResult page) { - await using IAsyncEnumerator enumerator = new AsyncStreamingChatUpdateEnumerator(page, _cancellationToken); + await using IAsyncEnumerator enumerator = new AsyncSseUpdateEnumerator(_eventDeserializerFunc, page, _cancellationToken); while (await enumerator.MoveNextAsync().ConfigureAwait(false)) { yield return enumerator.Current; } } - private sealed class AsyncStreamingChatUpdateEnumerator : IAsyncEnumerator + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static Func, IEnumerable> DeserializeSseToMultipleViaJson( + Func> jsonDeserializationFunc) + { + return (item) => + { + using JsonDocument document = JsonDocument.Parse(item.Data); + return jsonDeserializationFunc.Invoke(document.RootElement, ModelSerializationExtensions.WireOptions); + }; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static Func, IEnumerable> DeserializeSseToSingleViaJson( + Func jsonSingleDeserializationFunc) + => DeserializeSseToMultipleViaJson((e, o) => [jsonSingleDeserializationFunc.Invoke(e, o)]); + + private sealed class AsyncSseUpdateEnumerator : IAsyncEnumerator { private static ReadOnlySpan TerminalData => "[DONE]"u8; @@ -65,27 +109,31 @@ private sealed class AsyncStreamingChatUpdateEnumerator : IAsyncEnumerator>? _events; - private IEnumerator? _updates; + private IEnumerator? _updates; + private readonly Func, IEnumerable> _deserializerFunc; - private StreamingChatCompletionUpdate? _current; + private U? _current; private bool _started; - public AsyncStreamingChatUpdateEnumerator(ClientResult page, CancellationToken cancellationToken) + public AsyncSseUpdateEnumerator( + Func, IEnumerable> deserializerFunc, + ClientResult page, + CancellationToken cancellationToken) { Argument.AssertNotNull(page, nameof(page)); + _deserializerFunc = deserializerFunc; _response = page.GetRawResponse(); _cancellationToken = cancellationToken; } - StreamingChatCompletionUpdate IAsyncEnumerator.Current - => _current!; + U IAsyncEnumerator.Current => _current!; - async ValueTask IAsyncEnumerator.MoveNextAsync() + async ValueTask IAsyncEnumerator.MoveNextAsync() { if (_events is null && _started) { - throw new ObjectDisposedException(nameof(AsyncStreamingChatUpdateEnumerator)); + throw new ObjectDisposedException(nameof(AsyncSseUpdateEnumerator)); } _cancellationToken.ThrowIfCancellationRequested(); @@ -106,9 +154,9 @@ async ValueTask IAsyncEnumerator.MoveNextAs return false; } - using JsonDocument doc = JsonDocument.Parse(_events.Current.Data); - List updates = [StreamingChatCompletionUpdate.DeserializeStreamingChatCompletionUpdate(doc.RootElement, ModelSerializationExtensions.WireOptions)]; - _updates = updates.GetEnumerator(); + _updates = _deserializerFunc + .Invoke(_events.Current) + .GetEnumerator(); if (_updates.MoveNext()) { diff --git a/src/Utility/CustomSerializationHelpers.cs b/src/Utility/CustomSerializationHelpers.cs index bcf1ae805..ce7b1d7f0 100644 --- a/src/Utility/CustomSerializationHelpers.cs +++ b/src/Utility/CustomSerializationHelpers.cs @@ -150,4 +150,18 @@ internal static void WriteOptionalCollection(this Utf8JsonWriter writer, Read writer.WriteEndArray(); } } + + internal static void WriteFirstObject(this Utf8JsonWriter writer, ModelReaderWriterOptions options, params T[] values) + where T : class, IJsonModel + { + foreach (T value in values) + { + if (value is not null) + { + writer.WriteObjectValue(value, options); + break; + } + } + + } } \ No newline at end of file diff --git a/src/Utility/Generator/CodeGenClientAttribute.cs b/src/Utility/Generator/CodeGenClientAttribute.cs deleted file mode 100644 index e46edc05f..000000000 --- a/src/Utility/Generator/CodeGenClientAttribute.cs +++ /dev/null @@ -1,15 +0,0 @@ -#nullable enable - -using System; - -namespace OpenAI; - -[AttributeUsage(AttributeTargets.Class)] -internal sealed class CodeGenClientAttribute : CodeGenTypeAttribute -{ - public Type? ParentClient { get; set; } - - public CodeGenClientAttribute(string originalName) : base(originalName) - { - } -} \ No newline at end of file diff --git a/src/Utility/Generator/CodeGenMemberAttribute.cs b/src/Utility/Generator/CodeGenMemberAttribute.cs deleted file mode 100644 index 00bee60c4..000000000 --- a/src/Utility/Generator/CodeGenMemberAttribute.cs +++ /dev/null @@ -1,17 +0,0 @@ -#nullable enable - -using System; - -namespace OpenAI; - -[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] -internal sealed class CodeGenMemberAttribute : CodeGenTypeAttribute -{ - public CodeGenMemberAttribute() : base(null) - { - } - - public CodeGenMemberAttribute(string originalName) : base(originalName) - { - } -} \ No newline at end of file diff --git a/src/Utility/Generator/CodeGenModelAttribute.cs b/src/Utility/Generator/CodeGenModelAttribute.cs deleted file mode 100644 index a015f0b6a..000000000 --- a/src/Utility/Generator/CodeGenModelAttribute.cs +++ /dev/null @@ -1,27 +0,0 @@ -#nullable enable - -using System; - -namespace OpenAI; - -[AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Struct)] -internal sealed class CodeGenModelAttribute : CodeGenTypeAttribute -{ - /// - /// Gets or sets a coma separated list of additional model usage modes. Allowed values: model, error, intput, output. - /// - public string[]? Usage { get; set; } - - /// - /// Gets or sets a coma separated list of additional model serialization formats. - /// - public string[]? Formats { get; set; } - - public CodeGenModelAttribute() : base(null) - { - } - - public CodeGenModelAttribute(string originalName) : base(originalName) - { - } -} \ No newline at end of file diff --git a/src/Utility/Generator/CodeGenSerializationAttribute.cs b/src/Utility/Generator/CodeGenSerializationAttribute.cs deleted file mode 100644 index a9693b571..000000000 --- a/src/Utility/Generator/CodeGenSerializationAttribute.cs +++ /dev/null @@ -1,53 +0,0 @@ -#nullable enable - -using System; - -namespace OpenAI; - -[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = true, Inherited = true)] -internal sealed class CodeGenSerializationAttribute : Attribute -{ - /// - /// Gets or sets the property name which these hooks should apply to - /// - public string? PropertyName { get; set; } - /// - /// Gets or sets the serialization path of the property in the JSON - /// - public string[]? SerializationPath { get; } - /// - /// Gets or sets the method name to use when serializing the property value (property name excluded) - /// The signature of the serialization hook method must be or compatible with when invoking: - /// private void SerializeHook(Utf8JsonWriter writer); - /// - public string? SerializationValueHook { get; set; } - /// - /// Gets or sets the method name to use when deserializing the property value from the JSON - /// private static void DeserializationHook(JsonProperty property, ref TypeOfTheProperty propertyValue); // if the property is required - /// private static void DeserializationHook(JsonProperty property, ref Optional<TypeOfTheProperty> propertyValue); // if the property is optional - /// - public string? DeserializationValueHook { get; set; } - /// - /// Gets or sets the method name to use when serializing the property value (property name excluded) - /// The signature of the serialization hook method must be or compatible with when invoking: - /// private void SerializeHook(StringBuilder builder); - /// - public string? BicepSerializationValueHook { get; set; } - - public CodeGenSerializationAttribute(string propertyName) - { - PropertyName = propertyName; - } - - public CodeGenSerializationAttribute(string propertyName, string serializationName) - { - PropertyName = propertyName; - SerializationPath = new[] { serializationName }; - } - - public CodeGenSerializationAttribute(string propertyName, string[] serializationPath) - { - PropertyName = propertyName; - SerializationPath = serializationPath; - } -} \ No newline at end of file diff --git a/src/Utility/Generator/CodeGenSuppressAttribute.cs b/src/Utility/Generator/CodeGenSuppressAttribute.cs deleted file mode 100644 index 8852cbc89..000000000 --- a/src/Utility/Generator/CodeGenSuppressAttribute.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; - -namespace OpenAI; - -[AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Struct, AllowMultiple = true)] -internal sealed class CodeGenSuppressAttribute : Attribute -{ - public string Member { get; } - public Type[] Parameters { get; } - - public CodeGenSuppressAttribute(string member, params Type[] parameters) - { - Member = member; - Parameters = parameters; - } -} \ No newline at end of file diff --git a/src/Utility/Generator/CodeGenTypeAttribute.cs b/src/Utility/Generator/CodeGenTypeAttribute.cs deleted file mode 100644 index 65aee7afc..000000000 --- a/src/Utility/Generator/CodeGenTypeAttribute.cs +++ /dev/null @@ -1,16 +0,0 @@ -#nullable enable - -using System; - -namespace OpenAI; - -[AttributeUsage(AttributeTargets.Class)] -internal class CodeGenTypeAttribute : Attribute -{ - public string? OriginalName { get; } - - public CodeGenTypeAttribute(string? originalName) - { - OriginalName = originalName; - } -} \ No newline at end of file diff --git a/src/Utility/MultipartFormDataBinaryContent.cs b/src/Utility/MultipartFormDataBinaryContent.cs deleted file mode 100644 index a1d04afdc..000000000 --- a/src/Utility/MultipartFormDataBinaryContent.cs +++ /dev/null @@ -1,170 +0,0 @@ -using System; -using System.ClientModel; -using System.Diagnostics; -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 class MultipartFormDataBinaryContent : BinaryContent -{ - private readonly MultipartFormDataContent _multipartContent; - - private const int BoundaryLength = 70; - private const string BoundaryValues = "0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"; - - public MultipartFormDataBinaryContent() - { - _multipartContent = new MultipartFormDataContent(CreateBoundary()); - } - - public string ContentType - { - get - { - Debug.Assert(_multipartContent.Headers.ContentType is not null); - - return _multipartContent.Headers.ContentType!.ToString(); - } - } - - internal HttpContent HttpContent => _multipartContent; - - public void Add(Stream stream, string name, string fileName = default, string contentType = null) - { - Argument.AssertNotNull(stream, nameof(stream)); - - StreamContent content = new(stream); - if (contentType is not null) - { - content.Headers.ContentType = MediaTypeHeaderValue.Parse(contentType); - } - Add(content, name, fileName); - } - - public void Add(string content, string name, string fileName = default) - { - Add(new StringContent(content), name, fileName); - } - - public void Add(int content, string name, string fileName = default) - { - // https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings#GFormatString - string value = content.ToString("G", CultureInfo.InvariantCulture); - Add(new StringContent(value), name, fileName); - } - - public void Add(double content, string name, string fileName = default) - { - // https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings#GFormatString - string value = content.ToString("G", CultureInfo.InvariantCulture); - Add(new StringContent(value), name, fileName); - } - - public void Add(byte[] content, string name, string fileName = default) - { - Add(new ByteArrayContent(content), name, fileName); - } - - public void Add(BinaryData content, string name, string fileName = default) - { - Add(new ByteArrayContent(content.ToArray()), name, fileName); - } - - private void Add(HttpContent content, string name, string fileName) - { - Argument.AssertNotNull(content, nameof(content)); - Argument.AssertNotNull(name, nameof(name)); - - if (fileName is not null) - { - _multipartContent.Add(content, name, fileName); - } - else - { - _multipartContent.Add(content, name); - } - } - -#if NET6_0_OR_GREATER - private static string CreateBoundary() => - string.Create(BoundaryLength, 0, (chars, _) => - { - Span random = stackalloc byte[BoundaryLength]; - Random.Shared.NextBytes(random); - - for (int i = 0; i < chars.Length; i++) - { - chars[i] = BoundaryValues[random[i] % BoundaryValues.Length]; - } - }); -#else - private static readonly Random _random = new(); - - private static string CreateBoundary() - { - Span chars = stackalloc char[BoundaryLength]; - - byte[] random = new byte[BoundaryLength]; - lock (_random) - { - _random.NextBytes(random); - } - - // Instead of `% BoundaryValues.Length` as is used above, use a mask to achieve the same result. - // `% BoundaryValues.Length` is optimized to the equivalent on .NET Core but not on .NET Framework. - const int Mask = 255 >> 2; - Debug.Assert(BoundaryValues.Length - 1 == Mask); - - for (int i = 0; i < chars.Length; i++) - { - chars[i] = BoundaryValues[random[i] & Mask]; - } - - return chars.ToString(); - } -#endif - - public override bool TryComputeLength(out long length) - { - // We can't call the protected method on HttpContent - - 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 NET5_0_OR_GREATER - _multipartContent.CopyTo(stream, default, cancellationToken); -#else - // TODO: polyfill sync-over-async for netstandard2.0 for Azure clients. - // Tracked by https://github.com/Azure/azure-sdk-for-net/issues/42674 - _multipartContent.CopyToAsync(stream).GetAwaiter().GetResult(); -#endif - } - - public override async Task WriteToAsync(Stream stream, CancellationToken cancellationToken = default) - { -#if NET5_0_OR_GREATER - await _multipartContent.CopyToAsync(stream, cancellationToken).ConfigureAwait(false); -#else - await _multipartContent.CopyToAsync(stream).ConfigureAwait(false); -#endif - } - - public override void Dispose() - { - _multipartContent.Dispose(); - } -} diff --git a/src/Custom/Chat/Streaming/InternalStreamingChatCompletionUpdateCollection.cs b/src/Utility/SseUpdateCollection.cs similarity index 57% rename from src/Custom/Chat/Streaming/InternalStreamingChatCompletionUpdateCollection.cs rename to src/Utility/SseUpdateCollection.cs index dff069d7a..ccc140aa7 100644 --- a/src/Custom/Chat/Streaming/InternalStreamingChatCompletionUpdateCollection.cs +++ b/src/Utility/SseUpdateCollection.cs @@ -9,23 +9,52 @@ #nullable enable -namespace OpenAI.Chat; +namespace OpenAI; /// -/// Implementation of collection abstraction over streaming chat updates. +/// Implementation of collection abstraction over streaming updates. /// -internal class InternalStreamingChatCompletionUpdateCollection : CollectionResult +internal class SseUpdateCollection : CollectionResult { - private readonly Func _sendRequest; + private readonly Func _sendRequestFunc; + private readonly Func, IEnumerable> _eventDeserializerFunc; private readonly CancellationToken _cancellationToken; - public InternalStreamingChatCompletionUpdateCollection( - Func sendRequest, + public SseUpdateCollection( + Func sendRequestFunc, + Func> jsonMultiDeserializerFunc, + CancellationToken cancellationToken) + : this( + sendRequestFunc, + AsyncSseUpdateCollection.DeserializeSseToMultipleViaJson(jsonMultiDeserializerFunc), + cancellationToken) + + { + Argument.AssertNotNull(jsonMultiDeserializerFunc, nameof(jsonMultiDeserializerFunc)); + } + + public SseUpdateCollection( + Func sendRequestFunc, + Func jsonSingleDeserializerFunc, + CancellationToken cancellationToken) + : this( + sendRequestFunc, + AsyncSseUpdateCollection.DeserializeSseToSingleViaJson(jsonSingleDeserializerFunc), + cancellationToken) + { + Argument.AssertNotNull(jsonSingleDeserializerFunc, nameof(jsonSingleDeserializerFunc)); + } + + public SseUpdateCollection( + Func sendRequestFunc, + Func, IEnumerable> eventDeserializerFunc, CancellationToken cancellationToken) { - Argument.AssertNotNull(sendRequest, nameof(sendRequest)); + Argument.AssertNotNull(sendRequestFunc, nameof(sendRequestFunc)); + Argument.AssertNotNull(eventDeserializerFunc, nameof(eventDeserializerFunc)); - _sendRequest = sendRequest; + _sendRequestFunc = sendRequestFunc; + _eventDeserializerFunc = eventDeserializerFunc; _cancellationToken = cancellationToken; } @@ -37,19 +66,19 @@ public override IEnumerable GetRawPages() { // We don't currently support resuming a dropped connection from the // last received event, so the response collection has a single element. - yield return _sendRequest(); + yield return _sendRequestFunc(); } - protected override IEnumerable GetValuesFromPage(ClientResult page) + protected override IEnumerable GetValuesFromPage(ClientResult page) { - using IEnumerator enumerator = new StreamingChatUpdateEnumerator(page, _cancellationToken); + using IEnumerator enumerator = new SseUpdateEnumerator(_eventDeserializerFunc, page, _cancellationToken); while (enumerator.MoveNext()) { yield return enumerator.Current; } } - private sealed class StreamingChatUpdateEnumerator : IEnumerator + private sealed class SseUpdateEnumerator : IEnumerator { private static ReadOnlySpan TerminalData => "[DONE]"u8; @@ -64,21 +93,26 @@ private sealed class StreamingChatUpdateEnumerator : IEnumerator>? _events; - private IEnumerator? _updates; + private IEnumerator? _updates; + private readonly Func, IEnumerable> _eventDeserializerFunc; - private StreamingChatCompletionUpdate? _current; + private U? _current; private bool _started; - public StreamingChatUpdateEnumerator(ClientResult page, CancellationToken cancellationToken) + public SseUpdateEnumerator( + Func, IEnumerable> eventDeserializerFunc, + ClientResult page, + CancellationToken cancellationToken) { + Argument.AssertNotNull(eventDeserializerFunc, nameof(eventDeserializerFunc)); Argument.AssertNotNull(page, nameof(page)); + _eventDeserializerFunc = eventDeserializerFunc; _response = page.GetRawResponse(); _cancellationToken = cancellationToken; } - StreamingChatCompletionUpdate IEnumerator.Current - => _current!; + U IEnumerator.Current => _current!; object IEnumerator.Current => _current!; @@ -86,7 +120,7 @@ public bool MoveNext() { if (_events is null && _started) { - throw new ObjectDisposedException(nameof(StreamingChatUpdateEnumerator)); + throw new ObjectDisposedException(typeof(U).Name); } _cancellationToken.ThrowIfCancellationRequested(); @@ -107,9 +141,7 @@ public bool MoveNext() return false; } - using JsonDocument doc = JsonDocument.Parse(_events.Current.Data); - List updates = [StreamingChatCompletionUpdate.DeserializeStreamingChatCompletionUpdate(doc.RootElement, ModelSerializationExtensions.WireOptions)]; - _updates = updates.GetEnumerator(); + _updates = _eventDeserializerFunc.Invoke(_events.Current).GetEnumerator(); if (_updates.MoveNext()) { diff --git a/tests/Assets/images_screenshot_with_save_1024_768.png b/tests/Assets/images_screenshot_with_save_1024_768.png new file mode 100644 index 0000000000000000000000000000000000000000..5bf9a1e85d3b32055a86894768e921215b946f6c GIT binary patch literal 908471 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�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

Gle8QV_Y*bJ?(dsn;%Ho_wEg>} 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

nERRP|#jY)4&&DPvJ%M%l<&rGv6HO2DeBx^I% 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

+gAzKz(E1}t44jOTITbG03aIx1d~8KXUSts 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

Gj@>sn~hi8(e-4YeHJ5z zJMasu0Xo3pa4o>hIV%|NiGsGe_sm#mBahi)p;WUFfru?zhR-!{J2SSAD5^=geFYLGt1+z0R-M6FZOYcF zZ)kgMTLQ8%NcvEt+H2U~!2^0S1RSrLOH9#;5@=59HUJyls;X(CTs=wc+m&4?|J*1< zTZB-PeYSj3dS~*F(QrM9QQ-T68ckazuqz*uX8r^Fz&Spny%4d(TF2_=@spG!P5R*n z(Vqk~M$-#7zUm&^mo>lfic%D@*p>;Q5mw}NLf5`w0D}Jvb;k*;}ug8s3dZO z;~FO9DzE1Zn#`eOIHMCS40vf7cq;TGS5M^bDDtIg?gp7+U<|xf;+vp$v0voxu*bub zvS0S`egzKz&0YI8JIx?sPMiHi8vqYA0V}(40JAkwz9R@Vwl0Rw?nLhJWO}y7ZZUo? zxY=UNu!uB!^-C)a_(y3!)~EkJ!S7zP11ODg#nQV?1+EUNV8o1e=R)$JyGeDTI>X7_ zn-A80a1k-wiQuQHK!Q3mIBcOHq4dMw5FmgB`^mlIVxshRN5xQ?a1)E(!txbS&$H7`{lYN=&N=wyb!WUXhNr3CU_&C( zRMsa=0VM`tXz!+b6R%2EEE1)h;nby_AyR4T$d zT zh07Qti?nTG0^3tZo8#a2eTowasmEuv@y)Dj_(XmCpfbWvDgJV#@ZwvHhRE~;?L$lW zs`==L;APZsg0#O0B&Zy8_Eu;QkdGJ0sU~xJ3@4rbpxososUkoGCRew^0|jGzAB5fL z(+&M#^C+i60+0bOwG<%AXb=(GL!L3(<4W9fY@H1d>EdqFiAhK5#)3Z0RYt z-C)x9XB5xrNv4<(;)*>6>*m*7)B4k80esXIIMZu8lhXJMOE~xj*<@Dnk&hL-sBIr7 zayrI+J0PBPNXN*fwL+tc(7Ls6XAcJPgW+U<-}p?2>FY0>$C|Am+fhk=T!ZG_s{L$6 zD&cVc!Bky%$>Tv9&ur!$LN4lU%w(>eY7P>6g*5eM!maI0r1)lCRoaed5fyWLu$LSq zZ2&WWchGvmRW|1BU?Mv&TdaA@M~JFEoI`(P5>sgpgrC0g)Z5R?pOFrm6jnBW@Y|1> zb6!TX*bg2wErvf!RP7k9IzTZLPx&3mEw@a4cxDqMxeS?-i4EM&YCK~asM*G=l753X z$6ftL=B*8ycnkw%kzl6E8wFfLe}$L*Q#s~NZC?#SbC!$Vit^NgUS|Y$R zIks5NTB-9u{&kc#n@6Im#ixi9hwNi|&3$}T2A^}{-uT1qiQ6>xV(gX0Q?90VDA=7N!v2fgfY@!YqCYwpGA9jpT_z@74k8<} zVqltXaKC-uVN-#k#kjKx(Oo)9(eRAs9p=N+-Ws~TW(u(N;F_h{`uHv|L3NJ@ zxk5P^a+$KmADvpKernO4FmM<(FlNHw2ghb|zq2MacrlWE8w*gnv&kv^Y7j-kXdKI9 zbvMF06@kEZJWhwXj$c%{w71cqhF%iCJ_%vR?6~UQ9~;Ldoh4QqFOkEUlHo;u)y$e+ z0y&$;V#D#}D)!sA^q?zkiuu57H#A)_uyBxknCmqMTvHZM9_I&w0Lp1)kE*fbR3iHB zY*}c8(+*qvq9@3eQ30WabM=gdLv|LgdP=su7sr^;{!JIu<%+wER5LL}8p~WI@fBAp zO1t4MsNK1hU(tWFL~e&DGkwYa#kOD?nrZu5 z^l4Y&zq+{V;$vHHqe^2V!}hdRf0G~2{*FV#RxcJ-k3Qi#$Z@}nA?3nI!Cb{&bA`$Md%m~O9FOwZshN}Xxjl4$3hha0UFOw$Z6 z^v%cGSPMRohzT%Ret!z{N~6#Oaaz2ID1r6YXmvL$f49^-LmOP)r_p(n{rEG*I3)VL zhQEogf4Wk5IeqK#_%;-nxYV@5SJZKqKfONed00@~`>I;L2dd|5Kj`!(>hj_II4@&< zBG=+`pIw)3kA!(CzrW@|~yd?y`)x;q=1f+E-WQ^EKQ zxuixau`fK~2?);mLh&k2xEsDwmC`Y)^d?u#&sN+cqE={8kD-dk1c!K!3n6vy@t?+* z_Gxi%42mqY0jh$teOoLQ*T9fm6FP=LYRdBK{F3aae%xug^Kj@)@6lqiIcPdJ1K`pZrdlK0<(CuG#^rv*75Jp>x- z#hzNxlCuL1;NXF^`bHQ|(?#ccD^XH7(f76ZQEV?I|MX*4tUcyQ?>OXTy=^n`veGyC z2YJ1Hbg@o?Q7;DS^vkA>3qh-Y!#~El5a|pdme^yNI@-m?=fuy`TW9Vmo}b{z6h;J# zhdIc^2Ft*71t@?>*5CRtP3MA0p{^fd`KfrheLOPm@C>Mild$|kBD+Ug@eO^!8A#6} zy75ay@B@WmW94ev=n5`k0SB+As-TJK=-S~uYq{PYlUz)r*QE_a09CPc-@pp zEaUDq(hKiXVDKYEDNe*zXhf<`VY} z3UKdVv5J*zo{ii*onwE6azZ(-n|&bR%~nK=}Tv`z))A9ljLPoImh% z0SC{fz#G}h1A+9BP=08tI&blJfg8VztnR!iBLBnO^1qkubzfmt?T5A%V`D5FF3Nd* z>MI2zv`=3lf6Why+jX`)EFL3D(=|31=uQM59vX+ zd8ven8t)aJ3wy7nG1fHBEk{XJ4!!JJv-?WHbw6yq09=_3AihP~w?f$uOF(Bw?s&EfbVQ^JF# zzgq}HlOd95aB>O(!^iCh%7fe0 zy>mnN;HrlIElr{9yaL4pr$E}PSwY6qywKsB$ z-1|F@YMBU#CXREms`^v|hht%R5PUIPm;2XIyg8^T0 z`F>MK6%9oNO#wsnAo6~bK++V+Mg=}R9$ZsQ1PzWXdZ0LF$maP#w?3Wn1&)JjSj7WH zvzOP?#e>dNDO%1Vt@u+5Ao1XA1gA!iQHeDrPYeDO2YwYN@8klsZ&9|KJV`jROiX`c zlo-!F1^)P*y?XVQfET~9{UU%bZZszG_zGth{)+YKOJ6ZoUn`90JavK(=ts8*h6P67 zpAHsefz(QYju)azn;5iwWi3`?%F#34$3GfA0-`J?I*#SXu)`J7_NnA^3vGRwhZ?&F zW>Z!-WG?TP6n@fi%nPfP1e50bhWEC!^AaxWmtfvk>3z@Ppx)dU=V83j;?;Ts1V7bC z52QR(aKPLzYvYdo6GXKvYQe%%=-UgfFW_$d2q~UlF%lKk?ms)W0U3H zG#sMF8yXjIh}pKH7FYscx=&^YDm2&vBG{A4|6I?X$tRGw^FBoBTyTvLOH%9i&F(!#BA#)ezZK0%pxk`J#Z z%>1OcX$uXvL=&a9>+#|y7d5L8H<0Ns$i~eGf6_dByvqS6{xHeEzn75YM$dInDLV8V zxX5!1KQhSxnrHa$)ml_XgD-WBdq#iQV?%(73)#p%5-&Tm!3m5)m;-X>252wgm z&(jQGb>ISFmGLKRb{a{3se`k=5orn#EgVX_dyDU|3#JNeN$5n1RLzl)UGd-JTECOD zY)hoZn&`sb;^p^=trm;f#JvtxVsqxv_o>o*QJK_WM8pqK-8r`Z8gPAVW6P%}f@1_v zqbBoAYW}P|x@^tAP()u*%RFE3=c|DqiQ9#e2d7I#AjBt<$iWpsrW4=Ft}qU=<47$0 ztq#b!C}XjIx0AYtN#R>$7I0`yaOexY&ikR=5=5@Mj4Bg7ScV#bcf=5Cn=D0v9@SebjjttAChc{ zraSHN)B{#$e3z`OAmyP9f3j}h4CruW)Ssi(9#s}@NcKbP6RN#eNZ(JfZ=Twt#ctDV z3Kl2ME&9E_#M#YA4*qTclqmGZC7ATvr4h@^E!S*J|H%0yogARCO|`lsa8EhZ@(^?K z%OGSQ9YTKkaeF5y1cMIE%ey@(g{!Y5RN-E$X<>b#{A)itqK(no>8trU5VQmj6@INk z)eSgvp59$IkGE<2*>e(hXP}R$>VnAIAhQVi=CqakSc$dj?Zf&QY=v?)Fd$BTQuH%L z)fr6m40~GvtAmNm=_>-cN%@46cNMTV#5O`>Ha>!;NZ^@l4qtT-jewY2m@(p<)_^FD zL@+MO=~Lq5z3576ReJT_7tY@!sU1w-M>dQZe^eXFE#4Y3sE#2j$pGCnY<*4?EiIFr z7>*C^Vle>UZt!%t=07sIIdXX|H^K4EtHinaJM|ypDFtzn0;S9(5T{Q3s}FKNIP`r> zXo@>it<(5DGqrRwcUGmQd(5gXk}b(0A6vpL6NndxxdJF?8t-X(%bIL^xM%5jNUxop zJ=t4&)&J&7c5}5yV1uAjjbxWwbyrfo`G&g7vqQPYQ9o&;)E<4y;i)J4Jk4)8TkqM6|APpu@tgy+9gU4WHX zj2Ta(!h6Ze0k{C8r{sAFwfTmy`obpQ&L7;ce$M*B<>tj!$DEnm?S7(jY;PGq+j`I| zbXryaMnq8=?2NH+QcBZt!VkQcWCf$wc z3XR*>bjzpJmmGZFis2vi7aR`--ac&Km%FN>TK2)&Rv_9}PfQV48%tx)*I^4#-*{rg zd&{L{MK)x>RiU$HenKUBM|F(XOeOl8OKg-vM2g^Bry;%_EN?A_b@KZ}kxWpn+!_6N zKrTO=$X*=7cNmKN)A5^^=g|%FvEowZhuo@NW}J5l<_4rS*sm_>LvpT=xf@dn8Bc)O7S`ppYgmeD%tZc~K^ ztBSzeE55Tp)NAJVwvj;-;DADr^*C0gzC=zNYA;N*yU(!zhRio_5RB&NDctfq$CLkgU*SKS6oAA6t7me zAqo;*<-O)(Z#7NVb!GsQj2t}GluDok?7Kg6lY7xp2@ENIH;OGwY(Kb}E0X zSIH@V1ipzYHwR{W?L3_FYzu37ffss(R~1hTP_uuDA>_%fXmuSa^7^~pR{I5m25|3( zY71i<0>03Tn2kR0&+;`)`7ex#B&OrMPvB`q&17Nj=hKVI<;zOUDAkIN0rp2NtiN5N zgHC8$%W0{`Mq$&(azG^u4ZnS!ThO51Ws<-08T2?>wdzrT-}?&b7$+Kv z`ye&D%x^9k6x=a#TUgt};Ld`u-rQu0tsCqs1PX40+SHuge+yX^5Pn{$` zNZHjLAq5(rGa*+bNoSJ%VpfU$5yGmb+Jn6ISA6YWeD&6W_afDryyZrwz}To^+Q5#< z`NpW3;OMDITn5Vyun_2*CcaQ3R@Ud{vzYdvUD>{LDvQ~$w_Lt?qI(XpM zXP%g|nA6l(lgD3VI*uhf3KyOj;s4X<(_;>isi}SybYp>D_W_0CQSDJK%?>ARF1~0x zCu{u3Q_C2epb_uyT+s&wQffMh4clt(k$7L|gPMh&2E!xDVN)jgxigTDG3!=wHkfZ( z_QKlzy!vVA(_k9p7~q7!@5;>I7&UmlIcN&gH%|J%1$-wP?qH>IIa{dQGhxkfi0;Gf z=+BVo`^rS4gwgjShs^Mb#Q^!zR5&ugD*8nS(~opJNz)B=0PwO-YL!v#q1-mtHQczG zf0|S&mxMI1mbNT$(qaGI4f$dNF;iNh9HirbnOxhG%ERn35W@Y&avwa%^dC!@HsG7q z63!mMOlt#88ye00@R}GX{gJ`Rc{0}#IxIs57*y&IrYAvmdnrdJ;PPDKZJ?j5%>cmL zmZ5d{?%pV%8Xv`xH)I$2p94M#)cPfSF}dh0NA5Qhcv@Py*)CRd8}h4Ous7GNz#Z5e zH$ZX4HF%~);mK%dOw=2!xMA^bR_2H~lW-Y4FQNIw1M5UvZ!ZfnEf_H)@exMQkIsfH zN@!LEA~XkhurGGnCtwm>-g_+FO@4I8d&wE*k>CDEz@7Jr>ssP#uPa5r?MkWZ8vP^6 zxPE(JyLwC$I(Y#Uc_>%%YTiw4=$UPBG0SOCC931f4|7+Z;#L>`pp+ix(|_yy4}<8I z2Fo7}N~vZc`8OZ_V6M_|@Y1jGg!NkIgw9eSRjH(VeWbU2V#H6vEBIBMIF;p+x$cYN zXo4w$O_6^(_xX~MYU;gKOL`DzRSxlE)hebRx^L=?4A=0o#wA9*QZqYLyK+>#wxR}k zaow|1MAW+wTs40<3W>jYsY5o2IydnOp7#2UYdEp1{xJBk25L*!%GP!CJB9KP1s5AJr<>DZWMrM}W( z4eq*WL7ktE8L-G+L-Rr}$y2udECVl?PHzlSTDVLl!F<@-RDiPHeur%+n0v4eSTTZS zJMge?Nl!gE+3;>o;lqP_zs|PfUa#cJgOQGM+dScJcr%ZcE8JCQ(K-!xd65`fG~VW( z+AyMoNx^MGB(MHnZ41ED0GBpDY($zTv@Q~InLsk z-B(Ooy5OF8yvMZQNlU!lY#`zw{J#kf!x(9Sd(yx#?}95Q9cmE2fR(sk74)t{A3Nv= zmTuNRe#Z`(it@Y0%a3g{k8RTIFk9C%0{%n~2%;=PAjY@#hAQ5-X zE|Gm_AOHO%z44y2F5o?s1X(6frxJ8FYZPs%>OWK(WKvnky>OOlPLNQ`aZm(r9dhLeG@D%L(=PPE@gQKb|IF!d3?GPkUIs4(yF*LvRJ#;uP3 zetWD~{Q|FNOw_v}wg5AwcOsc!v)~I_99#eCm)BY6N3qk+e!oSB^6A6d{{%c-bZqy9 zs{r1BZO=J9#(&N?RM=^ZalFm3*Jmi~20=c}DR9YZR+EQLd|2Yee?H#2-|sIT>mV2% zAfqIg#ZjHo>npBq$PE%C>fOb^e=L7ZfIY1q-q;ppO-mCHI(J{6yfVo*g@PYIS$K_9 zqGLtm6{w1~M#qU#%P!#?Oyb{_!v=k#vW@H)O$zMc>@GnOTb8}Tf}B$VH9zz1qYdgx zRDZomSq!&bFsXBN@;`Pv_Z7;4%8<}H&ruo1QP#K7Pe~)!L*wBbqo*0!Y;3&k*fmOw z!YbjJ(p@jbbY>|Forr7bDTWxYQz}9j&K@dN=6o7g>)Eg#`E5H&U-Uc9N7`g__B2qc z?UfroVC$$^1I*Z@mJF9B_p z_lh?@2QTgdt(Ann@C zV4D_J`sB;>>zg=uF}V>PxAH5abM8@W0167^T#fHZMS4toYX)jVd0&5P{q#@P)rC<& z&CJC*16JrH*25g_ax$#b>o1bP(7qui_vIf`)=~O9#q|N1?SB6y_(dxfrXVkhOTk}U zZkU?88r0oH$K^)t&EH@1weMRnMQ=GJu~Ti)uEUx!amRzVdy3p+O>6+Ds*`2NggMRy zLu=*6jEX3q4v20KoY*Bl8WJ$Yhtx7{a%=xRE7l@_FvnDPPdbW6A`XSG{j6bS};d2c+6DZ@*(Tdhb#;c*+=LV(GAibS1x&-8__@ zz21K;(|#3EN-krk(iRxL6-MuJLp4bNEI0Vd+t&`+KWQN208%>Y5~MtF>PVA-Wt8)e zqbG&6+wEd~P$>wa#55XQe#NLK29s7Y8u_8wmMA*?>E7ei@Fyxm4di-%=nAJKE5H5B zGWw3cf#OA@q%aj}-o3fb*H;9G`;6cTUxv_mvH0MgnR#WJjRLEd9iBPqf$BQ)nxoxm zBK}Wg|IF4_skAXUvSrw8v|9hP>?aBT#++T0ch&t=xXQ(!P?Fs1!(w+&tdQ1L*x|5) zgQf>mXOE~Y9c-J00I61$(JU34RNXc;W=%(66A$3Y+?Cu*n;+C2X;U`d3 zdIRebfCox7o<^;0C5| z1DSwxgOJMu$3KY<=UFOa$Ph2%fQ46^E!552L-p}I_)Rks*9%=%FERUnSq{~tUygH; zWoVQ>;712G7>rB6l;d##+-+I3YpUE6NOmzPxj6+~UO60wuLhtmhMr;>P)l-`o#q(Z z;yd)nnRx^1*rF-Sz123w#+Nyrx1)tcEsoL8QEM*reMmo|tZV|dky{Jx{P|$go80yL zA?q~Z$Cv+oYh(OcP5)eblfC{7!rE9<``fKQuLB`^M~gSdLjMKS@>q`%Za6=?zpV8L z?)L8N8{zmsC&)3ldhIO8H=~l_;u0)6+4j{yJ7f zL7A1k><$|pu23t^ynJ+lxT;&1g84dE(;B4Nx^PWX52*~Dx1D@K3{iZ&E0?<~7vC)1 zl_t>h_? zkm16XyrUD~e)ietmTJM^TP@tslQWXfvJV^z-yPH6r7xU&JhrvkkeYL|bz3`p8`5r< zZHr2IRE&B#{1l5SDrbGzF-oVEDkt{-0%0032FHfPlWwE+w7SQ!;OI(OKx$1 zb*94h!_-_g5@sI`YxCJtT1jqdqp;W+>9Qgchy)kWmpID349Kisr0!M9cdY6?=I&XM zNCRV>y1V(y7hI7~P#oAl2>!)H$70^b1NDnq?mafbl|w-O+oYpxmf*h-xSvI$f|n8k zyHvU<`bD?d>Zl=g3>-x|t7eG83s7&JUTcheb__eXlZ3*tP7qU;+0XH3B)HtJ??gj~~ zL}-O(#>v68tit*IvLpG1o4Em@&NP#}hqA4k#EqLoYtY7>14!yxJ*uZiH&L>SA_0jX z;*G|Z4LuS^dq}OUC*&T~fUiOa+p@?T19$R)=FH#m@|YOCFSQ8_B~pRs;tih{*T;d^ zRM3?#i`7-E`3Lw%wOWo@A46}n)v|2gWqvKdS(Z#b)~X7QMIZ}h)t|;=yD@{Og~K5G zKmA51U-!Tz`212f~-Mo?oNqMcMn{)&G zx&Ej?B1oqli)h6i(hxo>YbH{EOkYE>ok+fp%OEH zSN%sk-ex*$X8s+~gOC5|)o*EIn1CbA?I_z$aK#!d=LcH$UoLby#(BJC5EDncOE=c? z(8_By6TQ~>vs-$5paaD55tZm;Ty1r<*766^&H$?;f$*E*jM(6ntGaP2+q1(%q3YcT z&S#)OQ=~mVJ*b%o0c2XG@ys3drWY1{b;i>$7CcS1L&FTBBCQ~vF}i36r}J8SEj_q) zSU8{J*geHZ1WwHc6<4rNdqPSU;pf@!!00v{t|+&51F8_^ zBDtRTD=w;QE~eH!RGTj~(=NGZpAR^h;|4K}c=he(mpnf9h79-k$0odyXMq(gB=k3C zjU6Shh71ej1`loPg!aD)%;Q^Vy2xmm-uFiL4=gkVu(yKAV4vqhMPEg zZ7Z3OwBU;v?sP8NBSu^isQJaRooegK`b4gUId}7O6Yaf94npCjhM9f30^Z+%dxfb~ z#4FQfx#GL3>Wf$k5613`UD2qQ@vCz$n5M_<>~zQI!^kZBmO&7|D~~iSU;_^5%V1QLfsoQ)N>?xFD=Bn z_tkjMZ%Jh)4SBaalwW=IG+7%d$h?Q|&Q=S=SPv&&;g(`5wAkvH6rSHZtb(b|BB`G! z9o-B2Vx5ZQ)6l0XT1z~z@}e4#AbxPcGXt>I*x$`X11zF`BAL5DCG;sDFJRzu8P2rN z8=CrlrGxJaVCj~S6Pcqex-~@3+NZZ#rT2Grkd(tn7C<5`-)1MB-tkbffdAQvhD^X2C;5Kp@Eb{;0Dm;p&qHQq>oic^U}a22rz!B5o_s%KY@i|c zaOIL}sz9riwXr(4);6mi85ESneBoi1CaeC%HTLiO7S}NqZ25zJm@X%Sg5~ z4VH>@DLi38%RAU>C8S-cL`$1&RX=#@H}M{5MHUsR`U}JDsRlE?LxjCy1_-2NIqbqc z;uBGt5T$!YEHv6$Rky|wDh@lEf+z)MwnEjGGQgf{iKeGinSO|=x74^Dqh4v|a$pCN zt7a2dIA26j(UDl4DF$t$&A-9^Th!+Rl5ME37Q0fN1c5(aMPF%^V> ztRyX0=eAAF15fF#Mbdpy4tkFWeapjv#=Nm(9)2HDx;5uVU4>2=I&18E@1&)^mRzj$ zYqbZRK=Y(8!nt+YH^$fVj#j#W3m6^Cosh?PDGd}ZdQVEP2s8b8VRb9+YN7oiaULnL za#p&q5CmH?=ss3ttU=?PckK5|*llzt`OWGvX5`O_s?~-XzaJ|-BcoafNP&&8m9>>p zZNgYWvDP&@@%MuE zP6W!aJ_SF9oMp4k10qmKwGz9O!QA8x!ZEfJO{#sCzGa!%7ijN=O1twpF2Q|u4EAP!V?j@q@m2p=|4LbDXKWcq>sRMsekA|*O|0ogSZWSvOuTHT;{~|m1%^0p z855zy8ZtDYVs-TMb{l1Py%*fwbCq{6%PqTI>nOVpKptNEXLfxQx=UA>^D{e^#gP7< z9i7If%}U)FeV4(68j3OZnQkb0euB^FrGNS19+7m?InTcBuuFM`asC8^IsKwzZ{7w- zHg27B4nQ!pczV5KKmTw%n41y^a8Hwe6i7HUahNwh@eziNr8Lf0wTanZS@ZV(*5sD{Rvz5{yhLX zGEsglu!NxvI9!hZM;Mw%w%!`owD0<@!_)5c9l@V;sYZc7Z&V;L<9efUf&VE^NHD>K z5_xVPg|}kniciXnOH?+emMy28In{?P&Dvj7vqT$Cm&X+Wcc?YhKrt*+QaDDApdmVT z*I3@GYa^4)gYY+lhAntxc;LOiWWnjjpce`8o-BeLk@owr`5yRq(+xwG`JL6Nws5!Vu} z(nt^ITZratN~dlDX&%rc}S1(&9Pt^rxGP}XKFbHQOG2# z9VoI55R~Q?dY`*HD187tPk;jr5ca}@C)8VkSaDzYBe_2;+_N$;q>Afp{epN z!u9#HOt%-WM=Ggf?M$!K;26>8$=vr{B0PBiVb~b4WuW$&hxpszW$%*~EAG~!fAbWs zdH?ot2?nf=tCo%t71rQh+1mlkIeFgIEGnd5_EH7&Gc<7d^VM}J<|L1fg=K5`c0TlK zP2=~4g%{8a{?V0^O*s&j?`Nd&$n9QrNi9>wh=eDm4#FhJ4xWD}7awRqJd8W#U ztLo#HC#g7;3eG=82)~PR4I>s`X z2&{w04m2y{Z%~b)JH+H3!NYNLPp)Zk{6khc1IFOq3$OPkA7xU}dTCbLGCu8+$?uV< z|9ZFYfsEGoU3D+S!~O}Z;Jy<=o9zt+B`KZPJnv)6;msZz~z zgB*^HGaZB9c@D>^`^o!&6yiO2NkTK?HI8h{ik~*{7?6IU(D)k7CaDp8_c~GqfNTc zc*uWM^Tfxl2{2|c8LnYF42140&|&m58rhY+`ZWAGVd{A$_9$pMmV-eQ+_IC=ZgNo^ z*-W(N^178%eU8qMQQS^wLC-c_3$nFKWKK(_6aI-$yN9`OE4F$URlTQ`X!=P1%T?1ob#K`Rw6`Gi zI{m8N#LA;)Uebsn( zzm5e{!LohMJ4Z!(m{(iPF(Is0@gl+v$RR(oK?WPZ310&%na^UAT^PajXvnQ+tG3Uw zngd1_xlg^?R+`e?u^_2cF!8sHF*-``^MT| z9jAmH?5zW#-Vi>VS6oDck*}Yu1Dik&>*HOdlm5u)ZN+@`l% zj6eNyI{)SgoI={gcmL<|U=+9~CU9hnEB7E10A(H&+)9yQy|1j~FaC%r1O`OtK~~2_ z*7X`~$4bZTG-i1JW@(=tUht?AbAbx23hEENMPbbJ$bwR34y+)Wti@0W0q??!{mpG&Ek*$|`RT>)hhi|1_Wy2f`8AsoEpE$7wOxq^#!S z9fe)BD_!FI13u$#ch`J9Uw`w#LvLc8kvq@=wqd#V$WoX>GMgt&^n(DkuV#sLA)o3= z$r@m@X(di@a0bVQCDdn3h+Z)&qF>AHhtd)YN1;DuzGA(?XWiOo@NRPeUn;VWaGQLKWAN6> zs!6C^$(~%vnOc#p>=7?!KYAi5sn7xlB77CRS9Scf*1iz;f{{y`d~rKP(;q)QN_K|s0@K|s1|K%|F|1}R0PyN9l!LmFi0 zlI|E{=H1@+^SuA}!+(F`IQTFh_FijU*LnWVYa!R{c~ym6fgz< zIX?p0Y3bk)v)t-)F)n#>N{{FbUR(BA)uVpm(sqWK2fE`Vq?7vI-kwAMu!i+q+&%1O zH8>B6SVc9aITPOOJ_m!Zm)`18POkZW(4sVB~fy2e&c8 zg&Nq`5Hvdfrh~($Ys&ov%-n14DpMgRRDx#bmJeMaK9gWanW!@}tYbA$pa;lwce%jR z-nvYiX#{lcj{dza#Ab+znlvSc^Tl~?hlqlMaI6jJ_#todUWFPBU4QvDT{seT+j8lq4?a+x@GYaIpWgdrh7w#=<4;Cox@^W(u4` zf6bp|#G9eNkbUsVHB^!_+Hw8aK_!aG3WGsA>M{Cj7!JB0k=8i_ud7hfS_H@0c24BO z7drq?D3aaW&3nk^&wC8blYvv^$-;F6Z|}ECKB3%VXq_Mx5^rT&E>iAA>CXS|yq1C7 zb81xv4-21>N2fk*p`x9n_s8yVf=YCZ?w^hL+KwtrES{>DThbaa_|8RLzUQB88tq$c zlyN~pxB1d}?N$(PU(g67BBs%=b6Ea}tG6iSj{nO{yxON?UX@jZcTv?Y>)Hgck?D3` zq1g?2#S$+D#lD-b*71J z5{{1su$@IY-7s|LQf1fTeh+$XGVye7TqQOj(yczu%8?5C`$d%VgqyyFf9hSU%_xRECLS24%6@L*MA>v*_3 zPsIYR%kzm0O-weAnpSswK)XIEc|q{=58KlBHzx+)Fx=(%Mez_rvT$}>_b+mY$KcDK z^k<89d7LN7vKIPJ>+9=_@k2U){eNPKu{$Rn3inCI?OKK2^AX0j5fBUy1i*jC;$EMaoKtT6+Yc(98e&ccL*@cr z!C}O69J8oUjkNQkl7*k9aa+ZIm{T-BbIY8+23MZ~Ibxv{GZGc2kR)EY6{3P;Wt~Qa zLC5xT$^5`)L!6{Y$)V>yNmP}QJ*If*kaY59GPSxR{Mx;95B6_cAf9oJ;I9dx+RlAK zFd}fE`vIz!v+VlN7ocgH&g0e&wvf6Pw*cK`J!~ybz_%u~;9El!G1O~|Uncxq4{!jz zb7SQyQVMbrdvLYHQqEMiI!Wp~ptTW+`ush$yj=xL@EVincx><+r3?4azeZ^BlYUGt zG%7*!F?NAe$doi%NXImbu~Kx?Q8iSJhR;Y(BbS_)SPJ`VBtGQZT0766JWK_H$n51!E;c#I^RzRxPWKR3G43N|S;2 zlsiGaJVBd!z79PH_Uf@>AKV?=a0Ahxn*xc{y~bJbg}6?JV7pGW0IIJPmJAo?!QhvSKpK+^wW>r$}xPGCrn{!EXawdfU;nb^oXx#^b?o_=vN z%Ur0UgG_WOFb_9Q``U&>BH5~FJLNL&9rJBqKO+nEi(e5pXO~12Y%ze5J=trX&E~p zpPTm#XwX;|&ik8l`Odc=wczK;t6P)p6A-UWoC&%|bxy?gQ0J%1n@faUAeSi0)+6#B zKoE}ERqI#T>4V4Hxd|c5ZIMT{;9qsz&B2z6ZImomulaL1(Z)G>ucKL?*m>E2{xZPL zgw}=pd+f$oI!_qR)96D1u1E96#O<*9*U}Hk^Q3l(R z&}-kKY(9aw-_jaw0WlBjO+(icM9V(7+I)x`f=!34u33qQvtOi?sgFp~a?m}?o%HMS zzyr!}>G5vsC(k!FRwYM!)T(OFr??HbD7*ZY|KH+El>hwTBT8Tcl3#1%OE*JaFamP^ zt!-Ix5a&sU75_I2Ki+P&*WbJZqdKlCxHH5qY&O2`Wkk^p}oWW`A_xIOFx^&z2 z$j&9YEwjvc4UKDFP^D$?pMCV*P@oAe|vqk`HhIoC+*5Iv#?Vc%9$iI zP||V{!^BX##`N>1hKl#Ccb}0*(MKR5aP_M>YqW+;eflzH2Iju`ebm2Rev!SJe6W@_ zY2mbR;b|0LyL_v}Hu$2__yor}Y#J8B=9fVZIVL<~V00Hvx_docM7ov%#Rfazj3i&}{e=C!R3oO2ZeZ_ODe3BM&la*3ZU&J!})BciAfcr7TG(N6!z!5?-SS$H2UDH0^ zJW~O#r*pxqaf$eNPq}`L(~~2l;BR~8rD?q!gnMu-r;k8n8EygNhS+NwpVpp_rPnm( z_DzCFrYjB38uM84|66S#Oxp|>+6KYIA?|X#6dIj?6C(p?5C#V6z(E&xx7Ge=VD6`w zh^#6v=LqlMIZD5|{XiHJeBpw?U%g+s@x7WgAge-IRDR2MxSem|{B$snx9rIlThG>3 z!IXmUK}FNEU=%;vHOW@f_Y>xA;aEB!x?PgO+fjThyL(7K7|x``|CB)SS^ zFN=ouhxt`_2h}7IlM}YKEAGo)vQqQt2qpQM$l_KZ>=u+z8HHKaw_dCz5S>rxxLdp` zthlbcZwq%u-!?)Q2q-?@Vl=)M|MiuBxCC`hfTrV_N%vEY&R5fUKi7Ey1g?gPvwD4` zdOh{#4zK)v11TF2OvY-Iwz?N8*km_1+B>>rcHv3iQe~`{NwqbKIz&V~?tF|n{(N-p z(0O$9)6UcN?oqn6ZmLX-BxAFRSzdiL2jL4*$Gr05p#vkm;qpqI(sy=MSG*oVl6Lgf zn}nUK2sE{EA_I99zI!HETp@%;rH(|yRW@x+Q*2n3sn<&@B=uv;?57BtZfsFBx8n~x zeqKT0C(~V62GB zuqB!(6@Hf^xm|paARiItN#PPldSi{4m>3daJi3==a(%S?@eX>vWL6MXJmF%~k{`b9 zbYwF!BPOax%+CM*4RJzTJWQe!ka1f(5yTE)%mS9DDU+2RNj1E&>Cfo$k6@7 zZf+5I2M$s+kt611Xe7HI0j8W|qcM3i+~-ksuzBR4=1!*`;aSGf}|U70byZ=oCvr z>n-G{Qf;H9N_L-~jk9woXsaO?U3dHp+{i)EM&-<&-b|UX5oj6Xv7*9By=MH$+!)?T zH>%2wpa>Kk_w9kHs=Lk7Z)=JTd0C_!tPpW0Qu@3mK33R(;RS2|Jt-}|lNBF%%=Bn$ zc2AgqIv{>hNCjOc&5{xCAUUgY5nn0FR^MN(;2kd;ZXZ{$m#+kM?;jOO8TpOZMe_Ul zonVOWxLC;^+LSvz*KI}hNl)yf6HN|)^|iz{r~JG%i4zkxem*S7WF|88=o~oaKZ?(e z)1)P^?8Hz(ZE4k%YST&U0#5X*#FxZ&DrM8nXGvk!LEXo8s$|n%P`0d#!hE~t=ZJOI zgBj=&)blAk0?s?8p8hg%xPmoR7y8bMwx~(8j=>l;jl+=7z{3_CvDf3zrbeB~Gq2n) zFIAPhM?!|@;zPvioN~H7yUFd)lcxJcsFQBGkeUZ_MJcMk$@^|&+`g-^1oL3WL7m2X zZIDzORkGS;;WK*`iHjUrd^T+umY0QJm(9Ni;XQ|&)$s5FKg0rRXoB{N?)-MCf8qs- zImMF{d=x4ws!R*~O{J@kH&m{9wZzXoEycgHi)}Fq60=DCwfd97PivXY&V%3HXO%MOJK_oV)g zz5F)opCOECR0|b98F8OW-Z1u!DO*?J!>WZ%@Odz&tY-`LZCi#)4pGr*@Vd*2k5#mwUw=4bSyQem^dVPG@lj@b=!=~c*%1O{ zx^7Yapr(!Dlk0Zh&zu`WjdGKB(LOr?kq$yz0&%lD#J``35($1|8;_-O(n#z$P2xD6 z{I{0GUWn9QG&W>5rnj2Yx1uI!Qd0 z<-AOJORx6bkB#A0C!Ta}ailXA-qK42cW;uF=48(wq3?c#LVa2d13STnHBSsQmlG6& zY5U_^e|I+E^+s@A(r~#^yj))}1haP%*l7yq0uu{aad{48yBkVKc6Vr}_B*+&l75F= za}#C&s~A|uRnjJsR!&5`nh#Us~(S0bz^!q z!DDvc;qC%Pb$xmU*D3YDnK8hUu>Ae{9gWp+n$?Q1hA9o3J$CYou&4y^6OjCtmd8p~ zYRnBUq$s07LHuN_`cU0fsHRU5$>O6kGHTMp^5!txqbQRciu9D>yPYzp#e#Mx|e*S!WJ@kMxlsA-#Ec)qW3_K1N0`Sr+tLb*L_>CE|)W( z{Xwi%W8oXV*tfU>!rM$qavO()RG~;yo+FF9`!5UF47@(?Ct4 z=-b|dMB%w(vMahUNyer|ek>E0Y#M%rzItoOg`P27 z!D3=~6OQ^epGmjWx=^0gi`o^O2BL9rO)GYNHnYk5c7s=Eoro7jbVeCd?t5{(r8aFe zuR|b)m!U{tsIVPHZa#I-Hoh-zDR%C2p)bH<`D z)8vFQ_?m9j^8sq{09|!J8D#sOxHkLgM`zb;+~b#u+02}?f>N&Wlvb?Nzu z#HX+Nh@x0G>t6FDQY(38nZk1Wog|U1bkO zG46_63j$3Kaj_9`t#9HUQ7SnGs`x~SsCGFjd~hLC92UqB_;8Ih4IwSC}1U+*bLgO@axgT#>C^9#KY{hOGd&Atag@`Pt93uzx4>L z^<%BR3qx52e4yuzF3f;i81s`-^ zA5E0KhrH{xu8Aq>!L)|xDTwH)dZDJNrs_C$sdt3-?Qo5|xLCCmfBsv@m87V_0)95? ztewp1)MN3Rg9;@L-m4{zf`YtMQILDrhI#1M;Ojw#9y8+$)-x2DBjV9c_HRwKbfZ1P zWvy{%9nV&+cM0nH>*6wCVhZ-^RdOeO^`FiBYeT**Z!IcALh#4eA}Ie(fDYR1P4Cf2 zHsw93(IsYuNGFAeLz_zgAd&6ZBxholkt%wgajm%~@sXtrU!?-I=u*&D-HqhE`IH2G zjUYv$cDfA;kC@KrxBP53+k$VXb#ocdR`}IJK1|~NCb8;&X1&5@j%Iplmnn)d7{6rr z;=Xw!-km#T1LU8Uy7hD(EuY9TgJwO}<|!=R#y2Hr6T~#~#W!^JT~fdhi%*fQpErVw z-&xlB>R5=bvTfsR^Q7i(i>!=Lu^71v$RwOME>U`jT?=dk7Qdh8?mu38XMId55OE4L zST66SKS8JLyOy2VItCP*m)?9|Rxj?2tx`;=uuu8anVN~f8K?L7`j?7*%8p@T!QJ6PR=-g?r|t`bA6AtLLn%=xgDzitkhH7t zkl%$`*lmz6T|TmG=R54`I|hPA@4noO5#l&6bf?%ndFftQp19Z}p_9cG9Ww#mSKiSV z(k*0afW(xYGzjSyFeF<{Y!lua!RAz%I^!34xe8aE26T(Nbbl*Xzm2YX6&|F^+o;iy zA*%O&q+&p?pv&lOTvau7Fo^8OhQF!btfA;pSKIpQOP3C%wXFpMIsxE4Q)PDM{QtaY zOz*rdPh~LtJ2{e*rjprT{oX6%h9){8JSrjlEXRGF-kq4%tL`J%V={T$*fn?5H{((v zYN0rNp*TVD=BeEi@aUf@9cNP4_=Jw*4g5E7a@Ot}&b*U&9#Xb?B|9o-_UO zNX~Sv{zT{srC4t&78X8(*^~9wP!{Z2h?vEVjldg)%n(>P{r6kIP z-PspLg-nd@NT70GXa;|>XU@!LD~w6)6V)SGtS8;gq9@`khMq0o-~`?T*}8L!n-p5I zRV6KkQWxTuX0A>tOI5`Hg(cVLR02MD=7`QqL4n!FHSW~x_2bIH2k&2qt;cAdmmi6RWKAu76|MgcMQ zx+$yyp`1B+Tg{Ol<|!h&+JwhrS>JfV*uBUGsRIkxva`MWGbY82UPwadqTHZ+yS39$ zqp~kF-5m3QR?b+=FfbHCOW-k0x>hJTIQA-~b&o1H7c$yA;^W6tdM%5P(K3+T9r`)p z+kBohkkB#E4rC);cQI~&5XMRzI}Cy_+~{83m1>5EQ8byKUiP4AwibyQbrKph5x2gX zm_aaflS`L4(@ft#-oD)QO<`8QkrelN+2@%TJ{_48Hp6~e67kz0uP6UoSN`+fvN=^n z)a8w!WsbB6H>okUHfrW|5t{1=L3QERq!y@B<5VIuN*<`w)M&&kCi^mLG1Eq*z|RPb$VbkMcD!F%hn4$n7u}gUqu6 z+A91IPYGVYX$GF)$c4zKl-Ez)6d>t|mAVV@8G>{(#8emWm#UzCgRhKfzB)XyY2YiY zCwQ?bQWCyuACRQz_>Sw)=TD;LWSV8S_)x7~jG|JEP~|hB{_is+Z?TaWCP^4d5mb($ zD!O4tHC2*BNz9{Tf1i#tqFhLjrk6Wc8qu28P>Q>Vxc44x%JFpnG|ZkgOc^+%)XL}7 z*A;?&%icXpm6WpZ>;9Q)0E0ZnDiO+VBHAgY_L1!-6TY5EG5`!6-ybe2hXwXjlo3Ka zoKjmw={)X-U+2R7hxQ>@qefG=H<{R;4$;>}ZjSw#uwAxkm-o(9U}pKa6moS7&MKG<9@z0OA$Zl6pY!T-(%Wbbgn?S|_lUhF6Ksl^4esKe z%vRFr{se*TLk12X)c?HraNx!NtJ;yjBmcX+10}_j;+o_41rKTZ{S71U3ozz6fy}(} z@DX8d^_rwDi}e0ly>Q=5bDUpY-gG5P`s=#vs{-*8H8r-b*;6Ts&G zkpcr@t6^oU$oWh7jN$GL0P|AAjY%go;7ZXjwbWi`|09qJfGlb&Q zZRB9Ha$>-#2#oa^yDZZ_H>b1zXV#4$aIKK>cJSq2EGgqh)Ei)*Udh>ok(D8s`jFk+ z_P>yboPUsS2H>LA`Co7X^AC3Sw(VfqZF1Hu%IC$AZ}UDwn4N727F2GsG9|ZcufKyK zLEhv9@S$UGmD$H#?Sjn)GBkRM~S3g^@~+nm_DvqU3RjP-8p zC2bOHcw{z;Hm{uVe_ZJmTpXzE>JtYYyiUrJWjxI}vhm;&H!HQQDab9^z_f;6_2C|z zxh%*vHYX}L<4@pKcurDGyKir>TQ=dvRxL~YJ~aIdE*-G7jr z|2g9G;@oO^(EYdjEP~K?!dTe*TfgsFd9vY^m5H(w!+)XIW(CdmOuAF z{hRmveh+J833P$u7e$>w?Z4Uqe>ePS5p+rg1n7o;k`WW1#{Nrd-0leFngtKjX;mcdM^5B@S6k2f)ky5;WeNH5Bxm>nQ|^kWm|<+VY9g^>tKpw)b2d-N_Da)h*#*BY7$(S1()X3 z#knhSI^^fuXznUvmyXa^Kc3taIz0G!-Fi4Er-&qSIkFf{z2fNn_SPOP{z29AV0C~a z77K#+p9W0Swj#p_46N);`i-yu6=7VkMoQcszStfPG>B>K<2=p8j$3rgd$~a)kOY{K zlntA*QgXI^L$$*F7|3V4k9BN!1pfEJmJDjUo1Y;k)9yW3F?lU;B{dE6~`L z5u=1+R3cX49UJ{!+cyUr^@{^~7O@8%loY%K$M9vT%T|b(%qV6g4`$B$*-*j^ap8=o*>k6rF@~i0T%TSCT4!nFG~}K5Xf*Z z)&wN@LXf{wcDH-OOiIZ#!x*@zk-A1Sfp|}l_(Vj&=lAdfD$Nj`(4@2E^!Slh=U<%qk8YewHQaAhj<1RKYONe8p@v?eu34x)o0Q$;q|R}uL9;47 zWBw$xY#X$1o|Fob?N_MtlS@@0=WW-7afo+_KY?3_7u-m}u21gddI3 zimk$i-YE*z^horGO9F#&D^OEM(>XHuN~{`-)8L^JJMLvb7drqy$4uj*K68OFl2Mp~ znvy?RNnd!ik3Xb; zxDQ62up$7~(8aM6fhFB{1<1Q_*?G_dH$8H@^C3O&?q-5!!{_b<`Pfx89KrtvOc~6G6c94PMh%EZo_1S<#I&g%}a459f)1$_F>sdJ(&|@9U z`mX49o@G&Cn9Mry>Im)7CskRT=Q@9 zI-Z-PP%oj&>aI^-ThjTXg*2S5Di@SjL}-4#H3<;p_hFIT6U{yWsk2!8zHR56Wj8Y0 zD_43YgR98_{J!o;@rg?5b=A|S@qB1Sr3sq{?q6k|F?sxc{oN@RZ{RUo(&2-BRjy}I zu5x<#BAWS*_mYvs+6UXbtaqJphcbk8v*@6>&#qaSmUX$FowVuh*~&#GxX2q3Fg6NW z2RW&C1A*f-W!fLq=T~UxFE?*zNrBG4Jd4+fF?n^+riOar&P+_?-TH_D5!bW)PLgFG znJx?1tG0KF_0`e7pF@Xw{0qU<*d14j0bSuFte;mwku&`{Jn8mgx+|l5NpCdMXWZeB z`h}{`6hs1h7LUfVm*<8TeI!&UMAid0gEka#pZLY;(7amiS5>FsI@_5g;jLuX{lV0# z*gHcmyjRPX#EQ#_%V4&mP+m-T1Js2VTs1BaQPrksul~6LGDWG%{g9fy-9uqEp9@=6teTNx6`tZ)5wvNv;A3amA}D$ zQ6A6cH?I6A9U7!S54VnaRsUO^_%`Un(Acus@qtrHB|%cz(M*9oJ8a=5c~>;7kJ*`i}f!aW#vF|1$mFup{yf^!th zz-8T(qEED)m5Q1VquqMxH|3Yp5MOXhsb{D?Soh$VaJA0q!cJhb$*dm}S z*`!QL_U0?N62tmFr+KN~kXi}b%SidqTfpnLVy)6d_Te7hAo|OW-PxG9ZGBWXSIxgrY<-^~hz1q4zm_O;uG*PQAj`xiY&1^D>rVu3=uSn_(=4eut zk3r{fX2>v!7PX`3cu;-9z9ka!uftePX|T5C?Zid1^z$TVk4m#vwg&NM z1HRI9(*7*JWTH}cvP50ncSfn~m*^3vkyAJFzY$}r4{i{=`Cgs^M^FMiQLp3;v3WK^k%-ZyR~k#y=FpsnUrfk-rMlAeEl+r z+h&AKThu#}vwMI#Q2(X`Q_C9b|NZ-`%}ms4*{@&WcoclfyS&Hg&Et)YB72~idxqnz zTh0FpdI-=arO-MtCyG*kRKlWBV|b=uOGZOPR1{Ot9Lw&bNA`t=pbNNW>)9kqa=8M9 z_^$E`J6!kf6#dPeaKp+Z*hJ;WG5B;K*et$yEz?M1wfnP z6F}x~f4NAiCDqbZ z#nRRBOH|S1`$JQ@r*+K}!+X+fp9;eRrL%fU z?0OR%p9SnjYB#RP=$n=(PhZ!U`)*C&s7mO1U&X^ueKxNn))cXOv9T%{U5?#8#3Y z?C&9rr--Wq_;{vr%tCOD?4>`dY+76QCoC=Yk?)w-hVPwB7fKl+CAi3bE_pv;b!U6V zjH0f)em<3lfODV{6iwtHUPox?9HAonbNX=iv3K=Ic}tV8@wR8z0k=rYnQZ*QA@oa2 zm6YYb1@}TWufcj}Bv2fQY(QmDnBoW80{L<4nlR_Igkt3e@ zn)rzswi4r0e)BdCTHUCv-HAN4CFB~G?AI_aDZ2DZwJ2*wYiP%Y3*&9r8bzpn8^z8S zBDj1C?zCJK$gKkS;|K2!L1gcgAMPY~JU@Enf;qO0TX0x4*)C7z>vDPU5mY=tiViW> z2^XF6!#U%Tx$l*Ic)bV0N#wdFeiKdvq*i;L3uKK2BJWqznV9<;!sHqEa$^$`)OL9k zYQ=Vdz2TQrpHI~oi4{TA>h{$m$p!A0%?3*H{s{A`^uGrO$)lKVd41AEo#A5rCy3({ z)d3QnbuTek8b4K|JnHVoIoyME6qJ@6jU-o8pnG5?#miygx%o?4Pr-NW7Lm1og{F zr8y>QVz#fuv^G6MhfraANE2-&jZBakgk*IvG@;4S*}i~jYMyUhDuR4{Qcq<4$BVSg z&mV?%rOY0)?Gic%E+VT~(AMf^C;VE@LjnEt{O>g>U6mA)iP~}-BjH5){na%9N%(h9 zcoeFvdEa{Mx5=m>owgg4Dz5aW{^?VaP~CJdP2we^aa8(TnQ<8!hp zt^e$?^fJ5ZZJp_)dP{SndS;AGVv_G?k^!35)2-R{KlRCP&B*{wed>d%H8ie3Eh~y5 zTJwol^UB>P_Sz_`hH}n zwNY&7V`~fc4OicqV#_mL_r+9EGU2|;9_YNKK+2OKtME~3jQRV1h{*!qVi%d!*@jD^ zJ42tX0A)%TgeYrcLH=(i`H=imi*|p#7IVfqC~go7Nn!^Dwj5VqX_P*Z2fd`Xy74-B zF!+G@f>st}N>XYKH7hp-KR$qvTJC#LX|kTXt842k3v4UKTnl=&C~d|RXiS?gf2B(H z{Eyd>KqM*c_)CToB_k8{tEY^ApzWj=QK_DcVL>vhT9r;t=phUG3QyJ5)s=}Ut0uHf z^90aueWL4P!j@53u?cHHcvq5f#9wj_wx6lJrN!dnp&m8Y^DmD~B` zrYT8kN>B({i+3F&-ENWXPa5yq{Fu^ePT|uF&>owx7zN)9P4~rZfFJ7n(3D=5%P`-@ zSc$dCAOyzUQ$2CNI^%^eiUkCs%&@%r%o`HwF*K=b$j^5HZ`CA zOQCd&0qexj#UA5vXZx)OePO(9t|ZyYhrF>eW?hCDfDl?-QEmI4o5@?D0LT?P`f5zF zMuzN}1Vf>iNs4hScr?nXB1s%heefMD9rTbWbpe-!p}#(|mVvzlf$kLlAwyh7jRh}0 z%u%DrKW`U73Hx}bh>ybfJiNNzxFX5-S&wO0170G#z6X@(i4L|_%?1y8Zqzd(?&Yc` zvH@}?!*YR6I%}DlIKyc29$f`o>@RZI>Q*RGdRM?UYv@Jp(M~>TO~=>>J?n$Xhv6}D zpcfl{2DSg;SLihKBlo~g@~z~NXa7iDhc ziY>=?yy=McDjOWdL3E=`iEeFi)-EOr)OEA#t`A%0IA0W^+}&KD!oZjAa#i;fMKEtc z({%dao~eW49{cC(=LWD~AnwMl#ge?~W&A||Q=z$C0AJy@y_x(>J!+y)===lPt2T-o z`9uD3BkYIy*BSUs`L9hQZ#75xpFXWgxIGH1VZJ7veA?ql+}RKnOSH=iqHtS-V7kpHFx)7KpHuZ{S`p6DndM=DV$oV@82lh;Um{<$wZEu7s;^9?DtortR2DkjCs<&;}-!Fx9ZrB^i`*_9qc`KK-Lqj z<_|JEozUWZf3ipiuj`}&l(3uMygDqDD;qdIlDga0@)%pRd*c2_{PjZyy+Ianqz-%d z=KVK~+n1OyF47urc8~iu9=eOf?rGRN;hcl}h_civB6O2dWo?4@!EihLNqvy+vZn$Yg*35)JRmyH{9 z-7j1caY;ACb!&65;}Qi^=l9Q$HvhtNhYbEoyO!#2cuTXUD?oeBOFflOW+^8W@C~psjf!kj7}Q%1whw(O!j(;3e{)pB@PKG1@@w zto4vrMAn+vUGv-%O!Q`-m`71+?zk0x5`C`PC3;={1gwlwgUcsF5sdfxRa6k;Z|H-3 z1{l&8AQ(9)PVt%&Rh|f}XU`}D^{MihgUZNbgI#?XKZWBkgq4U<)coPwq1g0tZXqhI zf);0JWq&CqW6*DeUNfbbW#>gbA$npIH93!QqM+PrxCf%WVi+ZH3v{d4$nJ}2BKo^= zTNNp$1(a3fj8Wl~NcSI|^Io`pL?u`o)P3S$I8?l|<79)bE!QNw^VI`y{Jlh*d3M?D zk-3rza1>O^Wq)awajUFKU~eSO!*k=m_A^sjyYh>AiFtM(^9=j!Y4nY?=2?yyg<#Wd zMV~O(z{)fVo7hbYIoo+>FeObo&$to{UxZ6+7Ez%vG5rs*0BUG{^OVI)Gij5c@RDxh zHF-}_tOBMwPX@pl^g#~QUbtL-&8c?lr`k%A9WU>O`e}vItQ+yQkeGT$h`D&Xu~Y79 zbM-2g#c>nR_w4mF+ta)HPM8L!^R}g0b z@)-E~Z{HbD1_$17^3%1aC?LQ}{4BZ4!NWy27N_ppoD;`VJ410;z(_G1!rjVby7R9x z8;r9jHvUZ%d8**5*;m!moMh|Z`izWYui6DW%i7h!%=hNbngtohqH4T|OE30nE~Uv? ze8Jlx9CZ!M=e)K|%bKBMJ+FR~90T#_YAc=CHAkWK$&4CK&oGG`g_h?m_og=2zS#9K znooLsDO3A8JMJiR^>g0w{4UAvTK;5dR{WjrX2&6$#+!)SfkEecS4|D>$qqGB7FQ;( zuAot|<=&Amhat12a|@zK3IeveCA0%B(7}jF%?*XP{g=SpKPkIjd?X?jd)|-Fbn1a z0*3py0Uto%Yl8wX))XIdli;q6(lsmmd1GK z2n3pz`ZIyz;nF_ySg^KvqW@eDYmrX+%o&Xhit=8M{g*%LX2Vaz8S+nDXx>ncbpj#X z`$vV=oLl4AFv$u9i6aGx=Y1_^3jUvNzg?j(jViQ050g;%^O;;}Q$TZ@vXUGvS0Am$ znWkHWSp-US@ch8X3gm&cbJC{8(}{VKm1hY*W^Z08Wzl=fPX^E8(j^`)>A#rMd;#UM z7N51bD1$UB4sBPcro|kHnf}0ktf$TKu^X~K zSbutaoovkzzR#SI9EvwG5&@e&VjHwGYG#$2dip{Bp4NRjbMGeKDxd7tYfZpo6KZPH zj4k3LD5Fx{EXBJ}e^>gGoOMgXJWP7!$e;lGh?1f7PD z6wpVy71Qm-93X>wN|sjz>c=DAN3K!bxRjr6&7tM4`gVc2xnWst3jTvio}HHwk?exc7L6@b8$~d{}_1$z6MeMyfmuT;E%qqW_i%isp;Bs z7UkQ{utE7)rnT-wdW90m5>R2dA7A5qh+G(-M7rR-NBYtv!nmgL*YcE67fhMMH?`7A zqMpsXUv0+Q?axtgcg*1VXbmy#UF6ls<}BNMm}4U!CR0xraowTCw`(fP;97vn+vCr# zI&Q-xd2M273jCi4ecq9s2<7f_1q}bmuI~EZyl# zny9NNY*fgCg!G}Aks__^MMpiX-#=m-@_b1zTd2R>dUVj#mq@SZ(#-q zxu|oZvbGydtGzAjq$J^2qhw`<9G|R9o8zIi#^f;$$}Who+lYjrPl&MXT1;C!Zpf7i z*8Hl|hmyAFwL99|`4b@9z+l9q5BDJ%r_e(P_o)fn49|}0zf9)UR#8NRLi9#cgas|8 z6j}Ne?LCS_D7P8ny4w2B{qJyvMm>+jk)!}{@EGO*6j%krhmmwJCHd|Rqv5tVmy z#$w84NJ%4=h7ntd2YP$XhdN1X7E1e4z z#+#8$oxs9|1@ToN@R-*Yht=rJg8ROV+(0@!Q4S|VS{5|{26~-F@*|)}5w)!n4k$Q(+PzuQgo#U9A^*Fs1fHObO6^wis~7@1w#db?;&*2D#`|2K$Y zSEt|i@DgpUf#?np#fh~30j3rMj89R{4u}6II>KA2jh3j5$N43T6CBC;Gnq3d6{9Zs zu=(@M*Z3iAJUd=zXJ0hfIUKU@=>gqaFPtBE1e_e#3`ah8A9)!%8yzVV52Tu_dm1t?U?y$Q6nm0;XS_-}?rU4^?1`wVf&R-H>_l&&L=om_z_VL% zajwb&vu|cgQh#Wf0J2Urcmao_*BP1n4a5#q1G6tT9(MleRm2yG^a^)X8u7SjXH*%97H|`7t!Ac^1$lWXb8J-#37rpzB?iWG=U(V z)gbztJ6f^Md*Vv`)>D^KrnZ`xArjV1rtp-J;FkPocn=rgGuFI)I~E8cOBR=GzIGO} z<9en}4o>-OJnrIX_2ZpNpa)rpsEl=~pSkR2JT5%;hLatv$u+O; zKMHL)O{%P4oh|b*nR&C_vJ3MC9u8UiT9pUiFGSWA-(<6ieCEQ4TIxQmpP(Zyr%C7 zpLEY$QV0vJd6ra+TItlGUZHhNEVWmi-Zg2(seef-)?2jaSu zgW6PTpID5_S@c%a z#X55{D;#vT>O;1T<=xXcwdsob$*S_P+na)?3C^)pl*alt_0;H%N!1w170y-Q6JF zNH@|fQju;X7U`mqmhP5j5z@K#^uDh9d7r)C%~yWPhk4F(j&Y3taSY|)=(k@{G7Tx6 zU(gy}BkO^(_l6=IL?Bn6fh^aCk9#k$DLc$}o)sxY?&I456VKk9hWsONwf_am+MiriG>LbRqtji-HeAzQXCE+dc>|A#hfbBWuKtK9XX{N>`% z@kPq9C(h}c)P0`R)uZI87oqHhl_3%3h?KiYx6xh)DBvWX)y%qr9I6>Cq31#^FGr$UJwLN<=g6 z*HEHyCl~9lEg7w$3MFxsf(JOjU?M$sJV@-_-HI|nFz_Az$v3^A#0gy`+ zap5q11ay+woGf>N^?v;Tl6ZLjdmi8pdkZuYye$ZUeMT88q{wSa-5ZgrBtA#)uwVtt zt`wOX|I~7*|5M8aEW-V?Q%7td=a%eY3l| zs5qtow$p~KGNHa-Fa5b@624TETivF96Py)Z8S@(=sN+xkQc2lUJ-Ph>1J`!a%!!@Z+7mJHthPf)ep8ub!?dEjSy5 z#&`Y*^zN+1q;Ovo+M^w7tV;})+rDIIj&rDF^10fz$MT+*wbUsOtx~K40IKD8X%Dy$ zaz@BKzMg$(q$qou_;`G9vHfVl?8$|)9XXY#L^InfEr^2y6fGB(pxg1cB>X|r*HCTi z^#fYnDduW`KdQbFyj5M_Jag$B8#)aNxmei$|0(hQ;)$<0{w?$>=?Vq#MTBI1B;xiq z;1+T5OO>57Fto?@p@v@mt;F)KqFGz|T>Ua8@&3~z9UXuj(>q_T2lm{grS1GT(icd9 zo%{Py4__A0*2ArQ0v9M2{(bb$t3IR9994S!jpyOgm6m1&p5~uT4L81C54@B{##VE@ zVRlK$+kAsr9}a)9R15lv#Is(-&mM6J9HMxT>Iwd~@=FR^4Esw7Ppz7SUzhqjAuV~1 zQeii^ib#D?RxL7m-)K;TNm3`E;=1+pjXV%0xZR$Jb6T&!2N&OjxR8dQbu=hwI%&mt=iy~eZUP2Io1u@}I1oKIbJusPBF{2?k)Hz)bS1rlY#!n~wCIL9?AU$+#i zz&czy=~HORLy-ab5_dueXGv3;x|H<6TfFaTcQE|I9`*N}*}85F6Bzm7KFQT(?Ne=C zZ1-tLf^Y9261wy<1eq-YGv2YPPq#=SQzwoCj68w*UoO$CI$DqQ8R7`nVf-rauP#F0 zry)q5@fT5DN&qnQ=p~~6o&kn8X4C;636`I~-6mr2@L5|e{c%1N zu{#+r*xN~n66w4OPbX7t@wZ4{p4V>m-$rEx8`ph2Vqoie%BW9lnHdYrt5?hsCSrOYTw`<5Q3+(VlD?m0?+c=sxzDVCz)F;k?|l z$S>kx!(#Vy)TP+lAu(2v*xPdsy6N`_(f~D--PGr&Oz(%8@)Nr`L7w%w5Lu$mGtDRI z(?J-Al+$*V0kb-n&MygbcfJb-``x&7OMzL}n!OTgizXa#Isk&-p!2u~8Mko)1D?hH{)8E$mxSsNApLG15YZ?T&@Fy@8@Tq?d zb_uG7_P*t0*aSjF6}4+cHtm7+yfoO~s=o<(y^T4>#@+vpf9Phap}OHTUGGDyR5dLj zQB~)yrz=8g`79T5>5O}F`uou}^Z=2g{2pRELF~x8F{5Ov9&h1*=k&;yRS{K89$aZo zUON0!dWX90@LLu^n9@vs&(}G;ljd!0vii!wx(by|mptkzYsM+Fp3=!JXVTtka=KL) zoAa_HO$Z363NNAp`r4GU(%!Wgc!a+llWxbLe;7qtZfxPB>w92p$r*IDjilf1swVCG zMsB(qU`8gWViixlKMz;#u3UR%G{52HEJXQpBu6NKH&RQN ztfOeD!JtvBtdvoXQnfy$*_z!CUe+u7<@%h5W!>C}!)^yyPN?-O22wTR%z8Nn=1G~jaKkr;q$fn~&M1u38 zbf{b(4&T+77;i2W6FM6P_Jy@`7H0%`*NA8IJj(dM!qRm_+F(LJ{PVz*e}Mwcb7t+z z-eJPamA2O5)gx?Q4}c8@i~+ONdn-BZ-JuNc?0-ddS|FsB4X>Ni{5qgrIvSXFrs)`z zxev+IO}dNYf{ChhRBt2sV@TgD$Q`?H+t1?fzu~^!G$tQbGh|`s?`Pg_SK$G+5rc}PNKE+QrVcK3FyLAVzx=g{ z*G8tTDg<~$AH<-lEF0xwGPLr$XDshIyFy1XYjPoj#c`E}ozLM8fIkO%$fCn3o~C_E z1>_j6E>HL}_dTx?ue4t%vD`EDL4H0!+$_@F_gvi1{}?%=p9f!wc@uFqv;~BrpS&&s zuE=W;N~7wAn!~FlU-I`2F$?){-5f9Ty?Dp9DQYsf4J&9~Q;E+x(JVQ1FN>+vEl0O& zMSYV=GUo2tuK~;+7J{0x2v97kRp-mAZKWA3p4(0MLVH4a(2h<(S&BeN~Xt|fn+FV9Ua?N##jzO3s2I+=Dkcg4f zz)8%F(Pr!N=neDo*ed3GaBGUD3MMaug1Hc%rF6DrvV#5VEEY%83Qc+SEVvv8dPHjD zl@N#RK_v(P$#tOK?6NqLc`KB|4O~%eu$2uMeMo{BhKZFT8yQpl(D*<2SWXkd|F=W8 zum4=XB#58r#w|Lsvxsge>YjscNNGaGu^Wn`(hx+ zmJt!2D6P3fBT{4Pant8RK3?}O`9_Oe*JYGXbGWp5`go#@bIQala(lD9=>`*;F)2#P zQp2+aLk_0GwTV8)n4fYL3L`w}71I0A2-!3nxpY>3DyfOa6)UUf!_*@}heBCO&<7@*1pP+lrGWgdsxEPq zi0^z#R>>tWo)ZWYfL8lR$MtNHvgLT0ahAQ$)aV@&5bF`Jz5TDxzd?`H^hY9q2BzRB z0`GIsSs2yXeDKpe4-bU@asRz|O8#oC1zdm;z9|%z`JXTdouTlp+@bLXE}@BoR`gNp z@rDkcxc=gtTv7j=ooRtq*AuZ!4$;l2ol?WrKWRtv1@0I3?m#I%-uafZ)%^naSc`03 zH$9llAheukrRS*nc%5n(R|gD)HLx0@ywmYU_-2k{wEDVd z)da;k$uC~1Aj}e+aBPhIBg2j7$3jkAM*Kp*WvB7dWg z;)h!m>+oK;$+aAJJx#_ z)iFV1d`SGKeUAhFEkG25OG7lm!VusV)LA>(=vjsWV75?uXT-FD)@a6zyO%#1@jCSP zC{Z%P7c=85v{p}gfQzda?`%p4$r32Vn!i_#Mn^1^>n>uJ)m@QeERFnmPhko0YrC^t zH!5!zp-$51hsBL>CdLf;Tl!Tmnsm{RCimvJ@^uotCH^�k=FCqzwM79muqPY!ALU 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%0A}nvj140nr#j6Qk{c9Cn#ItjX?{C6*H{XRd@@D7` z53rY6aAR1g4VmY;H|Kx9N@gl4+F8!s0bs5AD_^0d2zRbtDFmH^Uj>s71Bguioa1kV zq*9#z2vW^)d-G54f7r$8ZO55WoE_)r|t9Shgk23oA;3#EYy z(aIZ;ixhz3-2x72MXa(KvH+u2$eFQ!w{Jl$Mwtio*6AY8_LH!=BU#a#wWbMh)6@~%V+8Xww*@?XBkwAIHnY7c}N{x$)hBFcPgu(?uYvu z)^dFrv5S09%NR#Hk{x-G4#T_6hbFfgn$5Z(jBEo3^C!LWnn~K=((XT$n!IuT8UBnhwcev@>?SOAqb!$*fY8! zjscQz;vOe~d~bW6>jZVO3;4k_0ht@cilEx($!hoe(=pI9H%#|~M2b~Gr}5mx@TYSC zXs_Sfdfzz|uEDV=@5~S=A0H8X?~O}EG629nCHrQl=Y79_&-He#xLdS)b`29NrIcA) z)+=_ZD=_k2>eC&&y=s0;SUWoL+?4y@&Cm`BZTn2+PfC*|O7kf)BNhH0iLqA|>XL_m zj_zGNybNzJjt#I7D!JzX6MKpa3;`wrpi1ch?d(#fzJ5@)`kiV*244An-ngiEaydHj zC=+$K#f_8g7pQvz@X`A)h!YO5tjQ?5_jrm|_xG(!*}qfMo6pf}%2~c(Y&w%o3gogp zexbQ)rFcJSYttvRm!55g3lL!A{176dv;-r@XRtSY(R3%k+S?U2aE0x>AOg_Nd+S7c z2WinjTU>o%Z=@G701Vi;4~g(d2yLInT?DP4Rhp?J?6yk0_nT9sji$s?X%=dMmnGKe zEZ3kChq!p7#KUg%S!-=BSEOTM^6Ji34tsxqSDdc{#U^lF#T&C9+_**p0H1ATAEAk> zb82J^F&&0Rx10B8D;_nz*LdbdERCy`9RoDAVZdB36=l9BPmcI8E4rP?qvpn-SS0zH`_$uFsDzB11X# znS8rOD(7$fFNS-f%sm%=OyrAp-bz~v%c<99^(8R_1&VP2Ts1}HIYwA&?lSC1+}b(; zqG!OOGa{1x)9C9BU!&;wClnCvn&TUVCc(}&ex{*|>uE`fg&?RfEddTb6tt=5GX=fq z1yO%;S&I|noycso3v(zLOSlj>LhtcQ2QxSXZ1O&=zArcETO_8m)nsOxmYaPBOrb2G3r?Sk zaJ{lxf^n5{&B5+Ab;icC+lIqgcjvRbZ@zZKjMsqiI0Q~Ulc2-rJn}P_Obbw*)O;9F zO#jkb?7rppu5PMcsxq3_ z8|t0F${eChZDM$^IgPgoqud%JSt$y`nD1uKx7Nn=O zp{Mm$PghcJ7wl!3x~4ApM)N^tOkd=!-ly-l@mctfLY8U9_O-MRW-tH7i+svk8j-gA z@$w48-w{=4?#kuwFia{YTsQR2zPgSQp6)YW>JP4ha2lSw)RA4~uD8v|w~ch^L`Bp! zXAvXa_luJWAnvo)pI{hY79D6-9*UUFlVis0Y!H3B?G_1e&X=5 z7r41N*cCz?U#A~(B1YpZ{cokhwz*--f}&srglhKk@wf84_9V_Ae;|qn)GjzCn{~9= z`Ri}yo+=Tk-VBpIlI;$WA>BVVgV8VO=ji%^zf-(a9QqO{Wtjpbo?97i>{N=oe642h zs$zu|(cL!OG3h?1kd1nFMJIg~@*An&D$J~|qe>JOmCNP`Yb1qk^b^wOoW}}&6mlM| zF2RkPlEDn*qXr0jb10s-JwwftV;V8FpT7Q3iLP8Z%455|S>YbdkdX!KG>-g!yTNWI z2)8oWJ7Vn<${0BWs9HedijIZUn_X1!;r*RSs`bgFwLt><`<{`|&M~D-8GGAj915Gi zJwAeFBl}~Llbq~r#mXad9!@%IZJ*uTzmI6YlDhdWI2h#>a#Cjc@Hu_0)hc1iUJyYO zinM*uJl}d9>01*gnDrRzTLU&g`oxX|0J2+X0<$*izke?cfP=$Ed}Q6pYHj)Uw3=52 zwlnOV*#TwYi2{TXKx<1^>wc=Ix+wn5UK+{w|BCbYsz#|SH!D?}AG_L|BrzOOZ3(=rgJJ$bfQwem`VNKX z4(I|9i{|%}2HO@&ZxJBQe`%M4EtnT16H1?z18Wal`611RAkdozAO%!@Ack~>Bz*LR zw#=kMl+#q!b~7h4Clc;3js0B#$VIw|>XXyDLflkL{2Uq+8LjPgq>6xaqjT@=8^8M5 zzB4t>p)pjUdd9+(F0<*J-*>a}^#w6lC0W(}LD}3rcf6dy?nF>S98J`KWe`s>3V>R> z^|VcV9T|oAqg~9gob9k&%)gzjX0B<8DmJxb0dDoz(OlveFt|~BaON`*@miMnElFXVjbck+Fd0oQH+&9Rw8=u2F8#d9`9mpfe3v zQr=$SyB~Nn@$bz$jK>zuRWsZkJ2cd|R-})R5muB4d(qG%1j(5iQVQSIDnASk$|?xT zsVW#n1=$A2JvQ3|T6^`h%R|WZk7TxIBRaA;qI$ko@C{acM#IzvtHb;=8}q$ zKiv;{rR2PtwOuVf0+2o=rM22t4PTA`oB?)ms+P^Owe}KnT3Q_VEYp&85eFAcX%ov= zoM+@$Z(l5ZPb~j%9-sVm!Muw1)?g>TC6re)0@+4B=^DYs)0e1D{u$S0FLk{qHka=9 z`UqoI2;4-Wj)Gyu_lF-5vOrf7hpEqNSUYJ7n zq(Op_E>@Ulvt-+?W~P-lP4zEsia43i8JT}7i*_U~^r2aPeTgeh-25!MMgL&{500P$ zfU&8ufM~kgC8MD0Fq)?oQg}d1*MkwownHn8z1^xGI1e&rU`IS;_|BxH{JU+9&eiq~ zuzCh)9#+%Uo-G-@0Lk)>I7Yi{AFklWxO8cKMV@!z&$<;(RKHJu+ZI>nqn|)cBJ{f= zo*1dcL)h~aaYuR3?l}nL0vGWyfm$mz8zFM#GQHsVh!G8T2kRE|Z|(5&toCzxMMS{V z&y8DAlqnC9PyVMV#C0pfey0f+83nm{VS&QT=zmEaKH~iR|J9qXe5;2q?moE-e|yLC zL!%Kxy#6nY50=UL-s=r4+B`@hILj?KhB7#Y7Ld;&^B#(*RUeAmV8=~hyX<1SY(%@j zBVG0~HiqK?gV<3iz`0N}@T~cby>f9A>6a z5HPM{Hgk_cX=K6FEuz7I{(Yo_PcYbpVt!M77y#~Q&i1*_$f!~D10z5mH2}i|kOY`t z(Le-N#NOp&8A;1LuDnTGfuSrA($9(}Byhi=h7G*Y)k~tE6lrenq=k6p|E`iU+z*fH zmhjC>!%N!vE)Y%Py)ms$V#2f!cAgO@`ZTNB$iB7VH>-GS?O_Es@vJ@V*WlZD*8W7N zz?U4_4|424qmAQ5hH$5;wyIoWq1#%ed z1*#2M^`9;i_SGo_Y=o?4oTmX-eDK!_$sK3P43tEPh_9#-lbfFr9%b zfw-ca;G`Nz4v_KVa=T`pf*i^JIiO=<$9(u7G$EPuSMeG4MEuC|bxWzouJPU*M!j6H zXty9gj|5o+pOiEdUrF`q#1MDPiHC1&YyK^9Fz;`2z?7W|@Vi?t73`f^<3o!ET)B{T zB-MN`Mo#^Gqj?>Is2{#Ni*zi}Fq3e78hF<^@wDeOG`)izP?-+Fe`JIsnq^6aMtQRXt=a>*It)K)r6_s ze5`q#UihglfE}E4^055EaoS=7{!5$cPO~_(TCLy>W8QrOsTl%c1?0?G@b>Bu>NaGl z+A6DBsj7WejkTKno8SC>p=Av28esJ|K)+(cye??u-ooO6le{^FXv$QZC45SZ>5_|APIQeJ~g*Feh9uHeK z4oM^lpej5T)Z~jQ)zLyN^(5q|)H}2;zpvTP{9O&G4jsaPSV=mj`CvV4rSs(Z*ACJa zH>-kUGvfp&Fd_hyUqAYbt!)~ZP22O0aj=LL_DuxlhM*ICj0c|Mp=(KAs7??ZVoKnu znrIXh)H&A1-1SAx`uSH!xQtpo!@?Yjw!^ja@u$;SUO5?jcn<|_0m-`7&Q1<%Z`Qq~ zd3%7iHTrmD^;1S7@(79M_A6>VC$GPMPX0Ptp#S}F7f_|>XiB;BX>&_YuqS4ei(P$H}}Rv24@W$IM<-|i@clfw8H^7GDCq}2p^`=KYf$FuJ<%QVu-ZY{Zch=fREAHV5qVK!}Sjd0bLgnY&_tyHy$A9U+cqc7mTA!8w z7E4L)kK!|wET$IknP~qHZ=u{hbMTB(b3t-HKI>^8Zss-isSaZb&3Qtl2)n z?Fb!9iPARh`PsRYlB_)jQ_F_$iBIp+y7u5K5Mx3>Z<%rq*ciU)9qAxA2?HjT8)j`k z0(rpnSF9eAlaS$bH4>*D5L9XbZ2)$wAd`ezfX3W6Z{?w;9OGgX@%M4}?HsZT)Mv-* za$a(j#JI`y$7QtfAPhbEm@he+U}u(&F`tPrBa5~*%OmX8=@k~0&P+3j&eORE{Xb+EjuzNF{mEnK;XxS{bN`~rHvbPC7+A7P>B8N~T)-POg zoSke+nuA;K><8`02JLjNbot=ay9-`MMn%8Ei9Ir_bXF8JFwaUfW3ANV9cHWbm%8n9 z(zZm7*aA*deDwvjixht5r*EQxquXN_k((C^5At0Nm6}xK>UBPpmxt@wH4G0Rehn}$f5fuWx!Pdtp+ldQhxl#{~iyJ zd}{p<$qLUO;*BQz6!n7m0bId~+Rf7R?%%tl@F?%E<|F7WNlbvvLA|SK>6Irl@F(sA z8tLe&ToR+P-JNL>`tWB&?09GSZ={b27+aaeBE@#{9pbY6Q?QgmB=29GgfVUfIIxB@ zEl3<5^f7-%rdW#qO%2`Yf4$yMH}f|X#DgkS*E8?A$cT1NDfF6vO$8Ii6<+^>-ZUgp z+V7AV26D+28b@O;dY~Zlg=z=;?kYF~96kAy&E>V7Ns6^DzRvJf62>qm=M29?v3jRm zD)_QcXVb!%@fcD;vHvP*_-&0ye+-AX1A7j%P}H|l!SNU61^^Z@u5g^`bNG`%;o^6U zx1Ae1zx#&J&Y8rU7;co55@Pc4o+cT$p1rvJ=d`ciM`o3p>XqEzvx;Vd)!mtUF803h-kQk^%P^1@=3fBsO;%WJjq+;Pi{~p> ztX2LBpJKr2-RHop!>r~PJ)Ct_vz~CgtBcA3eETk0u51X^)9P$jd{|0e;!>ye^I7-T zlg!)j)+||@pmGZ~_=km8pZeG9pl(R_H5UQFXY@~nCm z9Yr_6bc_zgCM8aE)TzStD8^+g(fUEvmqLH7hZLZCj`pp~_*0~>AH9!LlW})QGm-`< zXe8VHuk+s0-vCHassuE(8%`)mLEdd9jJ7pLFpLN6R*qA*7kP*BSQTW50nSNwA(rF1 zyvpnyASJmOC*KKgBOqoFpPL2Ju713Js9?i~l1lf#b5Yj7t-hWIORcYW@xiM6KPuiM zj4sa`o=5_mQ9K<;cQ{wk8TZAa6a9YI+}ybRwLlZR-~Hx~I=yZa3ZRZWzm9!@ z5KV(K-oFsnX1s}MLl z9>gZ9oi3e;K{fwQ9AWv0mH{DmH^^ZsePFsQ4_X;N>6^tGMipoI$fgG zxYQX*cT!<**;fC(h%>Vv=Nacg;;^Pi+}(zV>Ob~IZFzvbX`;LAC4DS=@a6ocpML*}_7)v9j_=ieUg2Ei$v06jwjR3;j*Fz}o* zlYbTgNN52nN;DHd+1&AyiH3d{U8ac$!y8@U2GXK%?eIo@a?aYX6I3M-DZWjdMPPVI zE8CwF1sAI*r@c>cYD$$w6gg%Jm5XBU2VSkur{(^P`Y{&*m}K9#k)A~uk181ZAEw7u z+{LvchPg%)T^|LbPa7tzSc=8G90PU$BzJ#DPq05WKkG=^Vo>yvg6Yna6LPQpNWpS< zbHBzX2y?s`b zqSgoBCK>5`*|=j?P@@BUUlTVvy^f+`cL3t%IGO!xGB`Sj z?{F)w_8sRfVrphArI|4lNz7z`k>EcS5k)+kB9(#zXgl5`4n8WZUK9V{GDM zSf_-D^NkfRf*;ntoy}5hhp#f7*y2+Zy`w0;_p*ukJ4*)lkxl{R)}wAY58)yMXz^Lp z`gl*X$!pT-S>!T&NE0>t;C>E5W3t5f-sDM=7EKqB;%yp{7XQmr2XgwwWQMJ;j z(!7k6cVk2Y0#_)NtsyRd6TjJhkG}Ng=R9%a)twnV2h+D9F3Ev`hkfh-^4n^b*Q+9U zoH*tyFkc@Y<3C57iELyA3|0Rt_JL7uknjD*w@|6ApYIMG7A4pYVA_+BXJB4fw#io< zxe#{U$X-RximXdjF0`Wg90L9LQf6t-snww*??`rqACW3?cVlNKopZk84E!(N6~H5F z05U^=B773qqfu;5XTaq#Us7aj4HG6Mqa>FLY1T7IFX91u^touJoq8eZyEpfun}@Cd zT*%*(%HA1EKl%j(`$GR=;7#7+Jrj%cg0C6l(#lv9bN}@*pI|+m!;us2jO4=__UY{Q zCYnPKf+A~Ykqee+6(sIuqPG{$8oYgW2xvAt}OiL=a!a&csqKNExq?DUj{+MqzSxlLf*e7{nG#8 zCp6v;g;lGXePF@9#V6l#Z20NO@5*0e<*95Z7x9d88La|EozT%a%eUgh&9D3w^#Uz) zPP@qltIC#(vo%g>>;i^qv07sC^Sz8=o5bf+AQ%3+X)-iyn2=PydW5R;$d!(U!C>HElQiC7t&BIO6#x>a-i2oCY=kz7B!=TJ{F59c)RBtICYXj!Zgj@ zJkilXMkv~(8oeb4iqn_XvEsKNgmfc}GJ{g1 zgtu4uxzcc7>gB9`wy65S=(tZw>1VS=VVLuiRvJ8{t1FaHv1Zg3)Vi>BI2K>Sssvko zPG6?ICGqU1SW7~4>FYFS{}J@hqfFWQ!$_}ygZ=OG&7Pa((ESmX&GNiGvASe>P{r?S z{Pv4JmM&M)?hD<61$~pPz-g&uf#EN&MWo@+!q^ldwGM>Lqj@*&O$=rD{ql7fC`3s4 z=t6s*TxpDEYvS=-*zL9y6|HH97t%q@RlF*RW?JOgntPUo*-6|stOYFAAbpj-uN<(1 zqG%P#piE~$HQ0+97@&~SeRjbO=652paj!I58I^bA4US+^BODnf+fSL1(&GA0dvi|yhK zXq|v#d4BBoRiaU0auPMKkPCz>`kJ0p!or1}zXC1q-J9D-cBHWd3oW*cb&BAN zrq2;B;3M-7>u_st{6PB7Y}klbP7FD}Q@Kv|vg1s(kt45;!9dBZ-dH?>qm3MJ35yyRMOK zrhWyIg`G{I1Y$BE%F>=Lb?yX6gwi;3JoKB%e%$Yr*)XkmLDw6hZp@UdGsYIFo>?z05hI6(*M1-Z)11)H7p%B5bd1)BdJ#hChhuN+Te{_8_J9bVPE`Ar?B&y*rmauTBNXdx z4N3RMBuYUz?{EapI}+hvcn6PM@7no?Emwu9L|(HU48?OjWqz5sW+BlkFn+jZU_cm| zIQj`gmB#v;FNlzk3j#EmLoP1u_#A!9;@aF~QD^%}3@QlZ+f2=_8X)ra(-!Lbz155%MkF%(_{=b6zUpJR3O~Jrg zu2{xbYk(>>IfI^`LfvP9(ZgA5FMlq<>}T_r972pc+bC@90}>Ab=fzli#7kZ+yll=^ zs<8z&0_^4)F;rHQVIf@*B*SF2H3RFIQa(*Jaw$!S#f|6ZOJ3`*Jh>O#c3*jmF?sWq zob@)$waCpsQkzewylzH_=_(ri^)=E8B&Wr zo57U(tjtrqOe0kCVo=od99Q**5*GVHmV2|gVT8K)mI_W(y;qJiuT2e(Obm8R!Njj3 zo;9qDu9~colp=mcLtE#+t|B^zc6Gr9ca71H5^>?#>qK>V1^^sqjbOl zC6=FaWSO30x2knky+e`ai2yYzjsVs4Zq{a3pVrbdIPUnj>fPL6$as6`pL7xyb)Kha z1E%Nl<#XJRiu8RvgCUAv;z4@HDPg4qiK>aNBwh5UAm&_n>*wOhh3oLBpJgy_6v=Vz$rU@T+f%r z-%xiGl{Pbgv0V=PxO1r{nhh>=RdNr?3qMrk$2zISO+=8yZ+nAl_tGEex{FErWLqf~ zwvAw_eXe)2Z9Kh!ED|wn@1(n!+EO1kS)jk{5vIaRQI*l0g5!z4^m)L0YfSb%@ocgAE^gWOTk7VrUf!`y! znCqMeD9jBGh;*LDtXGzuW}TOw4vrA)mJ#2RUTJ1<6Gd?xH*e_Gp=$BXhvEf>f6=hl zjeqCL=((%#w@S3D@9GV(kfLffdFM=j^LDvMGxo@r(AIciO^06cfFJm7_WnS)9~pTi z$)_*MAzT+rn2NUJQ`$d&@+!%C{0bVqU_+3h(4JWD>9XdqHiWD`$1pvZjx2-l{$R9x zCyHCCG35CxY|n#5=rQxllLW>i%4@K|XA-}@{;E=EVU6TTwV&CdauU+bkK)puUuN=Z zcbMnXwZZ2RZ)t7=r0YYPBi~y8x%(lykax)X!->lfRu1JM=;OI0`gMqa)-Tuu`0Axr~dcSJ=%YHEFrVzTY;I;vC|kJ8Jq`z4{Xy?gO@r0QUh!N#wOVWlx5G|9L(v}at8 zc?Jx17^t~ocSFm=8nctS_B*BYy$kz7)F}1mGLFQ86eGhne#?&2E)zsMX}rBN7xL|( z!Jx$v1vzMpp4)PDL8Augdfe<-9IQ7n0x2t3a-=$}I~Sne1Qv)o?46R76|K%sZINmRkjS>2_1*n4iH6Q93TEk=JXiRq&qGP$sTH}j(jP3_ z!bFF@3#F(i>b3=Cl*r9z=yS{`vKlLWiEO>)!L67YheG66irEkQSqt2^7#6!s(EhW# zDz8u1tKAblWUi@fsZDcF45pMKtS!;M(B7ym5xvlkt7R6Ym)^Jp$P*fsiNmlo;lva?>vRL7+y%44?ZdU1tfwnlDWRr z!osbP={`>gr5Z$rsMJj&2=Q~dPaeWFJeCy} zuPka90?a~R&&TmLQw4i1SB0n{K24?7&XA)uxj*iiiw9oYwrjl7qJP5NYiu{J6E7-M z#@jVyJQPV8vEULUYilCl=Gnr9iGhJC5HHuXq@d6Wu7( zP)Q2EP8i~uj>h9Yl$f%uY#5T7k52UGwx){tK~>a{Tlcvh(_UFlt{@RQ86$Vdn?tqL zDAi^zhv(B$i>!bGY`VJGqwT}Gd6%O6f+X=4M1RT6bUD#9GV0{@HM-0lb}5sO!wfbP z3!~!*%jF15^v`FBW780H(jmm_LgJjwZM0T$o*>wkFb}~>1nTFM-M#T~pS$CbZeMn1 z@60~e^}DELH^xR=EN+$}6L|{@#Ur@ALJ-=hj#zbXlU0=C65ftUXu6Ul&ax9Y6og;} zqX|ZGaM;-Tn&JMPPh9)P*r}$(-oX0ct4_LJ)cQqf1cORL3MDH~1j!qd?!rNt`>Y(y z^gI^}Y0oWyaqhEFZF9=81V#o(msE?@)T}IM;QB)TX|`kdgf-={K{h|Y(riPYQd-l_ zoGyd365QLNlc)SD#jCGh>q}a!1P*U|iP_Vi;?%pcZ(sOz!UWWveWP@Ck#-GAwv?kI zgBP4}Etz-w)trEQP@u(b;gy?D)b3h;M=FAu+oNfhXKWtJ^?E!-Mc&05`%OcnBwiKr z`~QM8{;Sb4&}^~u*P*w#`gBC0-m*8|0vN0WXoCYq%5+&c)-yFlkgUh z2;>Rk4|U-naes25?I0v`kKhU}*ZU=M|Z8@0`&mD1dsC(Y@r^53=!%_RM=7wpgP}3VB`0J(R zVN20m9=6Zy(|<3QpPf$Y4iW!iuup%!+|cLsV-&ZNuCe&^tRoHHloO2xd-F2V-@uDZ zYqk}vIHm*A_sY8{SDS2C?EdBp!be!Fe^w+F4W*B?P2m2a3G3IPk8kJ4M0<>NlVuS2 zoZ_!Jwvja)=`cN!#cBTYJ;U!m$(-gU!O^kL>4Uv66)Wa=Qj-0Zy2o{Jf^F*B!?3mo z_Y4X)jmn{tAla*mq)HnvjC-Cz;0pf|)f^}Lx+(}p$d@7yxxiGNT!q?*qNr|0yoY>t7V~4rfM529R5OZb_Dyer`f$wCtB$ez1w^l?menBnQ zxWDPoSoB2bj^wE<&Lv%*?Wrg&^-sD`ok90{gV@?fcjnCl z_2G6)Gwa}_Jn>XggLqt|Y3^z;GsVr=LuZ$3Gu9iwwXwu0!=G@^%*fR`7Db}sUHy{H z8y!l&6O9S&!man-Snq#DOE$^k=JP%~o4z0*1Hh|a{Bja<-Xibo6Y6oi$#@!G>pzLr zr7jhY%!745vLSu_zlZyF;=sCr|5G~0drPSV(|n=sQPk$h4~q~nT-M(g5c*w}<~?=c zJyo>bl279$SQ7p50^=q3XJ@`j^Ea=}+`(5zP82 z#tL7{U!yUai=hruu&Kj@97-%{R#c2+F{J`A+(Pp9Q7znPwl59refArTFnKD`Ou5;IVu)R-{!8erPWKB-BxBM8|cm>@QqAHm|sBL68{Gp z_=!$lI$9fnhaHVreRvbVyDXdRE;yze`|b9wy3Y&m^L8flF!8DdmCnX*Y}=h8+Fn|l z6i$7oB)2@|C+ERkjvwQRx`X{9sHk(+07AU87NOv}MaX;aBU&(5LNchy)%Kxpf>3vN zfXSp#8FnMgpA(8{5un?-=TRGUQHJP2MaF6uGqPnJA+V+#7<`FkG4UiC|K1e z8df_dC{XloS+2@h3fMJeeA?1lNnhh`_k-#+lysAzqrUw5K4%(K{97e)@UN*JiE48I?)%b%&Tc* zqF2M%sJy=83`r^37NV7cU^|qU$egUJLVgT^#i1YwUXJS>Thmm`j1DYW$j-OF~Sf7}Z?Q?KIU+YD@He{;QV? zG?{aBTC=)LmX0}LzdUL$%2dWRf397$5MmP*?+r2+6#Rrvkxvgl)(2Hx3d80OQoQH- zPiLeqb`p8dGh?gxt-+WC*hDNOIyq)<3_I7z_!%(?A|Kl#zSQkiJ?BT$Omu!z1ASb0 zZ9Ma*>K&o93*klS#ANI2`)hAnI}|cpvmvV?&Bqf(BoLa5`Qb?Hc$~`c@jDDRhk*Vz zU*;v3p|5R^VpW9H&YzZ_|L5~u=I#-J%tAcU3$axSN3w3MwedYR2tXj9YFybGVA|niV!*{#M{PxMs)E3JY>uE`9ZIaPDqn< z&08UeJ~&)EF;Q;j+4@z0;?`Pe=UC}vr*=j-N@!FGq1drjkgo~Wc@^#87A7NBF$+~l z+&grJCiC-i?ZPighsGQSwtCZAO+Txh#)!6fl_;;}KTv6BFHZ_JB~l6gfSmG7_n1mU zcSZ>~mvMf(3RE9Xqq6r^%Y}9$tc=?X`=)&$*o4KT{&SxYs5qtvwZn+jo`q{l?Crsn zdpmjne}qqyfxZWD@t)hGw2}fS288>mJhsg@Z+s)mfO0;Q)%d1W)_YPP=>UgfK+Ta$ zTGsMQ#A+0Hu_o7*(0bQzY>7vvUpn}S8iXYX*z7K2@~F* z0jJHe*+GVaqb-%I;gHA9;{LA(nnm<^rL?t$Wm77w4E0Ke(seHg7=;!fX1~-n3v@Tl z`w4a$XQeAf$G$Ryvjo@(kS0x$x*>Ike>A#Pyp)B0zbp!pXhxu1Q(4%R0kIA|dZ{LZ ztAl}JFpQ?G(+C2&dW%u?93-3znILSr=fe;_c z@33W-<*lD%C(m&eyyOM|ieIPP`4?Qpe;up)yHwp0z5}N1BP!)uul0%}oad&78aZakHb8x(PL8B5ISE4Cdfb zh>+H#Zj)K9i-FyGIe$Np5a&_+{N3gBxq>UPQbwKco*n!HBrtsY&C8Kzne*N6Twu4k zU453bLWWK0S^}rh(eYkeU8sRo9+#1&3e-1lk)<<}Rm}-)0A^Kfeqk<0;v+paPKJ`R zM}**K0b{`<;RB#^A1pO;RucUROS6omg+Hl#oXQiaj5(quk(;-e;8}9gd80MBH)Y>! z;huKM`sWYAM}}Rik*bTB{D(u3NhpN$~nl3_y zu%}_wG!1+DtJ(V=P5bT2lz;VCW%}DlOL8m=`Wn5Ns`%0~2JQ~rRSxN)-LHvP7T*+< zGA|NP#hnb0OurzV2o++u=CN|f{_|=}xhPmb`zx$H#p*#2IlO+6WI_sLS8Tbw*d?Qo zGPUiUUlujIq(dUeKr-`DyH(!c<*$G*vfzsoLX+Zo$beXe#ga2CXO%r za?_f#23A;!XC$!)|IG{w-KX0bW@eZX<5(mYDm&xOQy|6(lDDDItNjSP(BX)t6xCU- zf=kEpxBXIT&G>Kne@~2LGk4Itd`!7DR0lPx6Rt<|4$N3{5?=_Et2Z|3;_uLE2DOwk zDaDWY!eg8UHn!T@lVT{jx6Kom>q9&bOSit|BvnX=cplrY#qy6PucEeLG@K0@4$*#3 z?%RH2*t~zUoC&vbOEKRh=Y#5$i@zi1LQb*`#{+^&g(dV-qlu7!+)qwI%$* zA-lucifqj>eR^pDo3kPrRO4!!=pUdc`kUH`!!oIl5)Z5wKIbHT!6EZL%X8i82gRk1 zlK#LLKpfr5;+n~U5*UF7735Px2;dpAKvQKjxBuGRJaMv0Wh@ql40n4#=m)LwPO-_= zw(NYOzWnCk$h5gFZCX>RB)8Lxe@#b6$2vOS6(}@XcBdOb<);%l7tX5GCOfk%^$ulg z?^6@0On-2c#ayY1tf+E!1AAE%E^8~eV^e(6wE{&Ps!Xecg<)#^X4-f~cz|7kfnOXj z{vxL_(KZWpr!g^_8!IOGfXbA39ITDNS!=)R5{;#P7!<{nt1?Qaadq=>7C;QZgdE^4 zj(k3UqDbS>-EOx1ZoLLUo(e2X4qY|9+MXt(XlKs(VX62mtGvWtZz(M=If$_R!9!(i zpON(nv8P(JrRMUT?__J29rHa&<~!pSdqFu_KAGNP?qILiR&cA*RFTnFJ5d4_TizUy z#U=|U7qIRK5N}t|rjhBH4q~ivmfGCFcS%5l&>WLLEKi}__PpBg4-Mzcz!THZ^;F&3 zwDCaBT2l1|G>L~F!OR6y2Y0iDB*U@JEQX!R7*i)CDYyFcwB&qUUpv-NaTw3& zfZZ;G@6$9HVRtBtclD4^CTpHUR9w6bA;nnyIDmXrL3vOGtoK%aZo^SU!+B*v28Fq- zhNHi1iz@F<-YedfNK}eT4`dEIUzy9zXEElOZxLN>C)M!gd_``0y@)lX|7?qo{m<}| z9!B_VF|cT$uRfEkLi*3*TeXsegtp}#{aNpjgJ)9P-gNwx$@`SY7#FtIVa1#m_#hncH|c-)n15Y1&L8S^Uax%i!)iWu&Y=GzpYCg-RMP zEToxXl-o0?>W%V~qd#bN3=kYG48A${7EHENu?NvEJBI-{aif`&%go`H9^^+&7?);= z+H!HxRvP=@qZa<$vI++zywNzy#o%O1LMl+?N=R_Te>;&u?5f8r({?*kaBzkN?ONYB zGj!kc$13`oymJXpkD3y`;fsdz(27vYQE#zwbVrEwdih|lnp~XHg~744&CMsvt*U|E zomr$Yb{YfW*KFiW%Dj)d`1s_m7nVs*ES&mCKQLsT_8|WFC%d4>^2|&qk1%fpur4C9 zctkrh>jDR^0+5u2Ej=Z}d6h%=#isbXMoPR^>5#Y6d}iKg~2Pn4=sVOnkt2OPa)0j5Qybo*!z}Ma?5l zeXigMQ*kO1F7+XI%g(q`y?99fZ+qmee^h=oQC_^Px| zx0Ne4$eowGK1kPRMs=rd9CnGPSQtdHXpy6~@k<(i>wRjvA3X+T+IL`T@mmoQZ5q`+G-?oO2?Mivj^+Thi+Lvv2)6@j(cplez(M}N4#`Upe z@d+2Fi=z$wr5viEGfeBB2S=iKIKdjsX!%L?v zM5w6=vWopU*zanZoMfgeA18i1#)PpcPimQBuG(>xttJTARP|hD+>9MUleT3E;x7bX z-e5=^+8*4T%`&X22J(H99*7uv&{!{k&e#cXDP4ul^-Yv9^JWG8u2n{mJf4g4#m`x205O-Z%;xc-TgK{25^PYUx_EQ(~F(V@*^<%KNau@Bg;| zr@TH1oCWO_m5h(-`jDzn8z#Q4sLwKlYHV+04=LsgYqWfMZ*KP1Tr>HFS$wEwqzwh_ z9=mVz&`)@kljYaiJTl|AHbW00-m@H|l{v~DN!n?Q9&=`kv%|{NM2tbh#%BVX&J1+Z z=k!x|=qDm2i|$ujzFGSWZ`X+{*J`3%2z-*3F1ZDwmaoa$cY^Hqw6K z<f)|B|Kx~yfCzyu+{h*gR~vZ3_V-$sL2+ev?~d>leWc}Zzk+M72+TD|;@r}NqD z9CKrDe0VOs*x@_|UV)X$V_Cd*wz(!ozq15x-~Uo~`^fIZK2t>R>xQj)GoB8>;J`ay zva5*3O6Ca`H9j9agb;8N8vvc4o39fi^G^7}+T#-eluATx3kC9EQR&UQf3MQrWp&ns zi78;)?d_8SJP#HN0o3JVuH-rii=llK@PW3ir&e<`Wy3r#h`gN2`G8n_<${T3OpIm2 z`~QF|;B=d%*EBs*Tbq%cia9-~8w$#nZ-(O>bye%PI(8rA%>sW~WG9Nq1Sve5 zFkJgm*@GTDLAA@iGOdZ*`wjLqSfiA_8%QOPs3z;3DYXqI+7^HceI*vM(hzd4!q&46 z#CXZDm9b1v`@r>7B5!|hMW%4uq{7OiIpVqd>UB919uj`>eNV0R-p*I~i@3ed3wyCp zdolS<@9l_=Xir$2lG)pUqMRsix=)Mj!S?2~mb#BNf-h;>ixbt~KbX;Y=r;8V2?&kv zmPST?ae)&;X{fhf;eEK7IIbQa)r^YSQ4>ol8)@~HHWIJV zRn+#qceNCnU$v`8NJ7;$)bT@%N6R*ggy?3qfv0cUS@KU}V*72R4r6v`KUW1Qqe>N)6Ob_{!@G09V;z41Mi0?(X1x?J_;Mw7XVsa|hMMNj1M1JVm+I+tW^@ z>c7e{`WJC!7|l6&OG$cTbks8<-z_9rkys-4l10TwUizuMGS9WfT$(pGllSYNi~>G& z>wldH6S&_$(|wms=WeLQD7wSIt9n2=>B;lPo^EclbOL9}3F_^t zw{#K2ycM7il7lXlNFp5z;ifYFYWdllw$QD$%K$=$cn zH?ACnvE|#mwZc^gP?NQdc#iL>90Oud{yHbYk|Ec4Rp%xbwdzlQJg4A!$Ko1Vx%^S^ktvsSh^z?6`g z4GAb{Y8JK=b=_T4`0ye_?(i#2;_a^Ub zUG3|;cU(e($~~?+960P^GnQxYAlR7wjkGjl;Y0)O3s(WkhJ|owKZ)kzjJ|EH_&N`*i z)?{VQ36`y>Sk34kt+m<44>W|0p*zkJ&ZMe?MLCbZ#Ji4-H8_!k%oTYf7EwCp$ZE2K zSM8}20G3fT@uS0#JD&7pGkqdgpCc0YXG2x$PgTr1Qtfi)tK%rw=J#LL(tv+}G}IoI zW{R$T>Rl9v7v+?=$t#tLunbeC-wRMnM9loiOhc0-dvJkysBV#M6uJK$eq+|IG|Q0u zO`-%cKsXC#DP*8j3dTkDS&d*O6yXw)O>ZHEba@c*=W%p9IISE5E zsGI>ltfjrwmFV!B&~-&$fn_z*@YJ7xwVw~_Yv1)Id>fw$T9{4a#aI@^qZ6c0i_&me z?m&_%wmV9Vm5s#=&vB5a*zAAQO1Abu-*jUs7QZnLKhIa&1^TN+Z58heF=S-apb74} zi6ZYh2YrH&=DTdv+==QDjPovqC6j|o3eIzly#uS2pcC$&Cz%U$Gv`e@`lG!c16NN& z_0njp47P1v?-y9m+sft=S*m%>wd6W4?eQ7upHrI8XbPi7>=V&&1%CypM6C92U@(nS%%rpmLUF~-%M z*Svy-nzEiz7t)6P<&OOMS9-0);zx@0F!y()*DBreq48pe`nBN}zjDrn&HG0O?L%Y5 z4`&=HmkB9?A88!HdV6arkzR=a2`5_)?-WzBN(^(!%>)?MlIa2Z}#K?chz@QUooq;6I=PL^&-6b5@B`0VIr#T2r<(*kqBeGL4wM=;`213I0oaT&uUj$yYdoCJcI{@)I?lP+T9jtsv(p4lhANjk(^tM8 zWAh;q{kw+|Z>DBej`t*drkkk#clSb_T}3^YQI+=YiMjMJ3Q!tRTiqywSJ_puLZFA% zKMeY_yGC`8arazb8(m3&etu6FV9jLIM8RxO2Jf>~ljymA!p8~eW}+o+)M_n1)EL2R z^_Xmz=o}zS)-RdXTBUmVgYdI7b z7y8#vi0Bn8&9uq!#A`HdBb=?T1pRdMnlyORb%jkoxj#`-8}2E8HsxuSqjjBhU}s4* z3QuS~5I=NvAzJ42JK{-S6Lt6?7{c9tGIiJm?jJ2R1OCbv(#ad@+8^?rA6*0~isI^Q z$Z?K~ouh|@=FN)Nbd{I|op?m+i%g%Y#i21mv6AUG^r$T1WKOFu&j+_mNNt?O;;DG( z1k#~T%Cp-Wya<=3##_vLS7ZX;i*Id@sCIA`G_tg*K3BIWc%KHy&6=DzY$jAz`{lwf zS4IeEsH(BilM5_Bg=ez7*tNvR9b}m0#nJ*-oTHE?1}N*eQryVZu8~>SKBH9Wa`5Y& zGR@r)Zp_;Uct(AzVrr+h>W*l>0@m`#^CQiFb31*fCf$sNfsXo3k~;R7>K^6j`uCJh zk2$H#-#@c@Pbz%*>;>U7R%KGp=HUtGUwP$t)kIa<`e4VEn;K!l^4syHiuVWG?!PuW z$(+v~BZNs50e7v?lQSVO%<{+h_tX#>fZl;2N*xA&e&3D-UR!#qE=CHknXGfv@~mpk z9G>Q&Nx0|M15U|@~BJH0U+~!I4c*=C$sHN$in4X3dA!}`eDe`{%0sd4hr{7fon1;hC zcg^qs(EWtQX?q~EPOuRE?WNcPnCi#TwBe~kdY!|Cc=Hj}%hxNwV|&fSRJ&%NS3y

l^kwP!%h+)4SG*&(19(v~*G8UAbHkZv+Ze_T? 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

Yaf%=>*>K?o$e=Ej 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 z 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∾zUpeN(0l8yC4~_PmjcI@&OW`jq0#WoQz$C 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 iG4-|VH{O3d@Ba@O?YkPU({oJ#0000) - typeof(ChatCompletion) - .GetProperty("SerializedAdditionalRawData", BindingFlags.Instance | BindingFlags.NonPublic) - .GetValue(completion); - Assert.That(data, Is.Not.Null); - Assert.That(data.Count, Is.GreaterThan(0)); } [Test] diff --git a/tests/Chat/ChatTests.cs b/tests/Chat/ChatTests.cs index 9635da236..94368169b 100644 --- a/tests/Chat/ChatTests.cs +++ b/tests/Chat/ChatTests.cs @@ -1042,5 +1042,22 @@ public async Task ChatMetadata() options); } + [Test] + public async Task WebSearchWorks() + { + ChatClient client = GetTestClient("gpt-4o-search-preview"); + + ChatCompletionOptions options = new() + { + WebSearchOptions = new(), + }; + + ChatCompletion completion = await client.CompleteChatAsync( + ["What was a positive news story from today?"], + options); + + Assert.That(completion.Annotations, Has.Count.GreaterThan(0)); + } + private static ChatClient GetTestClient(string overrideModel = null) => GetTestClient(TestScenario.Chat, overrideModel); } diff --git a/tests/Files/Files.UploadsTests.cs b/tests/Files/Files.UploadsTests.cs index a53c445e2..4a8517d7a 100644 --- a/tests/Files/Files.UploadsTests.cs +++ b/tests/Files/Files.UploadsTests.cs @@ -65,7 +65,7 @@ public async Task AddUploadPartWorks() { OpenAIFileClient fileClient = GetTestClient(); UploadDetails uploadDetails = await CreateTestUploadAsync(fileClient); - using MultipartFormDataBinaryContent content = new(); + using MultiPartFormDataBinaryContent content = new(); content.Add([1, 2, 3, 4], "data", "data", "application/octet-stream"); @@ -88,8 +88,8 @@ public async Task CompleteUploadWorks() { OpenAIFileClient fileClient = GetTestClient(); UploadDetails createdUploadDetails = await CreateTestUploadAsync(fileClient); - using MultipartFormDataBinaryContent firstPartContent = new(); - using MultipartFormDataBinaryContent secondPartContent = new(); + using MultiPartFormDataBinaryContent firstPartContent = new(); + using MultiPartFormDataBinaryContent secondPartContent = new(); firstPartContent.Add([1, 2, 3, 4], "data", "data", "application/octet-stream"); secondPartContent.Add([5, 6, 7, 8], "data", "data", "application/octet-stream"); @@ -182,7 +182,7 @@ private async Task CreateTestUploadAsync(OpenAIFileClient fileCli return GetUploadDetails(jsonDocument); } - private async Task AddTestUploadPartAsync(OpenAIFileClient fileClient, string uploadId, MultipartFormDataBinaryContent content) + private async Task AddTestUploadPartAsync(OpenAIFileClient fileClient, string uploadId, MultiPartFormDataBinaryContent content) { ClientResult result = await fileClient.AddUploadPartAsync(uploadId, content, content.ContentType); BinaryData response = result.GetRawResponse().Content; diff --git a/tests/Files/FilesTests.cs b/tests/Files/FilesTests.cs index 601ef9d80..e92c335d0 100644 --- a/tests/Files/FilesTests.cs +++ b/tests/Files/FilesTests.cs @@ -3,6 +3,8 @@ using OpenAI.Tests.Utility; using System; using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; @@ -22,6 +24,18 @@ public FilesTests(bool isAsync) : base(isAsync) { } + [OneTimeTearDown] + public void TearDown() + { + OpenAIFileClient client = GetTestClient(); + + RequestOptions noThrowOptions = new() { ErrorOptions = ClientErrorBehaviors.NoThrow }; + foreach (string fileId in FileIdsForCleanup) + { + _ = client.DeleteFile(fileId, noThrowOptions); + } + } + [Test] public async Task ListFiles() { @@ -40,8 +54,11 @@ public async Task ListFiles() try { uploadedFile1 = await client.UploadFileAsync(file1, filename, FileUploadPurpose.Assistants); + Validate(uploadedFile1); uploadedFile2 = await client.UploadFileAsync(file2, filename, FileUploadPurpose.Assistants); + Validate(uploadedFile2); uploadedVisionFile = await client.UploadFileAsync(visionFilePath, FileUploadPurpose.Vision); + Validate(uploadedVisionFile); fileInfoCollection = IsAsync ? await client.GetFilesAsync(FilePurpose.Assistants) @@ -135,12 +152,14 @@ public async Task UploadFile(FileSourceKind fileSourceKind) fileInfo = IsAsync ? await client.UploadFileAsync(file, filename, FileUploadPurpose.Vision) : client.UploadFile(file, filename, FileUploadPurpose.Vision); + Validate(fileInfo); } else if (fileSourceKind == FileSourceKind.UsingFilePath) { fileInfo = IsAsync ? await client.UploadFileAsync(path, FileUploadPurpose.Vision) : client.UploadFile(path, FileUploadPurpose.Vision); + Validate(fileInfo); } else if (fileSourceKind == FileSourceKind.UsingBinaryData) { @@ -150,6 +169,7 @@ public async Task UploadFile(FileSourceKind fileSourceKind) fileInfo = IsAsync ? await client.UploadFileAsync(content, filename, FileUploadPurpose.Vision) : client.UploadFile(content, filename, FileUploadPurpose.Vision); + Validate(fileInfo); } else { @@ -211,6 +231,7 @@ public async Task DeleteFile(bool useFileInfoOverload) string filename = "test-file-delete-me.txt"; OpenAIFile uploadedFile = await client.UploadFileAsync(file, filename, FileUploadPurpose.Assistants); + Validate(uploadedFile); FileDeletionResult result; if (useFileInfoOverload) @@ -260,6 +281,7 @@ public async Task GetFile() try { uploadedFile = await client.UploadFileAsync(file, filename, FileUploadPurpose.Assistants); + Validate(uploadedFile); fileInfo = IsAsync ? await client.GetFileAsync(uploadedFile.Id) @@ -316,6 +338,7 @@ public async Task DownloadContent() try { uploadedFile = await client.UploadFileAsync(file, filename, FileUploadPurpose.Vision); + Validate(uploadedFile); downloadedContent = IsAsync ? await client.DownloadFileAsync(uploadedFile.Id) @@ -368,6 +391,35 @@ public async Task NonAsciiFilename() OpenAIFile uploadedFile = IsAsync ? await client.UploadFileAsync(fileContent, filename, FileUploadPurpose.Assistants) : client.UploadFile(fileContent, filename, FileUploadPurpose.Assistants); + Validate(uploadedFile); Assert.That(uploadedFile?.Filename, Is.EqualTo(filename)); } + + [Test] + public async Task UserDataPurpose() + { + OpenAIFileClient client = GetTestClient(); + + BinaryData fileContent = BinaryData.FromString("Hello, world!"); + OpenAIFile uploadedFile = IsAsync + ? await client.UploadFileAsync(fileContent, "test_hello_world.txt", FileUploadPurpose.UserData) + : client.UploadFile(fileContent, "test_hello_world.txt", FileUploadPurpose.UserData); + Validate(uploadedFile); + Assert.That(uploadedFile.Purpose, Is.EqualTo(FilePurpose.UserData)); + } + + private void Validate(T instance) + { + if (instance is OpenAIFile file) + { + Assert.That(file?.Id, Is.Not.Null.And.Not.Empty); + FileIdsForCleanup.Add(file.Id); + } + else + { + throw new NotImplementedException(); + } + } + + private readonly List FileIdsForCleanup = []; } \ No newline at end of file diff --git a/tests/Responses/ResponsesSmokeTests.cs b/tests/Responses/ResponsesSmokeTests.cs new file mode 100644 index 000000000..723c3f112 --- /dev/null +++ b/tests/Responses/ResponsesSmokeTests.cs @@ -0,0 +1,36 @@ +using NUnit.Framework; +using OpenAI.Files; +using OpenAI.Responses; +using OpenAI.Tests.Utility; +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using static OpenAI.Tests.TestHelpers; + +namespace OpenAI.Tests.Responses; + +[Category("Responses")] +[Category("Smoke")] +public partial class ResponsesSmokeTests +{ + [Test] + public void SerializingMessagesWorks() + { + ResponseItem userMessageItem = ResponseItem.CreateUserMessageItem( + [ + ResponseContentPart.CreateInputTextPart("hello, world!"), + ]); + string serializedMessage = ModelReaderWriter.Write(userMessageItem).ToString().ToLower(); + + Assert.That(serializedMessage, Does.Contain("hello, world")); + Assert.That(serializedMessage, Does.Contain("message")); + Assert.That(serializedMessage, Does.Contain("user")); + Console.WriteLine(serializedMessage); + + ResponseItem deserializedMessage = ModelReaderWriter.Read(BinaryData.FromString(serializedMessage)); + Assert.That(deserializedMessage, Is.Not.Null); + } +} \ No newline at end of file diff --git a/tests/Responses/ResponsesTests.cs b/tests/Responses/ResponsesTests.cs new file mode 100644 index 000000000..b924df67d --- /dev/null +++ b/tests/Responses/ResponsesTests.cs @@ -0,0 +1,670 @@ +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using NUnit.Framework; +using OpenAI.Files; +using OpenAI.Responses; +using OpenAI.Tests.Utility; +using OpenAI.VectorStores; +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using static OpenAI.Tests.TestHelpers; + +namespace OpenAI.Tests.Responses; + +#pragma warning disable OPENAICUA001 + +[TestFixture(true)] +[TestFixture(false)] +[Parallelizable(ParallelScope.Fixtures)] +[Category("Responses")] +public partial class ResponsesTests : SyncAsyncTestBase +{ + public ResponsesTests(bool isAsync) : base(isAsync) + { + } + + [OneTimeTearDown] + protected void Cleanup() + { + Console.WriteLine("[Teardown]"); + + // Skip cleanup if there is no API key (e.g., if we are not running live tests). + if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("OPENAI_API_KEY"))) + { + Console.WriteLine("[WARNING] Can't clean up"); + return; + } + + RequestOptions noThrowOptions = new() { ErrorOptions = ClientErrorBehaviors.NoThrow }; + OpenAIFileClient fileClient = GetTestClient(TestScenario.Files); + VectorStoreClient vectorStoreClient = GetTestClient(TestScenario.VectorStores); + + foreach (string fileId in FileIdsToDelete) + { + Console.WriteLine($"[File cleanup] {fileId}"); + fileClient.DeleteFile(fileId, noThrowOptions); + } + + foreach (string vectorStoreId in VectorStoreIdsToDelete) + { + Console.WriteLine($"[Vector store cleanup] {vectorStoreId}"); + vectorStoreClient.DeleteVectorStore(vectorStoreId, noThrowOptions); + } + } + + private List FileIdsToDelete = []; + private List VectorStoreIdsToDelete = []; + + private void Validate(T input) where T : class + { + if (input is OpenAIFile file) + { + FileIdsToDelete.Add(file.Id); + } + if (input is CreateVectorStoreOperation operation) + { + VectorStoreIdsToDelete.Add(operation.VectorStoreId); + } + } + + [Test] + public async Task FileSearch() + { + OpenAIFileClient fileClient = GetTestClient(TestScenario.Files); + OpenAIFile testFile = await fileClient.UploadFileAsync( + BinaryData.FromString(""" + Travis's favorite food is pizza. + """), + "test_favorite_foods.txt", + FileUploadPurpose.UserData); + Validate(testFile); + + VectorStoreClient vscClient = GetTestClient(TestScenario.VectorStores); + CreateVectorStoreOperation createStoreOp = await vscClient.CreateVectorStoreAsync( + waitUntilCompleted: true, + new VectorStoreCreationOptions() + { + FileIds = { testFile.Id }, + }); + Validate(createStoreOp); + + OpenAIResponseClient client = GetTestClient(); + + OpenAIResponse response = await client.CreateResponseAsync( + "Using the file search tool, what's Travis's favorite food?", + new ResponseCreationOptions() + { + Tools = + { + ResponseTool.CreateFileSearchTool([createStoreOp.VectorStoreId], null), + } + }); + Assert.That(response.OutputItems?.Count, Is.EqualTo(2)); + FileSearchCallResponseItem fileSearchCall = response.OutputItems[0] as FileSearchCallResponseItem; + Assert.That(fileSearchCall, Is.Not.Null); + Assert.That(fileSearchCall?.Status, Is.EqualTo(FileSearchCallStatus.Completed)); + Assert.That(fileSearchCall?.Queries, Has.Count.GreaterThan(0)); + MessageResponseItem message = response.OutputItems[1] as MessageResponseItem; + Assert.That(message, Is.Not.Null); + ResponseContentPart messageContentPart = message.Content?.FirstOrDefault(); + Assert.That(messageContentPart, Is.Not.Null); + Assert.That(messageContentPart.Text, Does.Contain("pizza")); + Assert.That(messageContentPart.OutputTextAnnotations, Is.Not.Null.And.Not.Empty); + Assert.That(messageContentPart.OutputTextAnnotations[0].FileCitationFileId, Is.EqualTo(testFile.Id)); + Assert.That(messageContentPart.OutputTextAnnotations[0].FileCitationIndex, Is.GreaterThan(0)); + + + await foreach (ResponseItem inputItem in client.GetResponseInputItemsAsync(response.Id)) + { + Console.WriteLine(ModelReaderWriter.Write(inputItem).ToString()); + } + } + + [Test] + public async Task ChatWithCua() + { + OpenAIResponseClient client = GetTestClient("computer-use-preview-2025-03-11"); + + ResponseTool computerTool = ResponseTool.CreateComputerTool(1024, 768, ComputerToolEnvironment.Windows); + OpenAIResponse response = await client.CreateResponseAsync( + inputItems: + [ + ResponseItem.CreateDeveloperMessageItem("Call tools when the user asks to perform computer-related tasks like clicking interface elements."), + ResponseItem.CreateUserMessageItem("Click on the Save button.") + ], + new ResponseCreationOptions() { Tools = { computerTool } }); + + while (true) + { + Assert.That(response.OutputItems.Count, Is.GreaterThan(0)); + ResponseItem outputItem = response.OutputItems?.LastOrDefault(); + if (outputItem is ComputerCallResponseItem computerCall) + { + if (computerCall.Action.Kind == ComputerCallActionKind.Screenshot) + { + string screenshotPath = Path.Join("Assets", "images_screenshot_with_save_1024_768.png"); + BinaryData screenshotBytes = BinaryData.FromBytes(File.ReadAllBytes(screenshotPath)); + ResponseItem screenshotReply = ResponseItem.CreateComputerCallOutputItem( + computerCall.CallId, + [], + screenshotBytes, + "image/png"); + + response = await client.CreateResponseAsync( + [screenshotReply], + new ResponseCreationOptions() + { + PreviousResponseId = response.Id, + Tools = { computerTool }, + }); + } + else if (computerCall.Action.Kind == ComputerCallActionKind.Click) + { + Console.WriteLine($"Instruction from model: click"); + break; + } + } + else if (outputItem is MessageResponseItem message + && message.Content?.FirstOrDefault()?.Text?.ToLower() is string assistantText + && ( + assistantText.Contains("should i") + || assistantText.Contains("shall i") + || assistantText.Contains("can you confirm") + || assistantText.Contains("could you confirm") + || assistantText.Contains("please confirm"))) + { + response = await client.CreateResponseAsync( + "Yes, proceed.", + new ResponseCreationOptions() + { + PreviousResponseId = response.Id, + Tools = { computerTool } + }); + } + else + { + break; + } + } + } + + [Test] + public async Task WebSearchCall() + { + OpenAIResponseClient client = GetTestClient(); + OpenAIResponse response = await client.CreateResponseAsync( + "What was a positive news story from today?", + new ResponseCreationOptions() + { + Tools = + { + ResponseTool.CreateWebSearchTool() + } + }); + + Assert.That(response.OutputItems, Has.Count.EqualTo(2)); + Assert.That(response.OutputItems[0], Is.InstanceOf()); + Assert.That(response.OutputItems[1], Is.InstanceOf()); + + MessageResponseItem message = (MessageResponseItem)response.OutputItems[1]; + Assert.That(message.Content, Has.Count.GreaterThan(0)); + Assert.That(message.Content[0].Kind, Is.EqualTo(ResponseContentPartKind.OutputText)); + Assert.That(message.Content[0].Text, Is.Not.Null.And.Not.Empty); + Assert.That(message.Content[0].OutputTextAnnotations, Has.Count.GreaterThan(0)); + } + + [Test] + public async Task WebSearchCallStreaming() + { + OpenAIResponseClient client = GetTestClient(); + + const string message = "Searching the internet, what's the weather like in San Francisco?"; + + ResponseCreationOptions responseOptions = new() + { + Tools = + { + ResponseTool.CreateWebSearchTool( + WebSearchToolLocation.CreateApproximateLocation(city: "San Francisco"), + WebSearchToolContextSize.Low) + } + }; + + string searchItemId = null; + int inProgressCount = 0; + int searchingCount = 0; + int completedCount = 0; + bool gotFinishedSearchItem = false; + + await foreach (StreamingResponseUpdate update + in client.CreateResponseStreamingAsync(message, responseOptions)) + { + if (update is StreamingResponseWebSearchCallUpdate webCallUpdate) + { + Assert.That(webCallUpdate.OutputItemId, Is.Not.Null.And.Not.Empty); + searchItemId ??= webCallUpdate.OutputItemId; + Assert.That(searchItemId, Is.EqualTo(webCallUpdate.OutputItemId)); + Assert.That(webCallUpdate.OutputItemIndex, Is.EqualTo(0)); + if (webCallUpdate.Kind == StreamingResponseUpdateKind.ResponseWebSearchCallInProgress) + { + inProgressCount++; + } + else if (webCallUpdate.Kind == StreamingResponseUpdateKind.ResponseWebSearchCallSearching) + { + searchingCount++; + } + else if (webCallUpdate.Kind == StreamingResponseUpdateKind.ResponseWebSearchCallCompleted) + { + completedCount++; + } + } + else if (update is StreamingResponseItemUpdate itemUpdate + && itemUpdate.Kind == StreamingResponseUpdateKind.ResponseOutputItemDone) + { + if (itemUpdate.Item is WebSearchCallResponseItem finishedWebSearchCall) + { + Assert.That(finishedWebSearchCall.Status, Is.EqualTo(WebSearchCallStatus.Completed)); + Assert.That(finishedWebSearchCall.Id, Is.EqualTo(searchItemId)); + gotFinishedSearchItem = true; + } + } + // Console.WriteLine(ModelReaderWriter.Write(update).ToString()); + } + 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); + }); + } + + [Test] + public async Task StreamingResponses() + { + OpenAIResponseClient client = GetTestClient("gpt-4o-mini"); // "computer-use-alpha"); + + List inputItems = [ResponseItem.CreateUserMessageItem("Hello, world!")]; + await foreach (StreamingResponseUpdate update in client.CreateResponseStreamingAsync(inputItems)) + { + Console.WriteLine(ModelReaderWriter.Write(update)); + if (update is StreamingResponseContentPartDeltaUpdate deltaUpdate) + { + Console.Write(deltaUpdate.Text); + } + } + } + + [Test] + [Category("Smoke")] + public void DeserializeStreamingWrapper() + { + string serializedEvent = """ + {"type":"response.output_text.delta","item_id":"msg_67cbd19634ac8190a8d1fe7d421960e0","output_index":0,"content_index":0,"delta":"Hello"} + """; + StreamingResponseContentPartDeltaUpdate deltaUpdate = ModelReaderWriter.Read(BinaryData.FromString(serializedEvent)); + Assert.That(deltaUpdate, Is.Not.Null); + Assert.That(deltaUpdate.Text, Is.EqualTo("Hello")); + } + + [Test] + [TestCase("gpt-4o-mini")] + [TestCase("computer-use-preview")] + public async Task ResponsesHelloWorldWithTool(string model) + { + OpenAIResponseClient client = GetTestClient(model); + + ResponseCreationOptions options = new() + { + Tools = + { + ResponseTool.CreateFunctionTool( + functionName: "get_custom_greeting", + functionDescription: "invoked when user provides a typical greeting", + functionParameters: BinaryData.FromString( + """ + { + "type": "object", + "properties": { + "time_of_day": { + "type": "string" + } + } + } + """), + functionSchemaIsStrict: false), + }, + }; + + OpenAIResponse response = await client.CreateResponseAsync( + [ + ResponseItem.CreateUserMessageItem( + [ + ResponseContentPart.CreateInputTextPart("good morning, responses!"), + ]), + ], + options); + + Assert.That(response.Id, Is.Not.Null.And.Not.Empty); + Assert.That(response.CreatedAt, Is.GreaterThan(DateTimeOffset.Now - TimeSpan.FromDays(1))); + // Assert.That(response.Status, Is.EqualTo(ResponsesStatus.Completed)); + Assert.That(response.Model, Is.Not.Null.And.Not.Empty); + Assert.That(response.PreviousResponseId, Is.Null); + // Observed: input may not exist on normal responses + // Assert.That(response.Input.Count, Is.EqualTo(1)); + Assert.That(response.OutputItems.Count, Is.EqualTo(1)); + } + + [Test] + public async Task ResponsesWithReasoning() + { + OpenAIResponseClient client = GetTestClient("o3-mini"); + + ResponseCreationOptions options = new() + { + ReasoningOptions = new() + { + ReasoningEffortLevel = ResponseReasoningEffortLevel.Low, + }, + Metadata = + { + ["superfluous_key"] = "superfluous_value", + }, + Instructions = "Perform reasoning over any questions asked by the user.", + }; + + OpenAIResponse response = await client.CreateResponseAsync([ResponseItem.CreateUserMessageItem("What's the best way to fold a burrito?")], options); + Assert.That(response, Is.Not.Null); + Assert.That(response.Id, Is.Not.Null); + Assert.That(response.CreatedAt, Is.GreaterThan(new DateTimeOffset(2025, 1, 1, 0, 0, 0, TimeSpan.Zero))); + Assert.That(response.TruncationMode, Is.EqualTo(ResponseTruncationMode.Auto)); + Assert.That(response.MaxOutputTokenCount, Is.Null); + Assert.That(response.Model, Does.StartWith("o3-mini")); + Assert.That(response.Usage, Is.Not.Null); + Assert.That(response.Usage.OutputTokenDetails, Is.Not.Null); + Assert.That(response.Usage.OutputTokenDetails.ReasoningTokenCount, Is.GreaterThan(0)); + Assert.That(response.Metadata, Is.Not.Null.Or.Empty); + Assert.That(response.Metadata["superfluous_key"], Is.EqualTo("superfluous_value")); + 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.Id, Is.Not.Null.And.Not.Empty); + Assert.That(messageItem.Content?.FirstOrDefault().Text, Has.Length.GreaterThan(0)); + } + + [Test] + [TestCase("computer-use-preview-2025-02-04")] + [TestCase("gpt-4o-mini")] + public async Task HelloWorldStreaming(string model) + { + OpenAIResponseClient client = GetTestClient(model); + + ResponseContentPart contentPart = ResponseContentPart.CreateInputTextPart("Hello, responses!"); + ResponseItem inputItem = ResponseItem.CreateUserMessageItem([contentPart]); + + await foreach (StreamingResponseUpdate update in client.CreateResponseStreamingAsync([inputItem])) + { + Console.WriteLine(ModelReaderWriter.Write(update)); + //if (update is ResponsesItemStreamingPartDeltaUpdate partDeltaUpdate) + //{ + // Console.Write(partDeltaUpdate.Text); + //} + } + } + + [Test] + public async Task CanDeleteResponse() + { + OpenAIResponseClient client = GetTestClient(); + + OpenAIResponse response = await client.CreateResponseAsync([ResponseItem.CreateUserMessageItem("Hello, model!")]); + + async Task RetrieveThatResponseAsync() + { + OpenAIResponse retrievedResponse = await client.GetResponseAsync(response.Id); + Assert.That(retrievedResponse.Id, Is.EqualTo(response.Id)); + } + + Assert.DoesNotThrowAsync(RetrieveThatResponseAsync); + + ResponseDeletionResult deletionResult = await client.DeleteResponseAsync(response.Id); + Assert.That(deletionResult.Deleted, Is.True); + + Assert.ThrowsAsync(RetrieveThatResponseAsync); + } + + [Test] + public async Task CanOptOutOfStorage() + { + OpenAIResponseClient client = GetTestClient(); + + OpenAIResponse response = await client.CreateResponseAsync( + [ResponseItem.CreateUserMessageItem("Hello, model!")], + new ResponseCreationOptions() + { + StoredOutputEnabled = false, + }); + + ClientResultException expectedException = Assert.ThrowsAsync(async () => await client.GetResponseAsync(response.Id)); + Assert.That(expectedException.Message, Does.Contain("not found")); + } + + [Test] + [Ignore("Assistant message needs an ID.")] + public async Task MessageHistoryWorks() + { + OpenAIResponseClient client = GetTestClient(); + + OpenAIResponse response = await client.CreateResponseAsync( + [ + ResponseItem.CreateDeveloperMessageItem("You are a helpful assistant."), + ResponseItem.CreateUserMessageItem("Hello, Assistant, my name is Bob!"), + ResponseItem.CreateAssistantMessageItem("1", "Hello, Bob. It's a nice, sunny day!"), + ResponseItem.CreateUserMessageItem("What's my name and what did you tell me the weather was like?"), + ]); + + Assert.That(response, Is.Not.Null); + } + + [Test] + public async Task ImageInputWorks() + { + OpenAIResponseClient client = GetTestClient(); + + string imagePath = Path.Join("Assets", "images_dog_and_cat.png"); + BinaryData imageBytes = BinaryData.FromBytes(await File.ReadAllBytesAsync(imagePath)); + + OpenAIResponse response = await client.CreateResponseAsync( + [ + ResponseItem.CreateUserMessageItem( + [ + ResponseContentPart.CreateInputTextPart("Please describe this picture for me"), + ResponseContentPart.CreateInputImagePart(imageBytes, "image/png", ResponseImageDetailLevel.Low), + ]), + ]); + } + + public enum ResponsesTestInstructionMethod + { + InstructionsProperty, + SystemMessage, + DeveloperMessage + } + + [Test] + [TestCase(ResponsesTestInstructionMethod.InstructionsProperty)] + [TestCase(ResponsesTestInstructionMethod.SystemMessage)] + [TestCase(ResponsesTestInstructionMethod.DeveloperMessage)] + public async Task AllInstructionMethodsWork(ResponsesTestInstructionMethod instructionMethod) + { + const string instructions = "Always begin your replies with 'Arr, matey'"; + + List messages = new(); + + if (instructionMethod == ResponsesTestInstructionMethod.SystemMessage) + { + messages.Add(ResponseItem.CreateSystemMessageItem(instructions)); + } + else if (instructionMethod == ResponsesTestInstructionMethod.DeveloperMessage) + { + messages.Add(ResponseItem.CreateDeveloperMessageItem(instructions)); + } + + const string userMessage = "Hello, model!"; + messages.Add(ResponseItem.CreateUserMessageItem(userMessage)); + + ResponseCreationOptions options = new(); + + if (instructionMethod == ResponsesTestInstructionMethod.InstructionsProperty) + { + options.Instructions = instructions; + } + + OpenAIResponseClient client = GetTestClient(); + OpenAIResponse response = await client.CreateResponseAsync(messages, options); + + Assert.That(response, Is.Not.Null); + Assert.That(response.OutputItems, Is.Not.Null.And.Not.Empty); + Assert.That(response.OutputItems[0], Is.InstanceOf()); + Assert.That((response.OutputItems[0] as MessageResponseItem).Content, Is.Not.Null.And.Not.Empty); + Assert.That((response.OutputItems[0] as MessageResponseItem).Content[0].Text, Does.StartWith("Arr, matey")); + + OpenAIResponse retrievedResponse = await client.GetResponseAsync(response.Id); + Assert.That((retrievedResponse?.OutputItems?.FirstOrDefault() as MessageResponseItem)?.Content?.FirstOrDefault()?.Text, Does.StartWith("Arr, matey")); + + if (instructionMethod == ResponsesTestInstructionMethod.InstructionsProperty) + { + Assert.That(retrievedResponse.Instructions, Is.EqualTo(instructions)); + } + + List listedItems = []; + await client.GetResponseInputItemsAsync(response.Id).ForEachAsync(item => listedItems.Add(item)); + + if (instructionMethod == ResponsesTestInstructionMethod.InstructionsProperty) + { + Assert.That(listedItems, Has.Count.EqualTo(1)); + Assert.That((listedItems[0] as MessageResponseItem)?.Content?.FirstOrDefault()?.Text, Is.EqualTo(userMessage)); + } + else + { + Assert.That(listedItems, Has.Count.EqualTo(2)); + MessageResponseItem systemOrDeveloperMessage = listedItems[1] as MessageResponseItem; + Assert.That(systemOrDeveloperMessage, Is.Not.Null); + Assert.That(systemOrDeveloperMessage.Role, Is.EqualTo(instructionMethod switch + { + ResponsesTestInstructionMethod.DeveloperMessage => MessageRole.Developer, + ResponsesTestInstructionMethod.SystemMessage => MessageRole.System, + _ => throw new ArgumentException() + })); + Assert.That(systemOrDeveloperMessage.Content?.FirstOrDefault()?.Text, Is.EqualTo(instructions)); + Assert.That((listedItems[0] as MessageResponseItem)?.Content?.FirstOrDefault()?.Text, Is.EqualTo(userMessage)); + } + } + + [Test] + public async Task TwoTurnCrossModel() + { + OpenAIResponseClient client = GetTestClient("gpt-4o-mini"); + OpenAIResponseClient client2 = GetTestClient("o3-mini"); + + + OpenAIResponse response = await client.CreateResponseAsync( + [ResponseItem.CreateUserMessageItem("Hello, Assistant! My name is Travis.")]); + OpenAIResponse response2 = await client2.CreateResponseAsync( + [ResponseItem.CreateUserMessageItem("What's my name?")], + new ResponseCreationOptions() + { + PreviousResponseId = response.Id, + }); + } + + [Test] + public async Task FunctionCall() + { + OpenAIResponseClient client = GetTestClient(); + + ResponseCreationOptions options = new() + { + Tools = { s_GetWeatherAtLocationTool } + }; + + OpenAIResponse response = await client.CreateResponseAsync( + [ResponseItem.CreateUserMessageItem("What should I wear for the weather in San Francisco, CA?")], + options); + + Assert.That(response.OutputItems, Has.Count.EqualTo(1)); + FunctionCallResponseItem functionCall = response.OutputItems[0] as FunctionCallResponseItem; + Assert.That(functionCall, Is.Not.Null); + Assert.That(functionCall!.Id, Has.Length.GreaterThan(0)); + Assert.That(functionCall.FunctionName, Is.EqualTo("get_weather_at_location")); + Assert.That(functionCall.FunctionArguments, Is.Not.Null); + + ResponseCreationOptions turn2Options = new() + { + PreviousResponseId = response.Id, + Tools = { s_GetWeatherAtLocationTool }, + }; + + ResponseItem functionReply = ResponseItem.CreateFunctionCallOutputItem(functionCall.CallId, "22 celcius and windy"); + OpenAIResponse turn2Response = await client.CreateResponseAsync( + [functionReply], + turn2Options); + Assert.That(turn2Response.OutputItems?.Count, Is.EqualTo(1)); + MessageResponseItem turn2Message = turn2Response!.OutputItems[0] as MessageResponseItem; + Assert.That(turn2Message, Is.Not.Null); + 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")); + } + + [Test] + public async Task FunctionCallStreaming() + { + OpenAIResponseClient client = GetTestClient(); + + await foreach (StreamingResponseUpdate update + in client.CreateResponseStreamingAsync( + "What should I wear for the weather in San Francisco right now?", + new ResponseCreationOptions() { Tools = { s_GetWeatherAtLocationTool } })) + { + if (update is StreamingResponseStatusUpdate statusUpdate) + { + Console.WriteLine($"{statusUpdate.Kind}: {statusUpdate.Response.Id}"); + } + else if (update is StreamingResponseContentPartDeltaUpdate deltaUpdate) + { + Console.Write(deltaUpdate.FunctionArguments); + } + } + } + + private static string s_GetWeatherAtLocationToolName = "get_weather_at_location"; + private static ResponseTool s_GetWeatherAtLocationTool = ResponseTool.CreateFunctionTool( + s_GetWeatherAtLocationToolName, + "Gets the weather at a specified location, optionally specifying units for temperature", + BinaryData.FromString(""" + { + "type": "object", + "properties": { + "location": { + "type": "string" + }, + "unit": { + "type": "string", + "enum": ["C", "F", "K"] + } + }, + "required": ["location"] + } + """), + false); + + private static OpenAIResponseClient GetTestClient(string overrideModel = null) + => GetTestClient(TestScenario.Responses, overrideModel); +} \ No newline at end of file diff --git a/tests/Utility/MultipartFormDataBinaryContent.cs b/tests/Utility/MultipartFormDataBinaryContent.cs index 0baf09a5f..335253450 100644 --- a/tests/Utility/MultipartFormDataBinaryContent.cs +++ b/tests/Utility/MultipartFormDataBinaryContent.cs @@ -1,112 +1,195 @@ -using System; +// + +#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.Tests; - -internal class MultipartFormDataBinaryContent : BinaryContent +namespace OpenAI { - private readonly MultipartFormDataContent _multipartContent; - - private const int BoundaryLength = 70; - private const string BoundaryValues = "0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"; - - public MultipartFormDataBinaryContent() + internal partial class MultiPartFormDataBinaryContent : BinaryContent { - _multipartContent = new MultipartFormDataContent(CreateBoundary()); - } - - public string ContentType => _multipartContent.Headers.ContentType.ToString(); + private readonly MultipartFormDataContent _multipartContent; + private static readonly Random _random = new Random(); + private static readonly char[] _boundaryValues = "0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".ToCharArray(); - public void Add(byte[] bytes, string name, string fileName, string contentType = null) - { - ByteArrayContent content = new(bytes); - if (contentType is not null) + public MultiPartFormDataBinaryContent() { - content.Headers.ContentType = MediaTypeHeaderValue.Parse(contentType); + _multipartContent = new MultipartFormDataContent(CreateBoundary()); } - _multipartContent.Add(content, name, fileName); - } -#if NET6_0_OR_GREATER - private static string CreateBoundary() => - string.Create(BoundaryLength, 0, (chars, _) => + public string ContentType { - Span random = stackalloc byte[BoundaryLength]; - Random.Shared.NextBytes(random); - - for (int i = 0; i < chars.Length; i++) + get { - chars[i] = BoundaryValues[random[i] % BoundaryValues.Length]; + return _multipartContent.Headers.ContentType.ToString(); } - }); -#else - private static readonly Random _random = new(); + } - private static string CreateBoundary() - { - Span chars = stackalloc char[BoundaryLength]; + internal HttpContent HttpContent => _multipartContent; - byte[] random = new byte[BoundaryLength]; - lock (_random) + 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); } - // Instead of `% BoundaryValues.Length` as is used above, use a mask to achieve the same result. - // `% BoundaryValues.Length` is optimized to the equivalent on .NET Core but not on .NET Framework. - const int Mask = 255 >> 2; - Debug.Assert(BoundaryValues.Length - 1 == Mask); + 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); + } - for (int i = 0; i < chars.Length; i++) + public void Add(long content, string name, string filename = default, string contentType = default) { - chars[i] = BoundaryValues[random[i] & Mask]; + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + string value = content.ToString("G", CultureInfo.InvariantCulture); + Add(new StringContent(value), name, filename, contentType); } - return chars.ToString(); - } -#endif + public void Add(float content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); - public override bool TryComputeLength(out long length) - { - // We can't call the protected method on HttpContent + 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); + } - if (_multipartContent.Headers.ContentLength is long contentLength) + public void Add(decimal content, string name, string filename = default, string contentType = default) { - length = contentLength; - return true; + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + string value = content.ToString("G", CultureInfo.InvariantCulture); + Add(new StringContent(value), name, filename, contentType); } - length = 0; - return false; - } + public void Add(bool content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); - public override void WriteTo(Stream stream, CancellationToken cancellationToken = default) - { -#if NET5_0_OR_GREATER - _multipartContent.CopyTo(stream, default, cancellationToken); + 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 - // TODO: polyfill sync-over-async for netstandard2.0 for Azure clients. - // Tracked by https://github.com/Azure/azure-sdk-for-net/issues/42674 - _multipartContent.CopyToAsync(stream).GetAwaiter().GetResult(); + _multipartContent.CopyToAsync(stream).GetAwaiter().GetResult(); #endif - } + } - public override async Task WriteToAsync(Stream stream, CancellationToken cancellationToken = default) - { -#if NET5_0_OR_GREATER - await _multipartContent.CopyToAsync(stream, cancellationToken).ConfigureAwait(false); + 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); + await _multipartContent.CopyToAsync(stream).ConfigureAwait(false); #endif - } + } - public override void Dispose() - { - _multipartContent.Dispose(); + public override void Dispose() + { + _multipartContent.Dispose(); + } } } diff --git a/tests/Utility/TestHelpers.cs b/tests/Utility/TestHelpers.cs index 2bd540023..77134bedc 100644 --- a/tests/Utility/TestHelpers.cs +++ b/tests/Utility/TestHelpers.cs @@ -10,6 +10,7 @@ using OpenAI.Models; using OpenAI.Moderations; using OpenAI.RealtimeConversation; +using OpenAI.Responses; using OpenAI.VectorStores; using System; using System.ClientModel; @@ -40,6 +41,7 @@ public enum TestScenario Models, Moderations, RealtimeConversation, + Responses, VectorStores, TopLevel, } @@ -72,6 +74,9 @@ public static T GetTestClient(TestScenario scenario, string overrideModel = n TestScenario.TopLevel => new OpenAIClient(credential, options), #pragma warning disable OPENAI002 TestScenario.RealtimeConversation => new RealtimeConversationClient(overrideModel ?? "gpt-4o-realtime-preview-2024-10-01", credential, options), +#pragma warning restore +#pragma warning disable OPENAI003 + TestScenario.Responses => new OpenAIResponseClient(overrideModel ?? "gpt-4o-mini", credential, options), #pragma warning restore _ => throw new NotImplementedException(), }; From be0b3be9f49c23cd402cfbfb8dcd96941fc393d1 Mon Sep 17 00:00:00 2001 From: Jose Arriaga Maldonado Date: Tue, 11 Mar 2025 17:58:15 -0700 Subject: [PATCH 2/2] Fix chat model factory --- src/Custom/Chat/OpenAIChatModelFactory.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Custom/Chat/OpenAIChatModelFactory.cs b/src/Custom/Chat/OpenAIChatModelFactory.cs index fd8a127ba..0e62ebe36 100644 --- a/src/Custom/Chat/OpenAIChatModelFactory.cs +++ b/src/Custom/Chat/OpenAIChatModelFactory.cs @@ -65,6 +65,7 @@ public static ChatCompletion ChatCompletion( toolCalls ??= new List(); contentTokenLogProbabilities ??= new List(); refusalTokenLogProbabilities ??= new List(); + messageAnnotations ??= new List(); InternalChatCompletionResponseMessage message = new( refusal,

Fh!+?H)%xDVywfs_g|o47}m&;6(F9HZS(G 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