// <auto-generated/>

#nullable disable

using System;
using System.Collections.Generic;
using System.Linq;
using OpenAI.Assistants;
using OpenAI.Audio;
using OpenAI.Chat;
using OpenAI.Embeddings;
using OpenAI.Files;
using OpenAI.FineTuning;
using OpenAI.Images;
using OpenAI.Models;
using OpenAI.Moderations;
using OpenAI.Realtime;
using OpenAI.Responses;
using OpenAI.VectorStores;

namespace OpenAI
{
    internal static partial class OpenAIModelFactory
    {
        public static TranscribedWord TranscribedWord(string word = default, TimeSpan startTime = default, TimeSpan endTime = default)
        {
            return new TranscribedWord(word, startTime, endTime, additionalBinaryDataProperties: null);
        }

        public static TranscribedSegment TranscribedSegment(int id = default, string text = default, float temperature = default, float compressionRatio = default, TimeSpan startTime = default, TimeSpan endTime = default, int seekOffset = default, ReadOnlyMemory<int> tokenIds = default, float averageLogProbability = default, float noSpeechProbability = default)
        {
            return new TranscribedSegment(
                id,
                text,
                temperature,
                compressionRatio,
                startTime,
                endTime,
                seekOffset,
                tokenIds,
                averageLogProbability,
                noSpeechProbability,
                additionalBinaryDataProperties: null);
        }

        public static StreamingAudioTranscriptionUpdate StreamingAudioTranscriptionUpdate(string kind = default)
        {
            return new InternalUnknownCreateTranscriptionResponseStreamEvent(new StreamingAudioTranscriptionUpdateKind(kind), additionalBinaryDataProperties: null);
        }

        public static StreamingAudioTranscriptionTextDeltaUpdate StreamingAudioTranscriptionTextDeltaUpdate(string delta = default, IEnumerable<AudioTokenLogProbabilityDetails> transcriptionTokenLogProbabilities = default)
        {
            transcriptionTokenLogProbabilities ??= new ChangeTrackingList<AudioTokenLogProbabilityDetails>();

            return new StreamingAudioTranscriptionTextDeltaUpdate(StreamingAudioTranscriptionUpdateKind.TranscriptTextDelta, additionalBinaryDataProperties: null, delta, transcriptionTokenLogProbabilities?.ToList());
        }

        public static StreamingAudioTranscriptionTextDoneUpdate StreamingAudioTranscriptionTextDoneUpdate(string text = default, IEnumerable<AudioTokenLogProbabilityDetails> transcriptionTokenLogProbabilities = default)
        {
            transcriptionTokenLogProbabilities ??= new ChangeTrackingList<AudioTokenLogProbabilityDetails>();

            return new StreamingAudioTranscriptionTextDoneUpdate(StreamingAudioTranscriptionUpdateKind.TranscriptTextDone, additionalBinaryDataProperties: null, text, transcriptionTokenLogProbabilities?.ToList());
        }

        public static AudioTranslation AudioTranslation(string language = default, string text = default, IEnumerable<TranscribedSegment> segments = default, string task = default, TimeSpan? duration = default)
        {
            segments ??= new ChangeTrackingList<TranscribedSegment>();

            return new AudioTranslation(
                language,
                text,
                segments?.ToList(),
                task,
                duration,
                additionalBinaryDataProperties: null);
        }

        public static Assistant Assistant(string id = default, DateTimeOffset createdAt = default, string name = default, string description = default, string model = default, string instructions = default, IEnumerable<ToolDefinition> tools = default, ToolResources toolResources = default, IReadOnlyDictionary<string, string> metadata = default, float? temperature = default, string @object = default, AssistantResponseFormat responseFormat = default, float? nucleusSamplingFactor = default)
        {
            tools ??= new ChangeTrackingList<ToolDefinition>();
            metadata ??= new ChangeTrackingDictionary<string, string>();

            return new Assistant(
                id,
                createdAt,
                name,
                description,
                model,
                instructions,
                tools?.ToList(),
                toolResources,
                metadata,
                temperature,
                @object,
                responseFormat,
                nucleusSamplingFactor,
                additionalBinaryDataProperties: null);
        }

        public static FileSearchRankingOptions FileSearchRankingOptions(FileSearchRanker? ranker = default, float scoreThreshold = default)
        {
            return new FileSearchRankingOptions(ranker, scoreThreshold, additionalBinaryDataProperties: null);
        }

        public static ToolResources ToolResources(CodeInterpreterToolResources codeInterpreter = default, FileSearchToolResources fileSearch = default)
        {
            return new ToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties: null);
        }

        public static CodeInterpreterToolResources CodeInterpreterToolResources(IEnumerable<string> fileIds = default)
        {
            fileIds ??= new ChangeTrackingList<string>();

            return new CodeInterpreterToolResources(fileIds?.ToList(), additionalBinaryDataProperties: null);
        }

        public static AssistantCreationOptions AssistantCreationOptions(string name = default, string description = default, string instructions = default, IDictionary<string, string> metadata = default, float? temperature = default, string model = default, IEnumerable<ToolDefinition> tools = default, ToolResources toolResources = default, AssistantResponseFormat responseFormat = default, float? nucleusSamplingFactor = default, ChatReasoningEffortLevel? reasoningEffortLevel = default)
        {
            metadata ??= new ChangeTrackingDictionary<string, string>();
            tools ??= new ChangeTrackingList<ToolDefinition>();

            return new AssistantCreationOptions(
                name,
                description,
                instructions,
                metadata,
                temperature,
                model,
                tools?.ToList(),
                toolResources,
                responseFormat,
                nucleusSamplingFactor,
                reasoningEffortLevel,
                additionalBinaryDataProperties: null);
        }

        public static FileSearchToolResources FileSearchToolResources(IEnumerable<string> vectorStoreIds = default, IEnumerable<VectorStoreCreationHelper> newVectorStores = default)
        {
            vectorStoreIds ??= new ChangeTrackingList<string>();
            newVectorStores ??= new ChangeTrackingList<VectorStoreCreationHelper>();

            return new FileSearchToolResources(vectorStoreIds?.ToList(), newVectorStores?.ToList(), additionalBinaryDataProperties: null);
        }

        public static VectorStoreCreationHelper VectorStoreCreationHelper(IEnumerable<string> fileIds = default, IDictionary<string, string> metadata = default, FileChunkingStrategy chunkingStrategy = default)
        {
            fileIds ??= new ChangeTrackingList<string>();
            metadata ??= new ChangeTrackingDictionary<string, string>();

            return new VectorStoreCreationHelper(fileIds?.ToList(), metadata, chunkingStrategy, additionalBinaryDataProperties: null);
        }

        public static AssistantModificationOptions AssistantModificationOptions(string name = default, string description = default, string instructions = default, IDictionary<string, string> metadata = default, float? temperature = default, string model = default, IEnumerable<ToolDefinition> defaultTools = default, ToolResources toolResources = default, AssistantResponseFormat responseFormat = default, float? nucleusSamplingFactor = default, ChatReasoningEffortLevel? reasoningEffortLevel = default)
        {
            metadata ??= new ChangeTrackingDictionary<string, string>();
            defaultTools ??= new ChangeTrackingList<ToolDefinition>();

            return new AssistantModificationOptions(
                name,
                description,
                instructions,
                metadata,
                temperature,
                model,
                defaultTools?.ToList(),
                toolResources,
                responseFormat,
                nucleusSamplingFactor,
                reasoningEffortLevel,
                additionalBinaryDataProperties: null);
        }

        public static AssistantDeletionResult AssistantDeletionResult(bool deleted = default, string assistantId = default, string @object = default)
        {
            return new AssistantDeletionResult(deleted, assistantId, @object, additionalBinaryDataProperties: null);
        }

        public static ChatOutputAudio ChatOutputAudio(string id = default, DateTimeOffset expiresAt = default, string transcript = default, BinaryData audioBytes = default)
        {
            return new ChatOutputAudio(id, expiresAt, transcript, audioBytes, additionalBinaryDataProperties: null);
        }

        public static ChatTokenLogProbabilityDetails ChatTokenLogProbabilityDetails(string token = default, float logProbability = default, ReadOnlyMemory<byte>? utf8Bytes = default, IEnumerable<ChatTokenTopLogProbabilityDetails> topLogProbabilities = default)
        {
            topLogProbabilities ??= new ChangeTrackingList<ChatTokenTopLogProbabilityDetails>();

            return new ChatTokenLogProbabilityDetails(token, logProbability, utf8Bytes, topLogProbabilities?.ToList(), additionalBinaryDataProperties: null);
        }

        public static ChatTokenTopLogProbabilityDetails ChatTokenTopLogProbabilityDetails(string token = default, float logProbability = default, ReadOnlyMemory<byte>? utf8Bytes = default)
        {
            return new ChatTokenTopLogProbabilityDetails(token, logProbability, utf8Bytes, additionalBinaryDataProperties: null);
        }

        public static ChatTokenUsage ChatTokenUsage(int outputTokenCount = default, int inputTokenCount = default, int totalTokenCount = default, ChatOutputTokenUsageDetails outputTokenDetails = default, ChatInputTokenUsageDetails inputTokenDetails = default)
        {
            return new ChatTokenUsage(
                outputTokenCount,
                inputTokenCount,
                totalTokenCount,
                outputTokenDetails,
                inputTokenDetails,
                additionalBinaryDataProperties: null);
        }

        public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount = default, int audioTokenCount = default, int acceptedPredictionTokenCount = default, int rejectedPredictionTokenCount = default)
        {
            return new ChatOutputTokenUsageDetails(reasoningTokenCount, audioTokenCount, acceptedPredictionTokenCount, rejectedPredictionTokenCount, additionalBinaryDataProperties: null);
        }

        public static ChatInputTokenUsageDetails ChatInputTokenUsageDetails(int audioTokenCount = default, int cachedTokenCount = default)
        {
            return new ChatInputTokenUsageDetails(audioTokenCount, cachedTokenCount, additionalBinaryDataProperties: null);
        }

        public static ChatMessage ChatMessage(ChatMessageContent content = default, string role = default)
        {
            return new InternalUnknownChatMessage(content, role.ToChatMessageRole(), additionalBinaryDataProperties: null);
        }

        public static ChatMessageContentPart ChatMessageContentPart()
        {
            return new InternalUnknownChatCompletionRequestMessageContentPart(additionalBinaryDataProperties: null);
        }

        public static SystemChatMessage SystemChatMessage(ChatMessageContent content = default, string participantName = default)
        {
            return new SystemChatMessage(content, ChatMessageRole.System, additionalBinaryDataProperties: null, participantName);
        }

        public static DeveloperChatMessage DeveloperChatMessage(ChatMessageContent content = default, string participantName = default)
        {
            return new DeveloperChatMessage(content, ChatMessageRole.Developer, additionalBinaryDataProperties: null, participantName);
        }

        public static UserChatMessage UserChatMessage(ChatMessageContent content = default, string participantName = default)
        {
            return new UserChatMessage(content, ChatMessageRole.User, additionalBinaryDataProperties: null, participantName);
        }

        public static AssistantChatMessage AssistantChatMessage(ChatMessageContent content = default, string refusal = default, string participantName = default, IEnumerable<ChatToolCall> toolCalls = default, ChatFunctionCall functionCall = default, ChatOutputAudioReference outputAudioReference = default)
        {
            toolCalls ??= new ChangeTrackingList<ChatToolCall>();

            return new AssistantChatMessage(
                content,
                ChatMessageRole.Assistant,
                additionalBinaryDataProperties: null,
                refusal,
                participantName,
                toolCalls?.ToList(),
                functionCall,
                outputAudioReference);
        }

        public static ChatOutputAudioReference ChatOutputAudioReference(string id = default)
        {
            return new ChatOutputAudioReference(id, additionalBinaryDataProperties: null);
        }

        public static ChatFunctionCall ChatFunctionCall(string functionName = default, BinaryData functionArguments = default)
        {
            return new ChatFunctionCall(functionName, functionArguments, additionalBinaryDataProperties: null);
        }

        public static ToolChatMessage ToolChatMessage(ChatMessageContent content = default, string toolCallId = default)
        {
            return new ToolChatMessage(content, ChatMessageRole.Tool, additionalBinaryDataProperties: null, toolCallId);
        }

        public static FunctionChatMessage FunctionChatMessage(ChatMessageContent content = default, string functionName = default)
        {
            return new FunctionChatMessage(content, ChatMessageRole.Function, additionalBinaryDataProperties: null, functionName);
        }

        public static ChatAudioOptions ChatAudioOptions(ChatOutputAudioVoice outputAudioVoice = default, ChatOutputAudioFormat outputAudioFormat = default)
        {
            return new ChatAudioOptions(outputAudioVoice, outputAudioFormat, additionalBinaryDataProperties: null);
        }

        public static ChatFunction ChatFunction(string functionName = default, string functionDescription = default, BinaryData functionParameters = default)
        {
            return new ChatFunction(functionName, functionDescription, functionParameters, additionalBinaryDataProperties: null);
        }

        public static StreamingChatOutputAudioUpdate StreamingChatOutputAudioUpdate(string id = default, DateTimeOffset? expiresAt = default, string transcriptUpdate = default, BinaryData audioBytesUpdate = default)
        {
            return new StreamingChatOutputAudioUpdate(id, expiresAt, transcriptUpdate, audioBytesUpdate, additionalBinaryDataProperties: null);
        }

        public static StreamingChatFunctionCallUpdate StreamingChatFunctionCallUpdate(string functionName = default, BinaryData functionArgumentsUpdate = default)
        {
            return new StreamingChatFunctionCallUpdate(functionName, functionArgumentsUpdate, additionalBinaryDataProperties: null);
        }

        public static ChatCompletionDeletionResult ChatCompletionDeletionResult(bool deleted = default, string @object = default, string chatCompletionId = default)
        {
            return new ChatCompletionDeletionResult(deleted, @object, chatCompletionId, additionalBinaryDataProperties: null);
        }

        public static OpenAIEmbeddingCollection OpenAIEmbeddingCollection(IEnumerable<OpenAIEmbedding> data = default, string model = default, string @object = default, EmbeddingTokenUsage usage = default)
        {
            data ??= new ChangeTrackingList<OpenAIEmbedding>();

            return new OpenAIEmbeddingCollection(data?.ToList(), model, @object, usage, serializedAdditionalRawData: null);
        }

        public static OpenAIEmbedding OpenAIEmbedding(int index = default, BinaryData embeddingProperty = default, string @object = default)
        {
            return new OpenAIEmbedding(index, embeddingProperty, @object, serializedAdditionalRawData: null);
        }

        public static EmbeddingTokenUsage EmbeddingTokenUsage(int inputTokenCount = default, int totalTokenCount = default)
        {
            return new EmbeddingTokenUsage(inputTokenCount, totalTokenCount, additionalBinaryDataProperties: null);
        }

        public static FileSearchToolRankingOptions FileSearchToolRankingOptions(FileSearchToolRanker? ranker = default, float? scoreThreshold = default)
        {
            return new FileSearchToolRankingOptions(ranker, scoreThreshold, additionalBinaryDataProperties: null);
        }

        public static ResponseTextOptions ResponseTextOptions(ResponseTextFormat textFormat = default)
        {
            return new ResponseTextOptions(textFormat, additionalBinaryDataProperties: null);
        }

        public static ResponseMessageAnnotation ResponseMessageAnnotation(string kind = default)
        {
            return new InternalUnknownAnnotation(kind.ToResponseMessageAnnotationKind(), additionalBinaryDataProperties: null);
        }

        public static FileSearchCallResult FileSearchCallResult(string fileId = default, string text = default, string filename = default, float? score = default, IReadOnlyDictionary<string, BinaryData> attributes = default)
        {
            attributes ??= new ChangeTrackingDictionary<string, BinaryData>();

            return new FileSearchCallResult(
                fileId,
                text,
                filename,
                score,
                attributes,
                additionalBinaryDataProperties: null);
        }

        public static ComputerCallAction ComputerCallAction(string kind = default)
        {
            return new InternalUnknownComputerAction(kind.ToComputerCallActionKind(), additionalBinaryDataProperties: null);
        }

        public static ComputerCallSafetyCheck ComputerCallSafetyCheck(string id = default, string code = default, string message = default)
        {
            return new ComputerCallSafetyCheck(id, code, message, additionalBinaryDataProperties: null);
        }

        public static ResponseError ResponseError(ResponseErrorCode code = default, string message = default)
        {
            return new ResponseError(code, message, additionalBinaryDataProperties: null);
        }

        public static ResponseIncompleteStatusDetails ResponseIncompleteStatusDetails(ResponseIncompleteStatusReason? reason = default)
        {
            return new ResponseIncompleteStatusDetails(reason, additionalBinaryDataProperties: null);
        }

        public static ResponseTokenUsage ResponseTokenUsage(int inputTokenCount = default, int outputTokenCount = default, int totalTokenCount = default, ResponseInputTokenUsageDetails inputTokenDetails = default, ResponseOutputTokenUsageDetails outputTokenDetails = default)
        {
            return new ResponseTokenUsage(
                inputTokenCount,
                outputTokenCount,
                totalTokenCount,
                inputTokenDetails,
                outputTokenDetails,
                additionalBinaryDataProperties: null);
        }

        public static ResponseInputTokenUsageDetails ResponseInputTokenUsageDetails(int cachedTokenCount = default)
        {
            return new ResponseInputTokenUsageDetails(cachedTokenCount, additionalBinaryDataProperties: null);
        }

        public static ResponseOutputTokenUsageDetails ResponseOutputTokenUsageDetails(int reasoningTokenCount = default)
        {
            return new ResponseOutputTokenUsageDetails(reasoningTokenCount, additionalBinaryDataProperties: null);
        }

        public static ResponseDeletionResult ResponseDeletionResult(string id = default, bool deleted = default, string @object = default)
        {
            return new ResponseDeletionResult(id, deleted, @object, additionalBinaryDataProperties: null);
        }

        public static OpenAIFileCollection OpenAIFileCollection(IEnumerable<OpenAIFile> data = default, string @object = default, string firstId = default, string lastId = default, bool hasMore = default)
        {
            data ??= new ChangeTrackingList<OpenAIFile>();

            return new OpenAIFileCollection(
                data?.ToList(),
                @object,
                firstId,
                lastId,
                hasMore,
                serializedAdditionalRawData: null);
        }

        public static OpenAIFile OpenAIFile(string id = default, DateTimeOffset createdAt = default, DateTimeOffset? expiresAt = default, string filename = default, FilePurpose purpose = default, string @object = default, long? sizeInBytesLong = default, FileStatus status = default, string statusDetails = default)
        {
            return new OpenAIFile(
                id,
                createdAt,
                expiresAt,
                filename,
                purpose,
                @object,
                sizeInBytesLong,
                status,
                statusDetails,
                additionalBinaryDataProperties: null);
        }

        public static FileDeletionResult FileDeletionResult(bool deleted = default, string fileId = default, string @object = default)
        {
            return new FileDeletionResult(deleted, fileId, @object, additionalBinaryDataProperties: null);
        }

        public static HyperparametersForSupervised HyperparametersForSupervised(BinaryData batchSize = default, BinaryData nEpochs = default, BinaryData learningRateMultiplier = default)
        {
            return new HyperparametersForSupervised(batchSize, nEpochs, learningRateMultiplier, additionalBinaryDataProperties: null);
        }

        public static HyperparametersForDPO HyperparametersForDPO(BinaryData batchSize = default, BinaryData nEpochs = default, BinaryData learningRateMultiplier = default, BinaryData beta = default)
        {
            return new HyperparametersForDPO(batchSize, nEpochs, learningRateMultiplier, beta, additionalBinaryDataProperties: null);
        }

        public static FineTuningError FineTuningError(string code = default, string message = default, string invalidParameter = default)
        {
            return new FineTuningError(code, message, invalidParameter, additionalBinaryDataProperties: null);
        }

        public static FineTuningHyperparameters FineTuningHyperparameters(BinaryData epochCount = default, BinaryData batchSize = default, BinaryData learningRateMultiplier = default)
        {
            return new FineTuningHyperparameters(epochCount, batchSize, learningRateMultiplier, additionalBinaryDataProperties: null);
        }

        public static FineTuningCheckpoint FineTuningCheckpoint(string id = default, DateTimeOffset createdAt = default, string modelId = default, int stepNumber = default, FineTuningCheckpointMetrics metrics = default, string jobId = default, string @object = default)
        {
            return new FineTuningCheckpoint(
                id,
                createdAt,
                modelId,
                stepNumber,
                metrics,
                jobId,
                @object,
                additionalBinaryDataProperties: null);
        }

        public static FineTuningCheckpointMetrics FineTuningCheckpointMetrics(float? trainLoss = default, float? trainMeanTokenAccuracy = default, float? validLoss = default, float? validMeanTokenAccuracy = default, float? fullValidLoss = default, float? fullValidMeanTokenAccuracy = default, int stepNumber = default)
        {
            return new FineTuningCheckpointMetrics(
                trainLoss,
                trainMeanTokenAccuracy,
                validLoss,
                validMeanTokenAccuracy,
                fullValidLoss,
                fullValidMeanTokenAccuracy,
                stepNumber,
                additionalBinaryDataProperties: null);
        }

        public static FineTuningEvent FineTuningEvent(string id = default, DateTimeOffset createdAt = default, string message = default, FineTuningJobEventKind? kind = default, BinaryData data = default, string level = default, string @object = default)
        {
            return new FineTuningEvent(
                id,
                createdAt,
                message,
                kind,
                data,
                level,
                @object,
                additionalBinaryDataProperties: null);
        }

        public static ImageGenerationOptions ImageGenerationOptions(GeneratedImageQuality? quality = default, GeneratedImageFormat? responseFormat = default, GeneratedImageSize? size = default, GeneratedImageBackground? background = default, GeneratedImageStyle? style = default, InternalCreateImageRequestModel? model = default, string prompt = default, long? n = default, string endUserId = default, int? outputCompressionFactor = default, GeneratedImageFileFormat? outputFileFormat = default, GeneratedImageModerationLevel? moderationLevel = default)
        {
            return new ImageGenerationOptions(
                quality,
                responseFormat,
                size,
                background,
                style,
                model,
                prompt,
                n,
                endUserId,
                outputCompressionFactor,
                outputFileFormat,
                moderationLevel,
                additionalBinaryDataProperties: null);
        }

        public static GeneratedImageCollection GeneratedImageCollection(IEnumerable<GeneratedImage> data = default, ImageTokenUsage usage = default, DateTimeOffset createdAt = default)
        {
            data ??= new ChangeTrackingList<GeneratedImage>();

            return new GeneratedImageCollection(data?.ToList(), usage, createdAt, additionalBinaryDataProperties: null);
        }

        public static GeneratedImage GeneratedImage(string revisedPrompt = default, BinaryData imageBytes = default, Uri imageUri = default)
        {
            return new GeneratedImage(revisedPrompt, imageBytes, imageUri, additionalBinaryDataProperties: null);
        }

        public static ImageTokenUsage ImageTokenUsage(int inputTokenCount = default, int outputTokenCount = default, int totalTokenCount = default, ImageInputTokenUsageDetails inputTokenDetails = default)
        {
            return new ImageTokenUsage(inputTokenCount, outputTokenCount, totalTokenCount, inputTokenDetails, additionalBinaryDataProperties: null);
        }

        public static ImageInputTokenUsageDetails ImageInputTokenUsageDetails(int textTokenCount = default, int imageTokenCount = default)
        {
            return new ImageInputTokenUsageDetails(textTokenCount, imageTokenCount, additionalBinaryDataProperties: null);
        }

        public static ImageVariationOptions ImageVariationOptions(InternalCreateImageVariationRequestModel? model = default, BinaryData image = default, long? n = default, GeneratedImageSize? size = default, GeneratedImageFormat? responseFormat = default, string endUserId = default)
        {
            return new ImageVariationOptions(
                model,
                image,
                n,
                size,
                responseFormat,
                endUserId,
                additionalBinaryDataProperties: null);
        }

        public static MessageCreationOptions MessageCreationOptions(IEnumerable<MessageCreationAttachment> attachments = default, IDictionary<string, string> metadata = default, Assistants.MessageRole role = default, IEnumerable<MessageContent> content = default)
        {
            attachments ??= new ChangeTrackingList<MessageCreationAttachment>();
            metadata ??= new ChangeTrackingDictionary<string, string>();
            content ??= new ChangeTrackingList<MessageContent>();

            return new MessageCreationOptions(attachments?.ToList(), metadata, role, content?.ToList(), additionalBinaryDataProperties: null);
        }

        public static MessageCreationAttachment MessageCreationAttachment(string fileId = default, IEnumerable<ToolDefinition> tools = default)
        {
            tools ??= new ChangeTrackingList<ToolDefinition>();

            return new MessageCreationAttachment(fileId, tools?.ToList(), additionalBinaryDataProperties: null);
        }

        public static ThreadMessage ThreadMessage(string id = default, DateTimeOffset createdAt = default, string threadId = default, Assistants.MessageStatus status = default, MessageFailureDetails incompleteDetails = default, DateTimeOffset? completedAt = default, DateTimeOffset? incompleteAt = default, IEnumerable<MessageContent> content = default, string assistantId = default, string runId = default, IReadOnlyDictionary<string, string> metadata = default, string @object = default, Assistants.MessageRole role = default, IEnumerable<MessageCreationAttachment> attachments = default)
        {
            content ??= new ChangeTrackingList<MessageContent>();
            metadata ??= new ChangeTrackingDictionary<string, string>();
            attachments ??= new ChangeTrackingList<MessageCreationAttachment>();

            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)
        {
            return new MessageFailureDetails(reason, additionalBinaryDataProperties: null);
        }

        public static MessageModificationOptions MessageModificationOptions(IDictionary<string, string> metadata = default)
        {
            metadata ??= new ChangeTrackingDictionary<string, string>();

            return new MessageModificationOptions(metadata, additionalBinaryDataProperties: null);
        }

        public static MessageDeletionResult MessageDeletionResult(bool deleted = default, string messageId = default, string @object = default)
        {
            return new MessageDeletionResult(deleted, messageId, @object, additionalBinaryDataProperties: null);
        }

        public static OpenAIModelCollection OpenAIModelCollection(string @object = default, IEnumerable<OpenAIModel> data = default)
        {
            data ??= new ChangeTrackingList<OpenAIModel>();

            return new OpenAIModelCollection(@object, data?.ToList(), serializedAdditionalRawData: null);
        }

        public static OpenAIModel OpenAIModel(string id = default, string ownedBy = default, string @object = default, DateTimeOffset createdAt = default)
        {
            return new OpenAIModel(id, ownedBy, @object, createdAt, additionalBinaryDataProperties: null);
        }

        public static ModelDeletionResult ModelDeletionResult(bool deleted = default, string modelId = default, string @object = default)
        {
            return new ModelDeletionResult(deleted, modelId, @object, additionalBinaryDataProperties: null);
        }

        public static ModerationResultCollection ModerationResultCollection(string id = default, string model = default, IEnumerable<ModerationResult> results = default)
        {
            results ??= new ChangeTrackingList<ModerationResult>();

            return new ModerationResultCollection(id, model, results?.ToList());
        }

        public static ModerationResult ModerationResult(bool flagged = default)
        {
            return new ModerationResult(flagged, additionalBinaryDataProperties: null);
        }

        public static InputTranscriptionOptions InputTranscriptionOptions(InputTranscriptionModel? model = default, string language = default, string prompt = default)
        {
            return new InputTranscriptionOptions(model, language, prompt, additionalBinaryDataProperties: null);
        }

        public static TurnDetectionOptions TurnDetectionOptions(string kind = default, bool? responseCreationEnabled = default, bool? responseInterruptionEnabled = default)
        {
            return new UnknownRealtimeTurnDetection(kind.ToTurnDetectionKind(), responseCreationEnabled, responseInterruptionEnabled, additionalBinaryDataProperties: null);
        }

        public static InputNoiseReductionOptions InputNoiseReductionOptions(string kind = default)
        {
            return new InternalUnknownRealtimeAudioNoiseReduction(kind.ToInputNoiseReductionKind(), additionalBinaryDataProperties: null);
        }

        public static ConversationTool ConversationTool(string kind = default)
        {
            return new UnknownRealtimeTool(new ConversationToolKind(kind), additionalBinaryDataProperties: null);
        }

        public static ConversationFunctionTool ConversationFunctionTool(string name = default, string description = default, BinaryData parameters = default)
        {
            return new ConversationFunctionTool(ConversationToolKind.Function, additionalBinaryDataProperties: null, name, description, parameters);
        }

        public static ConversationContentPart ConversationContentPart(string kind = default)
        {
            return new UnknownRealtimeContentPart(new ConversationContentPartKind(kind), additionalBinaryDataProperties: null);
        }

        public static RealtimeUpdate RealtimeUpdate(string kind = default, string eventId = default)
        {
            return new UnknownRealtimeServerEvent(kind.ToRealtimeUpdateKind(), eventId, additionalBinaryDataProperties: null);
        }

        public static InputAudioCommittedUpdate InputAudioCommittedUpdate(string eventId = default, string previousItemId = default, string itemId = default)
        {
            return new InputAudioCommittedUpdate(RealtimeUpdateKind.InputAudioCommitted, eventId, additionalBinaryDataProperties: null, previousItemId, itemId);
        }

        public static InputAudioClearedUpdate InputAudioClearedUpdate(string eventId = default)
        {
            return new InputAudioClearedUpdate(RealtimeUpdateKind.InputAudioCleared, eventId, additionalBinaryDataProperties: null);
        }

        public static InputAudioSpeechStartedUpdate InputAudioSpeechStartedUpdate(string eventId = default, string itemId = default, int audioStartMs = default)
        {
            return new InputAudioSpeechStartedUpdate(RealtimeUpdateKind.InputSpeechStarted, eventId, additionalBinaryDataProperties: null, itemId, audioStartMs);
        }

        public static InputAudioSpeechFinishedUpdate InputAudioSpeechFinishedUpdate(string eventId = default, string itemId = default, int audioEndMs = default)
        {
            return new InputAudioSpeechFinishedUpdate(RealtimeUpdateKind.InputSpeechStopped, eventId, additionalBinaryDataProperties: null, itemId, audioEndMs);
        }

        public static ItemTruncatedUpdate ItemTruncatedUpdate(string eventId = default, string itemId = default, int contentIndex = default, int audioEndMs = default)
        {
            return new ItemTruncatedUpdate(
                RealtimeUpdateKind.ItemTruncated,
                eventId,
                additionalBinaryDataProperties: null,
                itemId,
                contentIndex,
                audioEndMs);
        }

        public static ItemDeletedUpdate ItemDeletedUpdate(string eventId = default, string itemId = default)
        {
            return new ItemDeletedUpdate(RealtimeUpdateKind.ItemDeleted, eventId, additionalBinaryDataProperties: null, itemId);
        }

        public static ConversationTokenUsage ConversationTokenUsage(ConversationInputTokenUsageDetails inputTokenDetails = default, ConversationOutputTokenUsageDetails outputTokenDetails = default, int inputTokenCount = default, int outputTokenCount = default, int totalTokenCount = default)
        {
            return new ConversationTokenUsage(
                inputTokenDetails,
                outputTokenDetails,
                inputTokenCount,
                outputTokenCount,
                totalTokenCount,
                additionalBinaryDataProperties: null);
        }

        public static ConversationInputTokenUsageDetails ConversationInputTokenUsageDetails(int audioTokenCount = default, int cachedTokenCount = default, int textTokenCount = default)
        {
            return new ConversationInputTokenUsageDetails(audioTokenCount, cachedTokenCount, textTokenCount, additionalBinaryDataProperties: null);
        }

        public static ConversationOutputTokenUsageDetails ConversationOutputTokenUsageDetails(int textTokenCount = default, int audioTokenCount = default)
        {
            return new ConversationOutputTokenUsageDetails(textTokenCount, audioTokenCount, additionalBinaryDataProperties: null);
        }

        public static OutputTextFinishedUpdate OutputTextFinishedUpdate(string eventId = default, string responseId = default, string itemId = default, int outputIndex = default, int contentIndex = default, string text = default)
        {
            return new OutputTextFinishedUpdate(
                RealtimeUpdateKind.ItemStreamingPartTextFinished,
                eventId,
                additionalBinaryDataProperties: null,
                responseId,
                itemId,
                outputIndex,
                contentIndex,
                text);
        }

        public static OutputAudioTranscriptionFinishedUpdate OutputAudioTranscriptionFinishedUpdate(string eventId = default, string responseId = default, string itemId = default, int outputIndex = default, int contentIndex = default, string transcript = default)
        {
            return new OutputAudioTranscriptionFinishedUpdate(
                RealtimeUpdateKind.ItemStreamingPartAudioTranscriptionFinished,
                eventId,
                additionalBinaryDataProperties: null,
                responseId,
                itemId,
                outputIndex,
                contentIndex,
                transcript);
        }

        public static OutputAudioFinishedUpdate OutputAudioFinishedUpdate(string eventId = default, string responseId = default, string itemId = default, int outputIndex = default, int contentIndex = default)
        {
            return new OutputAudioFinishedUpdate(
                RealtimeUpdateKind.ItemStreamingPartAudioFinished,
                eventId,
                additionalBinaryDataProperties: null,
                responseId,
                itemId,
                outputIndex,
                contentIndex);
        }

        public static RateLimitsUpdate RateLimitsUpdate(string eventId = default, IEnumerable<ConversationRateLimitDetailsItem> allDetails = default)
        {
            allDetails ??= new ChangeTrackingList<ConversationRateLimitDetailsItem>();

            return new RateLimitsUpdate(RealtimeUpdateKind.RateLimitsUpdated, eventId, additionalBinaryDataProperties: null, allDetails?.ToList());
        }

        public static ConversationRateLimitDetailsItem ConversationRateLimitDetailsItem(string name = default, int maximumCount = default, int remainingCount = default, TimeSpan timeUntilReset = default)
        {
            return new ConversationRateLimitDetailsItem(name, maximumCount, remainingCount, timeUntilReset, additionalBinaryDataProperties: null);
        }

        public static ItemRetrievedUpdate ItemRetrievedUpdate(string eventId = default, RealtimeItem item = default)
        {
            return new ItemRetrievedUpdate(RealtimeUpdateKind.ItemRetrieved, eventId, additionalBinaryDataProperties: null, item);
        }

        public static ThreadCreationOptions ThreadCreationOptions(IDictionary<string, string> metadata = default, ToolResources toolResources = default, IEnumerable<MessageCreationOptions> internalMessages = default)
        {
            metadata ??= new ChangeTrackingDictionary<string, string>();
            internalMessages ??= new ChangeTrackingList<MessageCreationOptions>();

            return new ThreadCreationOptions(metadata, toolResources, internalMessages?.ToList(), additionalBinaryDataProperties: null);
        }

        public static AssistantThread AssistantThread(string id = default, DateTimeOffset createdAt = default, IReadOnlyDictionary<string, string> metadata = default, string @object = default, ToolResources toolResources = default)
        {
            metadata ??= new ChangeTrackingDictionary<string, string>();

            return new AssistantThread(
                id,
                createdAt,
                metadata,
                @object,
                toolResources,
                additionalBinaryDataProperties: null);
        }

        public static ThreadModificationOptions ThreadModificationOptions(IDictionary<string, string> metadata = default, ToolResources toolResources = default)
        {
            metadata ??= new ChangeTrackingDictionary<string, string>();

            return new ThreadModificationOptions(metadata, toolResources, additionalBinaryDataProperties: null);
        }

        public static ThreadDeletionResult ThreadDeletionResult(bool deleted = default, string threadId = default, string @object = default)
        {
            return new ThreadDeletionResult(deleted, threadId, @object, additionalBinaryDataProperties: null);
        }

        public static RunError RunError(RunErrorCode code = default, string message = default)
        {
            return new RunError(code, message, additionalBinaryDataProperties: null);
        }

        public static RunIncompleteDetails RunIncompleteDetails(RunIncompleteReason? reason = default)
        {
            return new RunIncompleteDetails(reason, additionalBinaryDataProperties: null);
        }

        public static RunTokenUsage RunTokenUsage(int outputTokenCount = default, int inputTokenCount = default, int totalTokenCount = default)
        {
            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<MessageCreationOptions> internalMessages = default, bool? allowParallelToolCalls = default, IEnumerable<ToolDefinition> toolsOverride = default, IDictionary<string, string> 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<MessageCreationOptions>();
            toolsOverride ??= new ChangeTrackingList<ToolDefinition>();
            metadata ??= new ChangeTrackingDictionary<string, string>();

            return new RunCreationOptions(
                assistantId,
                stream,
                responseFormat,
                modelOverride,
                instructionsOverride,
                additionalInstructions,
                internalMessages?.ToList(),
                allowParallelToolCalls,
                toolsOverride?.ToList(),
                metadata,
                temperature,
                nucleusSamplingFactor,
                maxInputTokenCount,
                maxOutputTokenCount,
                truncationStrategy,
                toolConstraint,
                reasoningEffortLevel,
                additionalBinaryDataProperties: null);
        }

        public static RunModificationOptions RunModificationOptions(IDictionary<string, string> metadata = default)
        {
            metadata ??= new ChangeTrackingDictionary<string, string>();

            return new RunModificationOptions(metadata, additionalBinaryDataProperties: null);
        }

        public static ToolOutput ToolOutput(string toolCallId = default, string output = default)
        {
            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, RunStepKind kind = default, RunStepStatus status = default, RunStepError lastError = default, DateTimeOffset? expiredAt = default, DateTimeOffset? cancelledAt = default, DateTimeOffset? failedAt = default, DateTimeOffset? completedAt = default, IReadOnlyDictionary<string, string> metadata = default, RunStepTokenUsage usage = default, string @object = default, RunStepDetails details = default)
        {
            metadata ??= new ChangeTrackingDictionary<string, string>();

            return new RunStep(
                id,
                createdAt,
                assistantId,
                threadId,
                runId,
                kind,
                status,
                lastError,
                expiredAt,
                cancelledAt,
                failedAt,
                completedAt,
                metadata,
                usage,
                @object,
                details,
                additionalBinaryDataProperties: null);
        }

        public static RunStepToolCall RunStepToolCall(string kind = default, string id = default)
        {
            return new UnknownRunStepDetailsToolCallsObjectToolCallsObject(kind.ToRunStepToolCallKind(), id, additionalBinaryDataProperties: null);
        }

        public static RunStepFileSearchResult RunStepFileSearchResult(string fileId = default, string fileName = default, float score = default, IEnumerable<RunStepFileSearchResultContent> content = default)
        {
            content ??= new ChangeTrackingList<RunStepFileSearchResultContent>();

            return new RunStepFileSearchResult(fileId, fileName, score, content?.ToList(), additionalBinaryDataProperties: null);
        }

        public static RunStepFileSearchResultContent RunStepFileSearchResultContent(string text = default, RunStepFileSearchResultContentKind kind = default)
        {
            return new RunStepFileSearchResultContent(text, kind, additionalBinaryDataProperties: null);
        }

        public static RunStepError RunStepError(RunStepErrorCode code = default, string message = default)
        {
            return new RunStepError(code, message, additionalBinaryDataProperties: null);
        }

        public static RunStepTokenUsage RunStepTokenUsage(int outputTokenCount = default, int inputTokenCount = default, int totalTokenCount = default)
        {
            return new RunStepTokenUsage(outputTokenCount, inputTokenCount, totalTokenCount, additionalBinaryDataProperties: null);
        }

        public static VectorStore VectorStore(string id = default, DateTimeOffset createdAt = default, string name = default, int usageBytes = default, VectorStoreFileCounts fileCounts = default, VectorStoreStatus status = default, DateTimeOffset? expiresAt = default, DateTimeOffset? lastActiveAt = default, IReadOnlyDictionary<string, string> metadata = default, string @object = default, VectorStoreExpirationPolicy expirationPolicy = default)
        {
            metadata ??= new ChangeTrackingDictionary<string, string>();

            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)
        {
            return new VectorStoreFileCounts(
                inProgress,
                completed,
                failed,
                cancelled,
                total,
                additionalBinaryDataProperties: null);
        }

        public static VectorStoreExpirationPolicy VectorStoreExpirationPolicy(int days = default, VectorStoreExpirationAnchor anchor = default)
        {
            return new VectorStoreExpirationPolicy(days, anchor, additionalBinaryDataProperties: null);
        }

        public static VectorStoreCreationOptions VectorStoreCreationOptions(IEnumerable<string> fileIds = default, string name = default, IDictionary<string, string> metadata = default, VectorStoreExpirationPolicy expirationPolicy = default, FileChunkingStrategy chunkingStrategy = default)
        {
            fileIds ??= new ChangeTrackingList<string>();
            metadata ??= new ChangeTrackingDictionary<string, string>();

            return new VectorStoreCreationOptions(
                fileIds?.ToList(),
                name,
                metadata,
                expirationPolicy,
                chunkingStrategy,
                additionalBinaryDataProperties: null);
        }

        public static VectorStoreModificationOptions VectorStoreModificationOptions(string name = default, IDictionary<string, string> metadata = default, VectorStoreExpirationPolicy expirationPolicy = default)
        {
            metadata ??= new ChangeTrackingDictionary<string, string>();

            return new VectorStoreModificationOptions(name, metadata, expirationPolicy, additionalBinaryDataProperties: null);
        }

        public static VectorStoreDeletionResult VectorStoreDeletionResult(bool deleted = default, string vectorStoreId = default, string @object = default)
        {
            return new VectorStoreDeletionResult(deleted, vectorStoreId, @object, 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,
                batchId,
                fileCounts,
                @object,
                additionalBinaryDataProperties: null);
        }

        public static VectorStoreFileAssociation VectorStoreFileAssociation(DateTimeOffset createdAt = default, string vectorStoreId = default, VectorStoreFileAssociationStatus status = default, VectorStoreFileAssociationError lastError = default, string @object = default, string fileId = default, int size = default, IDictionary<string, BinaryData> attributes = default, FileChunkingStrategy chunkingStrategy = default)
        {
            attributes ??= new ChangeTrackingDictionary<string, BinaryData>();

            return new VectorStoreFileAssociation(
                createdAt,
                vectorStoreId,
                status,
                lastError,
                @object,
                fileId,
                size,
                attributes,
                chunkingStrategy,
                additionalBinaryDataProperties: null);
        }

        public static VectorStoreFileAssociationError VectorStoreFileAssociationError(VectorStoreFileAssociationErrorCode code = default, string message = default)
        {
            return new VectorStoreFileAssociationError(code, message, additionalBinaryDataProperties: null);
        }

        public static FileFromStoreRemovalResult FileFromStoreRemovalResult(string fileId = default, bool removed = default, string @object = default)
        {
            return new FileFromStoreRemovalResult(fileId, removed, @object, additionalBinaryDataProperties: null);
        }

        public static AudioTranscription AudioTranscription(string language = default, string text = default, IEnumerable<TranscribedWord> words = default, IEnumerable<TranscribedSegment> segments = default, string task = default, TimeSpan? duration = default, IEnumerable<AudioTokenLogProbabilityDetails> transcriptionTokenLogProbabilities = default)
        {
            words ??= new ChangeTrackingList<TranscribedWord>();
            segments ??= new ChangeTrackingList<TranscribedSegment>();
            transcriptionTokenLogProbabilities ??= new ChangeTrackingList<AudioTokenLogProbabilityDetails>();

            return new AudioTranscription(
                language,
                text,
                words?.ToList(),
                segments?.ToList(),
                task,
                duration,
                transcriptionTokenLogProbabilities?.ToList(),
                additionalBinaryDataProperties: null);
        }

        public static AudioTokenLogProbabilityDetails AudioTokenLogProbabilityDetails(string token = default, float logProbability = default, ReadOnlyMemory<byte> utf8Bytes = default)
        {
            return new AudioTokenLogProbabilityDetails(token, logProbability, utf8Bytes, additionalBinaryDataProperties: null);
        }

        public static ChatFunctionChoice ChatFunctionChoice(string predefinedFunctionChoice = default)
        {
            return new ChatFunctionChoice(predefinedFunctionChoice);
        }

        public static ChatToolChoice ChatToolChoice()
        {
            return new ChatToolChoice(additionalBinaryDataProperties: null);
        }
    }
}
