From 5b03c194b266a25ee4f8751aafb15b6f8a738bd5 Mon Sep 17 00:00:00 2001 From: Jose Arriaga Maldonado Date: Tue, 18 Feb 2025 11:32:29 -0800 Subject: [PATCH] Prepare 2.2.0-beta.2 release (Part 1) --- CHANGELOG.md | 8 + api/OpenAI.net8.0.cs | 3181 +++++++++++++++++ api/OpenAI.netstandard2.0.cs | 136 +- src/Custom/Chat/ChatClient.cs | 17 +- .../ChatCompletionOptions.Serialization.cs | 15 +- src/Custom/Chat/ChatCompletionOptions.cs | 60 +- src/Custom/Chat/OpenAIChatModelFactory.cs | 122 +- .../StreamingChatCompletionUpdate.cs | 2 +- .../OpenAIModerationsModelFactory.cs | 21 + .../ChatCompletionOptions.Serialization.cs | 103 +- src/Generated/Models/ChatCompletionOptions.cs | 6 +- src/Generated/OpenAIModelFactory.cs | 6 +- tests/Chat/ChatSmokeTests.cs | 32 + tests/Chat/ChatTests.cs | 58 + 14 files changed, 3524 insertions(+), 243 deletions(-) create mode 100644 api/OpenAI.net8.0.cs diff --git a/CHANGELOG.md b/CHANGELOG.md index 06366df59..4b175d342 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Release History +## 2.2.0-beta.2 (Unreleased) + +### Bugs fixed + +- Fixed a bug that caused `CompleteChatStreaming*()` with audio-enabled models to fail unless provided a `ChatCompletionOptions` instance that had previously been used for a non-streaming `CompleteChat()*` call +- Addressed an issue that caused calls to `CompleteChatStreaming*()` to not report usage when provided a `ChatCompletionOptions` instance that was previously used in a non-streaming `CompleteChat*()` call +- Addressed issues with standalone serialization and deserialization of `ChatCompletionOptions` that impacted the ability to manipulate chat completion requests via `System.ClientModel.Primitives.ModelReaderWriter` and related utilities + ## 2.2.0-beta.1 (2025-02-07) ### Features added diff --git a/api/OpenAI.net8.0.cs b/api/OpenAI.net8.0.cs new file mode 100644 index 000000000..db067ca29 --- /dev/null +++ b/api/OpenAI.net8.0.cs @@ -0,0 +1,3181 @@ +namespace OpenAI { + public class OpenAIClient { + protected OpenAIClient(); + public OpenAIClient(ApiKeyCredential credential, OpenAIClientOptions options); + public OpenAIClient(ApiKeyCredential credential); + protected internal OpenAIClient(ClientPipeline pipeline, OpenAIClientOptions options); + public OpenAIClient(string apiKey); + public ClientPipeline Pipeline { get; } + [Experimental("OPENAI001")] + public virtual AssistantClient GetAssistantClient(); + public virtual AudioClient GetAudioClient(string model); + [Experimental("OPENAI001")] + public virtual BatchClient GetBatchClient(); + public virtual ChatClient GetChatClient(string model); + public virtual EmbeddingClient GetEmbeddingClient(string model); + [Experimental("OPENAI001")] + public virtual FineTuningClient GetFineTuningClient(); + public virtual ImageClient GetImageClient(string model); + public virtual ModerationClient GetModerationClient(string model); + public virtual OpenAIFileClient GetOpenAIFileClient(); + public virtual OpenAIModelClient GetOpenAIModelClient(); + [Experimental("OPENAI002")] + public virtual RealtimeConversation.RealtimeConversationClient GetRealtimeConversationClient(string model); + [Experimental("OPENAI001")] + public virtual VectorStoreClient GetVectorStoreClient(); + } + public class OpenAIClientOptions : ClientPipelineOptions { + public Uri Endpoint { get; set; } + public string OrganizationId { get; set; } + public string ProjectId { get; set; } + public string UserAgentApplicationId { get; set; } + } +} +namespace OpenAI.Assistants { + [Experimental("OPENAI001")] + public class Assistant : IJsonModel, IPersistableModel { + public DateTimeOffset CreatedAt { get; } + public string Description { get; } + public string Id { get; } + public string Instructions { get; } + public IReadOnlyDictionary Metadata { get; } + public string Model { get; } + public string Name { get; } + public float? NucleusSamplingFactor { get; } + public AssistantResponseFormat ResponseFormat { get; } + public float? Temperature { get; } + public ToolResources ToolResources { get; } + public IReadOnlyList Tools { get; } + public static explicit operator Assistant(ClientResult result); + public static implicit operator BinaryContent(Assistant assistant); + } + [Experimental("OPENAI001")] + public class AssistantClient { + protected AssistantClient(); + public AssistantClient(ApiKeyCredential credential, OpenAIClientOptions options); + public AssistantClient(ApiKeyCredential credential); + protected internal AssistantClient(ClientPipeline pipeline, OpenAIClientOptions options); + public AssistantClient(string apiKey); + public ClientPipeline Pipeline { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CancelRun(string threadId, string runId, RequestOptions options); + public virtual ClientResult CancelRun(string threadId, string runId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CancelRunAsync(string threadId, string runId, RequestOptions options); + public virtual Task> CancelRunAsync(string threadId, string runId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CreateAssistant(BinaryContent content, RequestOptions options = null); + public virtual ClientResult CreateAssistant(string model, AssistantCreationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CreateAssistantAsync(BinaryContent content, RequestOptions options = null); + public virtual Task> CreateAssistantAsync(string model, AssistantCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult CreateMessage(string threadId, MessageRole role, IEnumerable content, MessageCreationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CreateMessage(string threadId, BinaryContent content, RequestOptions options = null); + public virtual Task> CreateMessageAsync(string threadId, MessageRole role, IEnumerable content, MessageCreationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CreateMessageAsync(string threadId, BinaryContent content, RequestOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CreateRun(string threadId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult CreateRun(string threadId, string assistantId, RunCreationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CreateRunAsync(string threadId, BinaryContent content, RequestOptions options = null); + public virtual Task> CreateRunAsync(string threadId, string assistantId, RunCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult CreateRunStreaming(string threadId, string assistantId, RunCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult CreateRunStreamingAsync(string threadId, string assistantId, RunCreationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult CreateThread(ThreadCreationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CreateThread(BinaryContent content, RequestOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CreateThreadAndRun(BinaryContent content, RequestOptions options = null); + public virtual ClientResult CreateThreadAndRun(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CreateThreadAndRunAsync(BinaryContent content, RequestOptions options = null); + public virtual Task> CreateThreadAndRunAsync(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null, CancellationToken cancellationToken = default); + public virtual CollectionResult CreateThreadAndRunStreaming(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult CreateThreadAndRunStreamingAsync(string assistantId, ThreadCreationOptions threadOptions = null, RunCreationOptions runOptions = null, CancellationToken cancellationToken = default); + public virtual Task> CreateThreadAsync(ThreadCreationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CreateThreadAsync(BinaryContent content, RequestOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult DeleteAssistant(string assistantId, RequestOptions options); + public virtual ClientResult DeleteAssistant(string assistantId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task DeleteAssistantAsync(string assistantId, RequestOptions options); + public virtual Task> DeleteAssistantAsync(string assistantId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult DeleteMessage(string threadId, string messageId, RequestOptions options); + public virtual ClientResult DeleteMessage(string threadId, string messageId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task DeleteMessageAsync(string threadId, string messageId, RequestOptions options); + public virtual Task> DeleteMessageAsync(string threadId, string messageId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult DeleteThread(string threadId, RequestOptions options); + public virtual ClientResult DeleteThread(string threadId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task DeleteThreadAsync(string threadId, RequestOptions options); + public virtual Task> DeleteThreadAsync(string threadId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetAssistant(string assistantId, RequestOptions options); + public virtual ClientResult GetAssistant(string assistantId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetAssistantAsync(string assistantId, RequestOptions options); + public virtual Task> GetAssistantAsync(string assistantId, CancellationToken cancellationToken = default); + public virtual CollectionResult GetAssistants(AssistantCollectionOptions options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult GetAssistants(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual CollectionResult GetAssistants(int? limit, string order, string after, string before, RequestOptions options); + public virtual AsyncCollectionResult GetAssistantsAsync(AssistantCollectionOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetAssistantsAsync(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual AsyncCollectionResult GetAssistantsAsync(int? limit, string order, string after, string before, RequestOptions options); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetMessage(string threadId, string messageId, RequestOptions options); + public virtual ClientResult GetMessage(string threadId, string messageId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetMessageAsync(string threadId, string messageId, RequestOptions options); + public virtual Task> GetMessageAsync(string threadId, string messageId, CancellationToken cancellationToken = default); + public virtual CollectionResult GetMessages(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + public virtual CollectionResult GetMessages(string threadId, MessageCollectionOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual CollectionResult GetMessages(string threadId, int? limit, string order, string after, string before, RequestOptions options); + public virtual AsyncCollectionResult GetMessagesAsync(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetMessagesAsync(string threadId, MessageCollectionOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual AsyncCollectionResult GetMessagesAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetRun(string threadId, string runId, RequestOptions options); + public virtual ClientResult GetRun(string threadId, string runId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetRunAsync(string threadId, string runId, RequestOptions options); + public virtual Task> GetRunAsync(string threadId, string runId, CancellationToken cancellationToken = default); + public virtual CollectionResult GetRuns(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + public virtual CollectionResult GetRuns(string threadId, RunCollectionOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual CollectionResult GetRuns(string threadId, int? limit, string order, string after, string before, RequestOptions options); + public virtual AsyncCollectionResult GetRunsAsync(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetRunsAsync(string threadId, RunCollectionOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual AsyncCollectionResult GetRunsAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetRunStep(string threadId, string runId, string stepId, RequestOptions options); + public virtual ClientResult GetRunStep(string threadId, string runId, string stepId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetRunStepAsync(string threadId, string runId, string stepId, RequestOptions options); + public virtual Task> GetRunStepAsync(string threadId, string runId, string stepId, CancellationToken cancellationToken = default); + public virtual CollectionResult GetRunSteps(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + public virtual CollectionResult GetRunSteps(string threadId, string runId, RunStepCollectionOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual CollectionResult GetRunSteps(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options); + public virtual AsyncCollectionResult GetRunStepsAsync(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetRunStepsAsync(string threadId, string runId, RunStepCollectionOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual AsyncCollectionResult GetRunStepsAsync(string threadId, string runId, int? limit, string order, string after, string before, RequestOptions options); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetThread(string threadId, RequestOptions options); + public virtual ClientResult GetThread(string threadId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetThreadAsync(string threadId, RequestOptions options); + public virtual Task> GetThreadAsync(string threadId, CancellationToken cancellationToken = default); + public virtual ClientResult ModifyAssistant(string assistantId, AssistantModificationOptions options, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult ModifyAssistant(string assistantId, BinaryContent content, RequestOptions options = null); + public virtual Task> ModifyAssistantAsync(string assistantId, AssistantModificationOptions options, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task ModifyAssistantAsync(string assistantId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult ModifyMessage(string threadId, string messageId, MessageModificationOptions options, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult ModifyMessage(string threadId, string messageId, BinaryContent content, RequestOptions options = null); + public virtual Task> ModifyMessageAsync(string threadId, string messageId, MessageModificationOptions options, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task ModifyMessageAsync(string threadId, string messageId, BinaryContent content, RequestOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult ModifyRun(string threadId, string runId, BinaryContent content, RequestOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task ModifyRunAsync(string threadId, string runId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult ModifyThread(string threadId, ThreadModificationOptions options, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult ModifyThread(string threadId, BinaryContent content, RequestOptions options = null); + public virtual Task> ModifyThreadAsync(string threadId, ThreadModificationOptions options, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task ModifyThreadAsync(string threadId, BinaryContent content, RequestOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult SubmitToolOutputsToRun(string threadId, string runId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult SubmitToolOutputsToRun(string threadId, string runId, IEnumerable toolOutputs, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task SubmitToolOutputsToRunAsync(string threadId, string runId, BinaryContent content, RequestOptions options = null); + public virtual Task> SubmitToolOutputsToRunAsync(string threadId, string runId, IEnumerable toolOutputs, CancellationToken cancellationToken = default); + public virtual CollectionResult SubmitToolOutputsToRunStreaming(string threadId, string runId, IEnumerable toolOutputs, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult SubmitToolOutputsToRunStreamingAsync(string threadId, string runId, IEnumerable toolOutputs, CancellationToken cancellationToken = default); + } + [Experimental("OPENAI001")] + public class AssistantCollectionOptions { + public string AfterId { get; set; } + public string BeforeId { get; set; } + public AssistantCollectionOrder? Order { get; set; } + public int? PageSizeLimit { get; set; } + } + [Experimental("OPENAI001")] + public readonly partial struct AssistantCollectionOrder : IEquatable { + public AssistantCollectionOrder(string value); + public static AssistantCollectionOrder Ascending { get; } + public static AssistantCollectionOrder Descending { get; } + public readonly bool Equals(AssistantCollectionOrder other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(AssistantCollectionOrder left, AssistantCollectionOrder right); + public static implicit operator AssistantCollectionOrder(string value); + public static bool operator !=(AssistantCollectionOrder left, AssistantCollectionOrder right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class AssistantCreationOptions : IJsonModel, IPersistableModel { + public string Description { get; set; } + public string Instructions { get; set; } + public IDictionary Metadata { get; } + public string Name { get; set; } + public float? NucleusSamplingFactor { get; set; } + public AssistantResponseFormat ResponseFormat { get; set; } + public float? Temperature { get; set; } + public ToolResources ToolResources { get; set; } + public IList Tools { get; } + public static explicit operator AssistantCreationOptions(ClientResult result); + public static implicit operator BinaryContent(AssistantCreationOptions assistantCreationOptions); + } + [Experimental("OPENAI001")] + public class AssistantDeletionResult : IJsonModel, IPersistableModel { + public string AssistantId { get; } + public bool Deleted { get; } + public static explicit operator AssistantDeletionResult(ClientResult result); + public static implicit operator BinaryContent(AssistantDeletionResult assistantDeletionResult); + } + [Experimental("OPENAI001")] + public class AssistantModificationOptions : IJsonModel, IPersistableModel { + public IList DefaultTools { get; } + public string Description { get; set; } + public string Instructions { get; set; } + public IDictionary Metadata { get; } + public string Model { get; set; } + public string Name { get; set; } + public float? NucleusSamplingFactor { get; set; } + public AssistantResponseFormat ResponseFormat { get; set; } + public float? Temperature { get; set; } + public ToolResources ToolResources { get; set; } + public static explicit operator AssistantModificationOptions(ClientResult result); + public static implicit operator BinaryContent(AssistantModificationOptions assistantModificationOptions); + } + [Experimental("OPENAI001")] + public abstract class AssistantResponseFormat : IEquatable, IEquatable, IJsonModel, IPersistableModel { + public static AssistantResponseFormat Auto { get; } + public static AssistantResponseFormat JsonObject { get; } + public static AssistantResponseFormat Text { get; } + public static AssistantResponseFormat CreateAutoFormat(); + public static AssistantResponseFormat CreateJsonObjectFormat(); + public static AssistantResponseFormat CreateJsonSchemaFormat(string name, BinaryData jsonSchema, string description = null, bool? strictSchemaEnabled = null); + public static AssistantResponseFormat CreateTextFormat(); + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode(); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(AssistantResponseFormat first, AssistantResponseFormat second); + public static explicit operator AssistantResponseFormat(ClientResult result); + public static implicit operator BinaryContent(AssistantResponseFormat assistantResponseFormat); + [EditorBrowsable(EditorBrowsableState.Never)] + public static implicit operator AssistantResponseFormat(string plainTextFormat); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(AssistantResponseFormat first, AssistantResponseFormat second); + [EditorBrowsable(EditorBrowsableState.Never)] + bool IEquatable.Equals(AssistantResponseFormat other); + [EditorBrowsable(EditorBrowsableState.Never)] + bool IEquatable.Equals(string other); + public override string ToString(); + } + [Experimental("OPENAI001")] + public class AssistantThread : IJsonModel, IPersistableModel { + public DateTimeOffset CreatedAt { get; } + public string Id { get; } + public IReadOnlyDictionary Metadata { get; } + public ToolResources ToolResources { get; } + public static explicit operator AssistantThread(ClientResult result); + public static implicit operator BinaryContent(AssistantThread assistantThread); + } + [Experimental("OPENAI001")] + public class CodeInterpreterToolDefinition : ToolDefinition, IJsonModel, IPersistableModel { + public new static explicit operator CodeInterpreterToolDefinition(ClientResult result); + public static implicit operator BinaryContent(CodeInterpreterToolDefinition codeInterpreterToolDefinition); + } + [Experimental("OPENAI001")] + public class CodeInterpreterToolResources : IJsonModel, IPersistableModel { + public IList FileIds { get; } + public static explicit operator CodeInterpreterToolResources(ClientResult result); + public static implicit operator BinaryContent(CodeInterpreterToolResources codeInterpreterToolResources); + } + [Experimental("OPENAI001")] + public readonly partial struct FileSearchRanker : IEquatable { + public FileSearchRanker(string value); + public static FileSearchRanker Auto { get; } + public static FileSearchRanker Default20240821 { get; } + public readonly bool Equals(FileSearchRanker other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(FileSearchRanker left, FileSearchRanker right); + public static implicit operator FileSearchRanker(string value); + public static bool operator !=(FileSearchRanker left, FileSearchRanker right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class FileSearchRankingOptions : IJsonModel, IPersistableModel { + public FileSearchRankingOptions(); + [SetsRequiredMembers] + public FileSearchRankingOptions(float scoreThreshold); + public FileSearchRanker? Ranker { get; set; } + public required float ScoreThreshold { get; set; } + public static explicit operator FileSearchRankingOptions(ClientResult result); + public static implicit operator BinaryContent(FileSearchRankingOptions fileSearchRankingOptions); + } + [Experimental("OPENAI001")] + public class FileSearchToolDefinition : ToolDefinition, IJsonModel, IPersistableModel { + public int? MaxResults { get; set; } + public FileSearchRankingOptions RankingOptions { get; set; } + public new static explicit operator FileSearchToolDefinition(ClientResult result); + public static implicit operator BinaryContent(FileSearchToolDefinition fileSearchToolDefinition); + } + [Experimental("OPENAI001")] + public class FileSearchToolResources : IJsonModel, IPersistableModel { + public IList NewVectorStores { get; } + public IList VectorStoreIds { get; } + public static explicit operator FileSearchToolResources(ClientResult result); + public static implicit operator BinaryContent(FileSearchToolResources fileSearchToolResources); + } + [Experimental("OPENAI001")] + public class FunctionToolDefinition : ToolDefinition, IJsonModel, IPersistableModel { + public FunctionToolDefinition(); + [SetsRequiredMembers] + public FunctionToolDefinition(string name); + public string Description { get; set; } + public required string FunctionName { get; set; } + public BinaryData Parameters { get; set; } + public bool? StrictParameterSchemaEnabled { get; set; } + public new static explicit operator FunctionToolDefinition(ClientResult result); + public static implicit operator BinaryContent(FunctionToolDefinition functionToolDefinition); + } + [Experimental("OPENAI001")] + public class MessageCollectionOptions { + public string AfterId { get; set; } + public string BeforeId { get; set; } + public MessageCollectionOrder? Order { get; set; } + public int? PageSizeLimit { get; set; } + } + [Experimental("OPENAI001")] + public readonly partial struct MessageCollectionOrder : IEquatable { + public MessageCollectionOrder(string value); + public static MessageCollectionOrder Ascending { get; } + public static MessageCollectionOrder Descending { get; } + public readonly bool Equals(MessageCollectionOrder other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(MessageCollectionOrder left, MessageCollectionOrder right); + public static implicit operator MessageCollectionOrder(string value); + public static bool operator !=(MessageCollectionOrder left, MessageCollectionOrder right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public abstract class MessageContent : IJsonModel, IPersistableModel { + public MessageImageDetail? ImageDetail { get; } + public string ImageFileId { get; } + public Uri ImageUri { get; } + public string Refusal { get; } + public string Text { get; } + public IReadOnlyList TextAnnotations { get; } + public static MessageContent FromImageFileId(string imageFileId, MessageImageDetail? detail = null); + public static MessageContent FromImageUri(Uri imageUri, MessageImageDetail? detail = null); + public static MessageContent FromText(string text); + public static explicit operator MessageContent(ClientResult result); + public static implicit operator BinaryContent(MessageContent messageContent); + public static implicit operator MessageContent(string value); + } + [Experimental("OPENAI001")] + public class MessageContentUpdate : StreamingUpdate { + public MessageImageDetail? ImageDetail { get; } + public string ImageFileId { get; } + public string MessageId { get; } + public int MessageIndex { get; } + public string RefusalUpdate { get; } + public MessageRole? Role { get; } + public string Text { get; } + public TextAnnotationUpdate TextAnnotation { get; } + } + [Experimental("OPENAI001")] + public class MessageCreationAttachment : IJsonModel, IPersistableModel { + public MessageCreationAttachment(string fileId, IEnumerable tools); + public string FileId { get; } + public IReadOnlyList Tools { get; } + public static explicit operator MessageCreationAttachment(ClientResult result); + public static implicit operator BinaryContent(MessageCreationAttachment messageCreationAttachment); + } + [Experimental("OPENAI001")] + public class MessageCreationOptions : IJsonModel, IPersistableModel { + public IList Attachments { get; set; } + public IDictionary Metadata { get; } + public static explicit operator MessageCreationOptions(ClientResult result); + public static implicit operator BinaryContent(MessageCreationOptions messageCreationOptions); + } + [Experimental("OPENAI001")] + public class MessageDeletionResult : IJsonModel, IPersistableModel { + public bool Deleted { get; } + public string MessageId { get; } + public static explicit operator MessageDeletionResult(ClientResult result); + public static implicit operator BinaryContent(MessageDeletionResult messageDeletionResult); + } + [Experimental("OPENAI001")] + public class MessageFailureDetails : IJsonModel, IPersistableModel { + public MessageFailureReason Reason { get; } + public static explicit operator MessageFailureDetails(ClientResult result); + public static implicit operator BinaryContent(MessageFailureDetails messageFailureDetails); + } + [Experimental("OPENAI001")] + public readonly partial struct MessageFailureReason : IEquatable { + public MessageFailureReason(string value); + public static MessageFailureReason ContentFilter { get; } + public static MessageFailureReason MaxTokens { get; } + public static MessageFailureReason RunCancelled { get; } + public static MessageFailureReason RunExpired { get; } + public static MessageFailureReason RunFailed { get; } + public readonly bool Equals(MessageFailureReason other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(MessageFailureReason left, MessageFailureReason right); + public static implicit operator MessageFailureReason(string value); + public static bool operator !=(MessageFailureReason left, MessageFailureReason right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public enum MessageImageDetail { + Auto = 0, + Low = 1, + High = 2 + } + [Experimental("OPENAI001")] + public class MessageModificationOptions : IJsonModel, IPersistableModel { + public IDictionary Metadata { get; } + public static explicit operator MessageModificationOptions(ClientResult result); + public static implicit operator BinaryContent(MessageModificationOptions messageModificationOptions); + } + [Experimental("OPENAI001")] + public enum MessageRole { + User = 0, + Assistant = 1 + } + [Experimental("OPENAI001")] + public readonly partial struct MessageStatus : IEquatable { + public MessageStatus(string value); + public static MessageStatus Completed { get; } + public static MessageStatus Incomplete { get; } + public static MessageStatus InProgress { get; } + public readonly bool Equals(MessageStatus other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(MessageStatus left, MessageStatus right); + public static implicit operator MessageStatus(string value); + public static bool operator !=(MessageStatus left, MessageStatus right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class MessageStatusUpdate : StreamingUpdate { + } + [Experimental("OPENAI001")] + public abstract class RequiredAction { + public string FunctionArguments { get; } + public string FunctionName { get; } + public string ToolCallId { get; } + } + [Experimental("OPENAI001")] + public class RequiredActionUpdate : RunUpdate { + public string FunctionArguments { get; } + public string FunctionName { get; } + public string ToolCallId { get; } + public ThreadRun GetThreadRun(); + } + [Experimental("OPENAI001")] + public class RunCollectionOptions { + public string AfterId { get; set; } + public string BeforeId { get; set; } + public RunCollectionOrder? Order { get; set; } + public int? PageSizeLimit { get; set; } + } + [Experimental("OPENAI001")] + public readonly partial struct RunCollectionOrder : IEquatable { + public RunCollectionOrder(string value); + public static RunCollectionOrder Ascending { get; } + public static RunCollectionOrder Descending { get; } + public readonly bool Equals(RunCollectionOrder other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(RunCollectionOrder left, RunCollectionOrder right); + public static implicit operator RunCollectionOrder(string value); + public static bool operator !=(RunCollectionOrder left, RunCollectionOrder right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class RunCreationOptions : IJsonModel, IPersistableModel { + public string AdditionalInstructions { get; set; } + public IList AdditionalMessages { get; } + public bool? AllowParallelToolCalls { get; set; } + public string InstructionsOverride { get; set; } + public int? MaxInputTokenCount { get; set; } + public int? MaxOutputTokenCount { get; set; } + public IDictionary Metadata { get; } + public string ModelOverride { get; set; } + public float? NucleusSamplingFactor { get; set; } + public AssistantResponseFormat ResponseFormat { get; set; } + public float? Temperature { get; set; } + public ToolConstraint ToolConstraint { get; set; } + public IList ToolsOverride { get; } + public RunTruncationStrategy TruncationStrategy { get; set; } + public static explicit operator RunCreationOptions(ClientResult result); + public static implicit operator BinaryContent(RunCreationOptions runCreationOptions); + } + [Experimental("OPENAI001")] + public class RunError : IJsonModel, IPersistableModel { + public RunErrorCode Code { get; } + public string Message { get; } + public static explicit operator RunError(ClientResult result); + public static implicit operator BinaryContent(RunError runError); + } + [Experimental("OPENAI001")] + public readonly partial struct RunErrorCode : IEquatable { + public RunErrorCode(string value); + public static RunErrorCode InvalidPrompt { get; } + public static RunErrorCode RateLimitExceeded { get; } + public static RunErrorCode ServerError { get; } + public readonly bool Equals(RunErrorCode other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(RunErrorCode left, RunErrorCode right); + public static implicit operator RunErrorCode(string value); + public static bool operator !=(RunErrorCode left, RunErrorCode right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class RunIncompleteDetails : IJsonModel, IPersistableModel { + public RunIncompleteReason? Reason { get; } + public static explicit operator RunIncompleteDetails(ClientResult result); + public static implicit operator BinaryContent(RunIncompleteDetails runIncompleteDetails); + } + [Experimental("OPENAI001")] + public readonly partial struct RunIncompleteReason : IEquatable { + public RunIncompleteReason(string value); + public static RunIncompleteReason MaxInputTokenCount { get; } + public static RunIncompleteReason MaxOutputTokenCount { get; } + public readonly bool Equals(RunIncompleteReason other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(RunIncompleteReason left, RunIncompleteReason right); + public static implicit operator RunIncompleteReason(string value); + public static bool operator !=(RunIncompleteReason left, RunIncompleteReason right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class RunModificationOptions : IJsonModel, IPersistableModel { + public IDictionary Metadata { get; } + public static explicit operator RunModificationOptions(ClientResult result); + public static implicit operator BinaryContent(RunModificationOptions runModificationOptions); + } + [Experimental("OPENAI001")] + public readonly partial struct RunStatus : IEquatable { + public RunStatus(string value); + public static RunStatus Cancelled { get; } + public static RunStatus Cancelling { get; } + public static RunStatus Completed { get; } + public static RunStatus Expired { get; } + public static RunStatus Failed { get; } + public static RunStatus Incomplete { get; } + public static RunStatus InProgress { get; } + public bool IsTerminal { get; } + public static RunStatus Queued { get; } + public static RunStatus RequiresAction { get; } + public readonly bool Equals(RunStatus other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(RunStatus left, RunStatus right); + public static implicit operator RunStatus(string value); + public static bool operator !=(RunStatus left, RunStatus right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class RunStep : IJsonModel, IPersistableModel { + public string AssistantId { get; } + public DateTimeOffset? CancelledAt { get; } + public DateTimeOffset? CompletedAt { get; } + public DateTimeOffset CreatedAt { get; } + public RunStepDetails Details { get; } + public DateTimeOffset? ExpiredAt { get; } + public DateTimeOffset? FailedAt { get; } + public string Id { get; } + public RunStepKind Kind { get; } + public RunStepError LastError { get; } + public IReadOnlyDictionary Metadata { get; } + public string RunId { get; } + public RunStepStatus Status { get; } + public string ThreadId { get; } + public RunStepTokenUsage Usage { get; } + public static explicit operator RunStep(ClientResult result); + public static implicit operator BinaryContent(RunStep runStep); + } + [Experimental("OPENAI001")] + public abstract class RunStepCodeInterpreterOutput : IJsonModel, IPersistableModel { + public string ImageFileId { get; } + public string Logs { get; } + public static explicit operator RunStepCodeInterpreterOutput(ClientResult result); + public static implicit operator BinaryContent(RunStepCodeInterpreterOutput runStepCodeInterpreterOutput); + } + [Experimental("OPENAI001")] + public class RunStepCollectionOptions { + public string AfterId { get; set; } + public string BeforeId { get; set; } + public RunStepCollectionOrder? Order { get; set; } + public int? PageSizeLimit { get; set; } + } + [Experimental("OPENAI001")] + public readonly partial struct RunStepCollectionOrder : IEquatable { + public RunStepCollectionOrder(string value); + public static RunStepCollectionOrder Ascending { get; } + public static RunStepCollectionOrder Descending { get; } + public readonly bool Equals(RunStepCollectionOrder other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(RunStepCollectionOrder left, RunStepCollectionOrder right); + public static implicit operator RunStepCollectionOrder(string value); + public static bool operator !=(RunStepCollectionOrder left, RunStepCollectionOrder right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public abstract class RunStepDetails : IJsonModel, IPersistableModel { + public string CreatedMessageId { get; } + public IReadOnlyList ToolCalls { get; } + public static explicit operator RunStepDetails(ClientResult result); + public static implicit operator BinaryContent(RunStepDetails runStepDetails); + } + [Experimental("OPENAI001")] + public class RunStepDetailsUpdate : StreamingUpdate { + public string CodeInterpreterInput { get; } + public IReadOnlyList CodeInterpreterOutputs { get; } + public string CreatedMessageId { get; } + public FileSearchRankingOptions FileSearchRankingOptions { get; } + public IReadOnlyList FileSearchResults { get; } + public string FunctionArguments { get; } + public string FunctionName { get; } + public string FunctionOutput { get; } + public string StepId { get; } + public string ToolCallId { get; } + public int? ToolCallIndex { get; } + } + [Experimental("OPENAI001")] + public class RunStepError : IJsonModel, IPersistableModel { + public RunStepErrorCode Code { get; } + public string Message { get; } + public static explicit operator RunStepError(ClientResult result); + public static implicit operator BinaryContent(RunStepError runStepError); + } + [Experimental("OPENAI001")] + public readonly partial struct RunStepErrorCode : IEquatable { + public RunStepErrorCode(string value); + public static RunStepErrorCode RateLimitExceeded { get; } + public static RunStepErrorCode ServerError { get; } + public readonly bool Equals(RunStepErrorCode other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(RunStepErrorCode left, RunStepErrorCode right); + public static implicit operator RunStepErrorCode(string value); + public static bool operator !=(RunStepErrorCode left, RunStepErrorCode right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class RunStepFileSearchResult : IJsonModel, IPersistableModel { + public IReadOnlyList Content { get; } + public string FileId { get; } + public string FileName { get; } + public float Score { get; } + public static explicit operator RunStepFileSearchResult(ClientResult result); + public static implicit operator BinaryContent(RunStepFileSearchResult runStepFileSearchResult); + } + [Experimental("OPENAI001")] + public class RunStepFileSearchResultContent : IJsonModel, IPersistableModel { + public RunStepFileSearchResultContentKind Kind { get; } + public string Text { get; } + public static explicit operator RunStepFileSearchResultContent(ClientResult result); + public static implicit operator BinaryContent(RunStepFileSearchResultContent runStepFileSearchResultContent); + } + [Experimental("OPENAI001")] + public enum RunStepFileSearchResultContentKind { + Text = 0 + } + [Experimental("OPENAI001")] + public enum RunStepKind { + CreatedMessage = 0, + ToolCall = 1 + } + [Experimental("OPENAI001")] + public readonly partial struct RunStepStatus : IEquatable { + public RunStepStatus(string value); + public static RunStepStatus Cancelled { get; } + public static RunStepStatus Completed { get; } + public static RunStepStatus Expired { get; } + public static RunStepStatus Failed { get; } + public static RunStepStatus InProgress { get; } + public readonly bool Equals(RunStepStatus other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(RunStepStatus left, RunStepStatus right); + public static implicit operator RunStepStatus(string value); + public static bool operator !=(RunStepStatus left, RunStepStatus right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class RunStepTokenUsage : IJsonModel, IPersistableModel { + public int InputTokenCount { get; } + public int OutputTokenCount { get; } + public int TotalTokenCount { get; } + public static explicit operator RunStepTokenUsage(ClientResult result); + public static implicit operator BinaryContent(RunStepTokenUsage runStepTokenUsage); + } + [Experimental("OPENAI001")] + public abstract class RunStepToolCall : IJsonModel, IPersistableModel { + public string CodeInterpreterInput { get; } + public IReadOnlyList CodeInterpreterOutputs { get; } + public FileSearchRankingOptions FileSearchRankingOptions { get; } + public IReadOnlyList FileSearchResults { get; } + public string FunctionArguments { get; } + public string FunctionName { get; } + public string FunctionOutput { get; } + public string Id { get; } + public RunStepToolCallKind Kind { get; } + public static explicit operator RunStepToolCall(ClientResult result); + public static implicit operator BinaryContent(RunStepToolCall runStepToolCall); + } + [Experimental("OPENAI001")] + public enum RunStepToolCallKind { + CodeInterpreter = 0, + FileSearch = 1, + Function = 2 + } + [Experimental("OPENAI001")] + public class RunStepUpdate : StreamingUpdate { + } + [Experimental("OPENAI001")] + public abstract class RunStepUpdateCodeInterpreterOutput : IJsonModel, IPersistableModel { + public string ImageFileId { get; } + public string Logs { get; } + public int OutputIndex { get; } + public static explicit operator RunStepUpdateCodeInterpreterOutput(ClientResult result); + public static implicit operator BinaryContent(RunStepUpdateCodeInterpreterOutput runStepUpdateCodeInterpreterOutput); + } + [Experimental("OPENAI001")] + public class RunTokenUsage : IJsonModel, IPersistableModel { + public int InputTokenCount { get; } + public int OutputTokenCount { get; } + public int TotalTokenCount { get; } + public static explicit operator RunTokenUsage(ClientResult result); + public static implicit operator BinaryContent(RunTokenUsage runTokenUsage); + } + [Experimental("OPENAI001")] + public class RunTruncationStrategy : IJsonModel, IPersistableModel { + public static RunTruncationStrategy Auto { get; } + public int? LastMessages { get; } + public static RunTruncationStrategy CreateLastMessagesStrategy(int lastMessageCount); + public static explicit operator RunTruncationStrategy(ClientResult result); + public static implicit operator BinaryContent(RunTruncationStrategy runTruncationStrategy); + } + [Experimental("OPENAI001")] + public class RunUpdate : StreamingUpdate { + } + [Experimental("OPENAI001")] + public abstract class StreamingUpdate { + public StreamingUpdateReason UpdateKind { get; } + } + [Experimental("OPENAI001")] + public enum StreamingUpdateReason { + Unknown = 0, + ThreadCreated = 1, + RunCreated = 2, + RunQueued = 3, + RunInProgress = 4, + RunRequiresAction = 5, + RunCompleted = 6, + RunIncomplete = 7, + RunFailed = 8, + RunCancelling = 9, + RunCancelled = 10, + RunExpired = 11, + RunStepCreated = 12, + RunStepInProgress = 13, + RunStepUpdated = 14, + RunStepCompleted = 15, + RunStepFailed = 16, + RunStepCancelled = 17, + RunStepExpired = 18, + MessageCreated = 19, + MessageInProgress = 20, + MessageUpdated = 21, + MessageCompleted = 22, + MessageFailed = 23, + Error = 24, + Done = 25 + } + [Experimental("OPENAI001")] + public class StreamingUpdate : StreamingUpdate where T : class { + public T Value { get; } + public static implicit operator T(StreamingUpdate update); + } + [Experimental("OPENAI001")] + public class TextAnnotation { + public int EndIndex { get; } + public string InputFileId { get; } + public string OutputFileId { get; } + public int StartIndex { get; } + public string TextToReplace { get; } + } + [Experimental("OPENAI001")] + public class TextAnnotationUpdate { + public int ContentIndex { get; } + public int? EndIndex { get; } + public string InputFileId { get; } + public string OutputFileId { get; } + public int? StartIndex { get; } + public string TextToReplace { get; } + } + [Experimental("OPENAI001")] + public class ThreadCreationOptions : IJsonModel, IPersistableModel { + public IList InitialMessages { get; } + public IDictionary Metadata { get; } + public ToolResources ToolResources { get; set; } + public static explicit operator ThreadCreationOptions(ClientResult result); + public static implicit operator BinaryContent(ThreadCreationOptions threadCreationOptions); + } + [Experimental("OPENAI001")] + public class ThreadDeletionResult : IJsonModel, IPersistableModel { + public bool Deleted { get; } + public string ThreadId { get; } + public static explicit operator ThreadDeletionResult(ClientResult result); + public static implicit operator BinaryContent(ThreadDeletionResult threadDeletionResult); + } + [Experimental("OPENAI001")] + public class ThreadInitializationMessage : MessageCreationOptions { + public ThreadInitializationMessage(MessageRole role, IEnumerable content); + public static implicit operator ThreadInitializationMessage(string initializationMessage); + } + [Experimental("OPENAI001")] + public class ThreadMessage : IJsonModel, IPersistableModel { + public string AssistantId { get; } + public IReadOnlyList Attachments { get; } + public DateTimeOffset? CompletedAt { get; } + public IReadOnlyList Content { get; } + public DateTimeOffset CreatedAt { get; } + public string Id { get; } + public DateTimeOffset? IncompleteAt { get; } + public MessageFailureDetails IncompleteDetails { get; } + public IReadOnlyDictionary Metadata { get; } + public MessageRole Role { get; } + public string RunId { get; } + public MessageStatus Status { get; } + public string ThreadId { get; } + public static explicit operator ThreadMessage(ClientResult result); + public static implicit operator BinaryContent(ThreadMessage threadMessage); + } + [Experimental("OPENAI001")] + public class ThreadModificationOptions : IJsonModel, IPersistableModel { + public IDictionary Metadata { get; } + public ToolResources ToolResources { get; set; } + public static explicit operator ThreadModificationOptions(ClientResult result); + public static implicit operator BinaryContent(ThreadModificationOptions threadModificationOptions); + } + [Experimental("OPENAI001")] + public class ThreadRun : IJsonModel, IPersistableModel { + public bool? AllowParallelToolCalls { get; } + public string AssistantId { get; } + public DateTimeOffset? CancelledAt { get; } + public DateTimeOffset? CompletedAt { get; } + public DateTimeOffset CreatedAt { get; } + public DateTimeOffset? ExpiresAt { get; } + public DateTimeOffset? FailedAt { get; } + public string Id { get; } + public RunIncompleteDetails IncompleteDetails { get; } + public string Instructions { get; } + public RunError LastError { get; } + public int? MaxInputTokenCount { get; } + public int? MaxOutputTokenCount { get; } + public IReadOnlyDictionary Metadata { get; } + public string Model { get; } + public float? NucleusSamplingFactor { get; } + public IReadOnlyList RequiredActions { get; } + public AssistantResponseFormat ResponseFormat { get; } + public DateTimeOffset? StartedAt { get; } + public RunStatus Status { get; } + public float? Temperature { get; } + public string ThreadId { get; } + public ToolConstraint ToolConstraint { get; } + public IReadOnlyList Tools { get; } + public RunTruncationStrategy TruncationStrategy { get; } + public RunTokenUsage Usage { get; } + public static explicit operator ThreadRun(ClientResult result); + public static implicit operator BinaryContent(ThreadRun threadRun); + } + [Experimental("OPENAI001")] + public class ThreadUpdate : StreamingUpdate { + public DateTimeOffset CreatedAt { get; } + public string Id { get; } + public IReadOnlyDictionary Metadata { get; } + public ToolResources ToolResources { get; } + } + [Experimental("OPENAI001")] + public class ToolConstraint : IJsonModel, IPersistableModel { + public ToolConstraint(ToolDefinition toolDefinition); + public static ToolConstraint Auto { get; } + public static ToolConstraint None { get; } + public static ToolConstraint Required { get; } + public static explicit operator ToolConstraint(ClientResult result); + public static implicit operator BinaryContent(ToolConstraint toolConstraint); + } + [Experimental("OPENAI001")] + public abstract class ToolDefinition : IJsonModel, IPersistableModel { + protected ToolDefinition(); + protected ToolDefinition(string type); + public static CodeInterpreterToolDefinition CreateCodeInterpreter(); + public static FileSearchToolDefinition CreateFileSearch(int? maxResults = null); + public static FunctionToolDefinition CreateFunction(string name, string description = null, BinaryData parameters = null, bool? strictParameterSchemaEnabled = null); + public static explicit operator ToolDefinition(ClientResult result); + public static implicit operator BinaryContent(ToolDefinition toolDefinition); + } + [Experimental("OPENAI001")] + public class ToolOutput : IJsonModel, IPersistableModel { + public ToolOutput(); + public ToolOutput(string toolCallId, string output); + public string Output { get; set; } + public string ToolCallId { get; set; } + public static explicit operator ToolOutput(ClientResult result); + public static implicit operator BinaryContent(ToolOutput toolOutput); + } + [Experimental("OPENAI001")] + public class ToolResources : IJsonModel, IPersistableModel { + public CodeInterpreterToolResources CodeInterpreter { get; set; } + public FileSearchToolResources FileSearch { get; set; } + public static explicit operator ToolResources(ClientResult result); + public static implicit operator BinaryContent(ToolResources toolResources); + } + [Experimental("OPENAI001")] + public class VectorStoreCreationHelper : IJsonModel, IPersistableModel { + public VectorStoreCreationHelper(); + public VectorStoreCreationHelper(IEnumerable files); + public VectorStoreCreationHelper(IEnumerable fileIds); + public FileChunkingStrategy ChunkingStrategy { get; set; } + public IList FileIds { get; } + public IDictionary Metadata { get; } + public static explicit operator VectorStoreCreationHelper(ClientResult result); + public static implicit operator BinaryContent(VectorStoreCreationHelper vectorStoreCreationHelper); + } +} +namespace OpenAI.Audio { + public class AudioClient { + protected AudioClient(); + protected internal AudioClient(ClientPipeline pipeline, string model, OpenAIClientOptions options); + public AudioClient(string model, ApiKeyCredential credential, OpenAIClientOptions options); + public AudioClient(string model, ApiKeyCredential credential); + public AudioClient(string model, string apiKey); + public ClientPipeline Pipeline { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GenerateSpeech(BinaryContent content, RequestOptions options = null); + public virtual ClientResult GenerateSpeech(string text, GeneratedSpeechVoice voice, SpeechGenerationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GenerateSpeechAsync(BinaryContent content, RequestOptions options = null); + public virtual Task> GenerateSpeechAsync(string text, GeneratedSpeechVoice voice, SpeechGenerationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult TranscribeAudio(BinaryContent content, string contentType, RequestOptions options = null); + public virtual ClientResult TranscribeAudio(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult TranscribeAudio(string audioFilePath, AudioTranscriptionOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task TranscribeAudioAsync(BinaryContent content, string contentType, RequestOptions options = null); + public virtual Task> TranscribeAudioAsync(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> TranscribeAudioAsync(string audioFilePath, AudioTranscriptionOptions options = null); + public virtual ClientResult TranslateAudio(BinaryContent content, string contentType, RequestOptions options = null); + public virtual ClientResult TranslateAudio(Stream audio, string audioFilename, AudioTranslationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult TranslateAudio(string audioFilePath, AudioTranslationOptions options = null); + public virtual Task TranslateAudioAsync(BinaryContent content, string contentType, RequestOptions options = null); + public virtual Task> TranslateAudioAsync(Stream audio, string audioFilename, AudioTranslationOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> TranslateAudioAsync(string audioFilePath, AudioTranslationOptions options = null); + } + [Flags] + public enum AudioTimestampGranularities { + Default = 0, + Word = 1, + Segment = 2 + } + public class AudioTranscription : IJsonModel, IPersistableModel { + public TimeSpan? Duration { get; } + public string Language { get; } + public IReadOnlyList Segments { get; } + public string Text { get; } + public IReadOnlyList Words { get; } + public static explicit operator AudioTranscription(ClientResult result); + public static implicit operator BinaryContent(AudioTranscription audioTranscription); + } + public readonly partial struct AudioTranscriptionFormat : IEquatable { + public AudioTranscriptionFormat(string value); + public static AudioTranscriptionFormat Simple { get; } + public static AudioTranscriptionFormat Srt { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public static AudioTranscriptionFormat Text { get; } + public static AudioTranscriptionFormat Verbose { get; } + public static AudioTranscriptionFormat Vtt { get; } + public readonly bool Equals(AudioTranscriptionFormat other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(AudioTranscriptionFormat left, AudioTranscriptionFormat right); + public static implicit operator AudioTranscriptionFormat(string value); + public static bool operator !=(AudioTranscriptionFormat left, AudioTranscriptionFormat right); + public override readonly string ToString(); + } + public class AudioTranscriptionOptions : IJsonModel, IPersistableModel { + public string Language { get; set; } + public string Prompt { get; set; } + public AudioTranscriptionFormat? ResponseFormat { get; set; } + public float? Temperature { get; set; } + public AudioTimestampGranularities TimestampGranularities { get; set; } + public static explicit operator AudioTranscriptionOptions(ClientResult result); + public static implicit operator BinaryContent(AudioTranscriptionOptions audioTranscriptionOptions); + } + public class AudioTranslation : IJsonModel, IPersistableModel { + public TimeSpan? Duration { get; } + public string Language { get; } + public IReadOnlyList Segments { get; } + public string Text { get; } + public static explicit operator AudioTranslation(ClientResult result); + public static implicit operator BinaryContent(AudioTranslation audioTranslation); + } + public readonly partial struct AudioTranslationFormat : IEquatable { + public AudioTranslationFormat(string value); + public static AudioTranslationFormat Simple { get; } + public static AudioTranslationFormat Srt { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public static AudioTranslationFormat Text { get; } + public static AudioTranslationFormat Verbose { get; } + public static AudioTranslationFormat Vtt { get; } + public readonly bool Equals(AudioTranslationFormat other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(AudioTranslationFormat left, AudioTranslationFormat right); + public static implicit operator AudioTranslationFormat(string value); + public static bool operator !=(AudioTranslationFormat left, AudioTranslationFormat right); + public override readonly string ToString(); + } + public class AudioTranslationOptions : IJsonModel, IPersistableModel { + public string Prompt { get; set; } + public AudioTranslationFormat? ResponseFormat { get; set; } + public float? Temperature { get; set; } + public static explicit operator AudioTranslationOptions(ClientResult result); + public static implicit operator BinaryContent(AudioTranslationOptions audioTranslationOptions); + } + public readonly partial struct GeneratedSpeechFormat : IEquatable { + public GeneratedSpeechFormat(string value); + public static GeneratedSpeechFormat Aac { get; } + public static GeneratedSpeechFormat Flac { get; } + public static GeneratedSpeechFormat Mp3 { get; } + public static GeneratedSpeechFormat Opus { get; } + public static GeneratedSpeechFormat Pcm { get; } + public static GeneratedSpeechFormat Wav { get; } + public readonly bool Equals(GeneratedSpeechFormat other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedSpeechFormat left, GeneratedSpeechFormat right); + public static implicit operator GeneratedSpeechFormat(string value); + public static bool operator !=(GeneratedSpeechFormat left, GeneratedSpeechFormat right); + public override readonly string ToString(); + } + public readonly partial struct GeneratedSpeechVoice : IEquatable { + public GeneratedSpeechVoice(string value); + public static GeneratedSpeechVoice Alloy { get; } + public static GeneratedSpeechVoice Ash { get; } + public static GeneratedSpeechVoice Coral { get; } + public static GeneratedSpeechVoice Echo { get; } + public static GeneratedSpeechVoice Fable { get; } + public static GeneratedSpeechVoice Nova { get; } + public static GeneratedSpeechVoice Onyx { get; } + public static GeneratedSpeechVoice Sage { get; } + public static GeneratedSpeechVoice Shimmer { get; } + public readonly bool Equals(GeneratedSpeechVoice other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedSpeechVoice left, GeneratedSpeechVoice right); + public static implicit operator GeneratedSpeechVoice(string value); + public static bool operator !=(GeneratedSpeechVoice left, GeneratedSpeechVoice right); + public override readonly string ToString(); + } + public static class OpenAIAudioModelFactory { + public static AudioTranscription AudioTranscription(string language = null, TimeSpan? duration = null, string text = null, IEnumerable words = null, IEnumerable segments = null); + public static AudioTranslation AudioTranslation(string language = null, TimeSpan? duration = null, string text = null, IEnumerable segments = null); + public static TranscribedSegment TranscribedSegment(int id = 0, int seekOffset = 0, TimeSpan startTime = default, TimeSpan endTime = default, string text = null, ReadOnlyMemory tokenIds = default, float temperature = 0, float averageLogProbability = 0, float compressionRatio = 0, float noSpeechProbability = 0); + public static TranscribedWord TranscribedWord(string word = null, TimeSpan startTime = default, TimeSpan endTime = default); + } + public class SpeechGenerationOptions : IJsonModel, IPersistableModel { + public GeneratedSpeechFormat? ResponseFormat { get; set; } + public float? SpeedRatio { get; set; } + public static explicit operator SpeechGenerationOptions(ClientResult result); + public static implicit operator BinaryContent(SpeechGenerationOptions speechGenerationOptions); + } + public readonly partial struct TranscribedSegment : IJsonModel, IPersistableModel, IJsonModel, IPersistableModel { + public float AverageLogProbability { get; } + public float CompressionRatio { get; } + public TimeSpan EndTime { get; } + public int Id { get; } + public float NoSpeechProbability { get; } + public int SeekOffset { get; } + public TimeSpan StartTime { get; } + public float Temperature { get; } + public string Text { get; } + public ReadOnlyMemory TokenIds { get; } + public static explicit operator TranscribedSegment(ClientResult result); + public static implicit operator BinaryContent(TranscribedSegment transcribedSegment); + } + public readonly partial struct TranscribedWord : IJsonModel, IPersistableModel, IJsonModel, IPersistableModel { + public TimeSpan EndTime { get; } + public TimeSpan StartTime { get; } + public string Word { get; } + public static explicit operator TranscribedWord(ClientResult result); + public static implicit operator BinaryContent(TranscribedWord transcribedWord); + } +} +namespace OpenAI.Batch { + [Experimental("OPENAI001")] + public class BatchClient { + protected BatchClient(); + public BatchClient(ApiKeyCredential credential, OpenAIClientOptions options); + public BatchClient(ApiKeyCredential credential); + protected internal BatchClient(ClientPipeline pipeline, OpenAIClientOptions options); + public BatchClient(string apiKey); + public ClientPipeline Pipeline { get; } + public virtual CreateBatchOperation CreateBatch(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); + public virtual Task CreateBatchAsync(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); + public virtual CollectionResult GetBatches(string after, int? limit, RequestOptions options); + public virtual AsyncCollectionResult GetBatchesAsync(string after, int? limit, RequestOptions options); + } + [Experimental("OPENAI001")] + public class CreateBatchOperation : OperationResult { + public string BatchId { get; } + public override ContinuationToken? RehydrationToken { get; protected set; } + public virtual ClientResult Cancel(RequestOptions? options); + public virtual Task CancelAsync(RequestOptions? options); + public virtual ClientResult GetBatch(RequestOptions? options); + public virtual Task GetBatchAsync(RequestOptions? options); + public static CreateBatchOperation Rehydrate(BatchClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(BatchClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public override ClientResult UpdateStatus(RequestOptions? options = null); + public override ValueTask UpdateStatusAsync(RequestOptions? options = null); + } +} +namespace OpenAI.Chat { + public class AssistantChatMessage : ChatMessage, IJsonModel, IPersistableModel { + public AssistantChatMessage(ChatCompletion chatCompletion); + [Obsolete("This constructor is obsolete. Please use the constructor that takes an IEnumerable parameter instead.")] + public AssistantChatMessage(ChatFunctionCall functionCall); + public AssistantChatMessage(params ChatMessageContentPart[] contentParts); + public AssistantChatMessage(ChatOutputAudioReference outputAudioReference); + public AssistantChatMessage(IEnumerable contentParts); + public AssistantChatMessage(IEnumerable toolCalls); + public AssistantChatMessage(string content); + [Obsolete("This property is obsolete. Please use ToolCalls instead.")] + public ChatFunctionCall FunctionCall { get; set; } + public ChatOutputAudioReference OutputAudioReference { get; set; } + public string ParticipantName { get; set; } + public string Refusal { get; set; } + public IList ToolCalls { get; } + public new static explicit operator AssistantChatMessage(ClientResult result); + public static implicit operator BinaryContent(AssistantChatMessage assistantChatMessage); + } + public class ChatAudioOptions : IJsonModel, IPersistableModel { + public ChatAudioOptions(ChatOutputAudioVoice outputAudioVoice, ChatOutputAudioFormat outputAudioFormat); + public ChatOutputAudioFormat OutputAudioFormat { get; } + public ChatOutputAudioVoice OutputAudioVoice { get; } + public static explicit operator ChatAudioOptions(ClientResult result); + public static implicit operator BinaryContent(ChatAudioOptions chatAudioOptions); + } + public class ChatClient { + protected ChatClient(); + protected internal ChatClient(ClientPipeline pipeline, string model, OpenAIClientOptions options); + public ChatClient(string model, ApiKeyCredential credential, OpenAIClientOptions options); + public ChatClient(string model, ApiKeyCredential credential); + public ChatClient(string model, string apiKey); + public ClientPipeline Pipeline { get; } + public virtual ClientResult CompleteChat(params ChatMessage[] messages); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CompleteChat(BinaryContent content, RequestOptions options = null); + public virtual ClientResult CompleteChat(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> CompleteChatAsync(params ChatMessage[] messages); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CompleteChatAsync(BinaryContent content, RequestOptions options = null); + public virtual Task> CompleteChatAsync(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult CompleteChatStreaming(params ChatMessage[] messages); + public virtual CollectionResult CompleteChatStreaming(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult CompleteChatStreamingAsync(params ChatMessage[] messages); + public virtual AsyncCollectionResult CompleteChatStreamingAsync(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); + } + public class ChatCompletion : IJsonModel, IPersistableModel { + public ChatMessageContent Content { get; } + public IReadOnlyList ContentTokenLogProbabilities { get; } + public DateTimeOffset CreatedAt { get; } + public ChatFinishReason FinishReason { get; } + [Obsolete("This property is obsolete. Please use ToolCalls instead.")] + public ChatFunctionCall FunctionCall { get; } + public string Id { get; } + public string Model { get; } + public ChatOutputAudio OutputAudio { get; } + public string Refusal { get; } + public IReadOnlyList RefusalTokenLogProbabilities { get; } + public ChatMessageRole Role { get; } + public string SystemFingerprint { get; } + public IReadOnlyList ToolCalls { get; } + public ChatTokenUsage Usage { get; } + public static explicit operator ChatCompletion(ClientResult result); + public static implicit operator BinaryContent(ChatCompletion chatCompletion); + } + public class ChatCompletionOptions : IJsonModel, IPersistableModel { + public bool? AllowParallelToolCalls { get; set; } + public ChatAudioOptions AudioOptions { get; set; } + public string EndUserId { get; set; } + public float? FrequencyPenalty { get; set; } + [Obsolete("This property is obsolete. Please use ToolChoice instead.")] + public ChatFunctionChoice FunctionChoice { get; set; } + [Obsolete("This property is obsolete. Please use Tools instead.")] + public IList Functions { get; } + public bool? IncludeLogProbabilities { get; set; } + public IDictionary LogitBiases { get; } + public int? MaxOutputTokenCount { get; set; } + public IDictionary Metadata { get; } + public ChatOutputPrediction OutputPrediction { get; set; } + public float? PresencePenalty { get; set; } + public ChatReasoningEffortLevel? ReasoningEffortLevel { get; set; } + public ChatResponseFormat ResponseFormat { get; set; } + public ChatResponseModalities ResponseModalities { get; set; } + [Experimental("OPENAI001")] + public long? Seed { get; set; } + public IList StopSequences { get; } + public bool? StoredOutputEnabled { get; set; } + public float? Temperature { get; set; } + public ChatToolChoice ToolChoice { get; set; } + public IList Tools { get; } + public int? TopLogProbabilityCount { get; set; } + public float? TopP { get; set; } + public static explicit operator ChatCompletionOptions(ClientResult result); + public static implicit operator BinaryContent(ChatCompletionOptions chatCompletionOptions); + } + public enum ChatFinishReason { + Stop = 0, + Length = 1, + ContentFilter = 2, + ToolCalls = 3, + FunctionCall = 4 + } + [Obsolete("This class is obsolete. Please use ChatTool instead.")] + public class ChatFunction : IJsonModel, IPersistableModel { + public ChatFunction(string functionName); + public string FunctionDescription { get; set; } + public string FunctionName { get; } + public BinaryData FunctionParameters { get; set; } + public static explicit operator ChatFunction(ClientResult result); + public static implicit operator BinaryContent(ChatFunction chatFunction); + } + [Obsolete("This class is obsolete. Please use ChatToolCall instead.")] + public class ChatFunctionCall : IJsonModel, IPersistableModel { + public ChatFunctionCall(string functionName, BinaryData functionArguments); + public BinaryData FunctionArguments { get; } + public string FunctionName { get; } + public static explicit operator ChatFunctionCall(ClientResult result); + public static implicit operator BinaryContent(ChatFunctionCall chatFunctionCall); + } + [Obsolete("This class is obsolete. Please use ChatToolChoice instead.")] + public class ChatFunctionChoice : IJsonModel, IPersistableModel { + public static ChatFunctionChoice CreateAutoChoice(); + public static ChatFunctionChoice CreateNamedChoice(string functionName); + public static ChatFunctionChoice CreateNoneChoice(); + public static explicit operator ChatFunctionChoice(ClientResult result); + public static implicit operator BinaryContent(ChatFunctionChoice chatFunctionChoice); + } + public readonly partial struct ChatImageDetailLevel : IEquatable { + public ChatImageDetailLevel(string value); + public static ChatImageDetailLevel Auto { get; } + public static ChatImageDetailLevel High { get; } + public static ChatImageDetailLevel Low { get; } + public readonly bool Equals(ChatImageDetailLevel other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ChatImageDetailLevel left, ChatImageDetailLevel right); + public static implicit operator ChatImageDetailLevel(string value); + public static bool operator !=(ChatImageDetailLevel left, ChatImageDetailLevel right); + public override readonly string ToString(); + } + public readonly partial struct ChatInputAudioFormat : IEquatable { + public ChatInputAudioFormat(string value); + public static ChatInputAudioFormat Mp3 { get; } + public static ChatInputAudioFormat Wav { get; } + public readonly bool Equals(ChatInputAudioFormat other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ChatInputAudioFormat left, ChatInputAudioFormat right); + public static implicit operator ChatInputAudioFormat(string value); + public static bool operator !=(ChatInputAudioFormat left, ChatInputAudioFormat right); + public override readonly string ToString(); + } + public class ChatInputTokenUsageDetails : IJsonModel, IPersistableModel { + public int AudioTokenCount { get; } + public int CachedTokenCount { get; } + public static explicit operator ChatInputTokenUsageDetails(ClientResult result); + public static implicit operator BinaryContent(ChatInputTokenUsageDetails chatInputTokenUsageDetails); + } + public class ChatMessage : IJsonModel, IPersistableModel { + public ChatMessageContent Content { get; } + public static AssistantChatMessage CreateAssistantMessage(ChatCompletion chatCompletion); + public static AssistantChatMessage CreateAssistantMessage(ChatFunctionCall functionCall); + public static AssistantChatMessage CreateAssistantMessage(params ChatMessageContentPart[] contentParts); + public static AssistantChatMessage CreateAssistantMessage(ChatOutputAudioReference outputAudioReference); + public static AssistantChatMessage CreateAssistantMessage(IEnumerable contentParts); + public static AssistantChatMessage CreateAssistantMessage(IEnumerable toolCalls); + public static AssistantChatMessage CreateAssistantMessage(string content); + public static DeveloperChatMessage CreateDeveloperMessage(params ChatMessageContentPart[] contentParts); + public static DeveloperChatMessage CreateDeveloperMessage(IEnumerable contentParts); + public static DeveloperChatMessage CreateDeveloperMessage(string content); + [Obsolete("This method is obsolete. Please use CreateToolMessage instead.")] + public static FunctionChatMessage CreateFunctionMessage(string functionName, string content); + public static SystemChatMessage CreateSystemMessage(params ChatMessageContentPart[] contentParts); + public static SystemChatMessage CreateSystemMessage(IEnumerable contentParts); + public static SystemChatMessage CreateSystemMessage(string content); + public static ToolChatMessage CreateToolMessage(string toolCallId, params ChatMessageContentPart[] contentParts); + public static ToolChatMessage CreateToolMessage(string toolCallId, IEnumerable contentParts); + public static ToolChatMessage CreateToolMessage(string toolCallId, string content); + public static UserChatMessage CreateUserMessage(params ChatMessageContentPart[] contentParts); + public static UserChatMessage CreateUserMessage(IEnumerable contentParts); + public static UserChatMessage CreateUserMessage(string content); + public static explicit operator ChatMessage(ClientResult result); + public static implicit operator BinaryContent(ChatMessage chatMessage); + public static implicit operator ChatMessage(string content); + } + public class ChatMessageContent : ObjectModel.Collection { + public ChatMessageContent(); + public ChatMessageContent(params ChatMessageContentPart[] contentParts); + public ChatMessageContent(IEnumerable contentParts); + public ChatMessageContent(string content); + } + public class ChatMessageContentPart : IJsonModel, IPersistableModel { + public BinaryData ImageBytes { get; } + public string ImageBytesMediaType { get; } + public ChatImageDetailLevel? ImageDetailLevel { get; } + public Uri ImageUri { get; } + public BinaryData InputAudioBytes { get; } + public ChatInputAudioFormat? InputAudioFormat { get; } + public ChatMessageContentPartKind Kind { get; } + public string Refusal { get; } + public string Text { get; } + public static ChatMessageContentPart CreateImagePart(BinaryData imageBytes, string imageBytesMediaType, ChatImageDetailLevel? imageDetailLevel = null); + public static ChatMessageContentPart CreateImagePart(Uri imageUri, ChatImageDetailLevel? imageDetailLevel = null); + public static ChatMessageContentPart CreateInputAudioPart(BinaryData inputAudioBytes, ChatInputAudioFormat inputAudioFormat); + public static ChatMessageContentPart CreateRefusalPart(string refusal); + public static ChatMessageContentPart CreateTextPart(string text); + public static explicit operator ChatMessageContentPart(ClientResult result); + public static implicit operator BinaryContent(ChatMessageContentPart chatMessageContentPart); + public static implicit operator ChatMessageContentPart(string text); + } + public enum ChatMessageContentPartKind { + Text = 0, + Refusal = 1, + Image = 2, + InputAudio = 3 + } + public enum ChatMessageRole { + System = 0, + User = 1, + Assistant = 2, + Tool = 3, + Function = 4, + Developer = 5 + } + public class ChatOutputAudio : IJsonModel, IPersistableModel { + public BinaryData AudioBytes { get; } + public DateTimeOffset ExpiresAt { get; } + public string Id { get; } + public string Transcript { get; } + public static explicit operator ChatOutputAudio(ClientResult result); + public static implicit operator BinaryContent(ChatOutputAudio chatOutputAudio); + } + public readonly partial struct ChatOutputAudioFormat : IEquatable { + public ChatOutputAudioFormat(string value); + public static ChatOutputAudioFormat Flac { get; } + public static ChatOutputAudioFormat Mp3 { get; } + public static ChatOutputAudioFormat Opus { get; } + public static ChatOutputAudioFormat Pcm16 { get; } + public static ChatOutputAudioFormat Wav { get; } + public readonly bool Equals(ChatOutputAudioFormat other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ChatOutputAudioFormat left, ChatOutputAudioFormat right); + public static implicit operator ChatOutputAudioFormat(string value); + public static bool operator !=(ChatOutputAudioFormat left, ChatOutputAudioFormat right); + public override readonly string ToString(); + } + public class ChatOutputAudioReference : IJsonModel, IPersistableModel { + public ChatOutputAudioReference(string id); + public string Id { get; } + public static explicit operator ChatOutputAudioReference(ClientResult result); + public static implicit operator BinaryContent(ChatOutputAudioReference chatOutputAudioReference); + } + public readonly partial struct ChatOutputAudioVoice : IEquatable { + public ChatOutputAudioVoice(string value); + public static ChatOutputAudioVoice Alloy { get; } + public static ChatOutputAudioVoice Ash { get; } + public static ChatOutputAudioVoice Ballad { get; } + public static ChatOutputAudioVoice Coral { get; } + public static ChatOutputAudioVoice Echo { get; } + public static ChatOutputAudioVoice Sage { get; } + public static ChatOutputAudioVoice Shimmer { get; } + public static ChatOutputAudioVoice Verse { get; } + public readonly bool Equals(ChatOutputAudioVoice other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ChatOutputAudioVoice left, ChatOutputAudioVoice right); + public static implicit operator ChatOutputAudioVoice(string value); + public static bool operator !=(ChatOutputAudioVoice left, ChatOutputAudioVoice right); + public override readonly string ToString(); + } + public class ChatOutputPrediction : IJsonModel, IPersistableModel { + public static ChatOutputPrediction CreateStaticContentPrediction(IEnumerable staticContentParts); + public static ChatOutputPrediction CreateStaticContentPrediction(string staticContent); + public static explicit operator ChatOutputPrediction(ClientResult result); + public static implicit operator BinaryContent(ChatOutputPrediction chatOutputPrediction); + } + public class ChatOutputTokenUsageDetails : IJsonModel, IPersistableModel { + public int AcceptedPredictionTokenCount { get; } + public int AudioTokenCount { get; } + public int ReasoningTokenCount { get; } + public int RejectedPredictionTokenCount { get; } + public static explicit operator ChatOutputTokenUsageDetails(ClientResult result); + public static implicit operator BinaryContent(ChatOutputTokenUsageDetails chatOutputTokenUsageDetails); + } + public readonly partial struct ChatReasoningEffortLevel : IEquatable { + public ChatReasoningEffortLevel(string value); + public static ChatReasoningEffortLevel High { get; } + public static ChatReasoningEffortLevel Low { get; } + public static ChatReasoningEffortLevel Medium { get; } + public readonly bool Equals(ChatReasoningEffortLevel other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ChatReasoningEffortLevel left, ChatReasoningEffortLevel right); + public static implicit operator ChatReasoningEffortLevel(string value); + public static bool operator !=(ChatReasoningEffortLevel left, ChatReasoningEffortLevel right); + public override readonly string ToString(); + } + public class ChatResponseFormat : IJsonModel, IPersistableModel { + public static ChatResponseFormat CreateJsonObjectFormat(); + public static ChatResponseFormat CreateJsonSchemaFormat(string jsonSchemaFormatName, BinaryData jsonSchema, string jsonSchemaFormatDescription = null, bool? jsonSchemaIsStrict = null); + public static ChatResponseFormat CreateTextFormat(); + public static explicit operator ChatResponseFormat(ClientResult result); + public static implicit operator BinaryContent(ChatResponseFormat chatResponseFormat); + } + [Flags] + public enum ChatResponseModalities { + Default = 0, + Text = 1, + Audio = 2 + } + public class ChatTokenLogProbabilityDetails : IJsonModel, IPersistableModel { + public float LogProbability { get; } + public string Token { get; } + public IReadOnlyList TopLogProbabilities { get; } + public ReadOnlyMemory? Utf8Bytes { get; } + public static explicit operator ChatTokenLogProbabilityDetails(ClientResult result); + public static implicit operator BinaryContent(ChatTokenLogProbabilityDetails chatTokenLogProbabilityDetails); + } + public class ChatTokenTopLogProbabilityDetails : IJsonModel, IPersistableModel { + public float LogProbability { get; } + public string Token { get; } + public ReadOnlyMemory? Utf8Bytes { get; } + public static explicit operator ChatTokenTopLogProbabilityDetails(ClientResult result); + public static implicit operator BinaryContent(ChatTokenTopLogProbabilityDetails chatTokenTopLogProbabilityDetails); + } + public class ChatTokenUsage : IJsonModel, IPersistableModel { + public int InputTokenCount { get; } + public ChatInputTokenUsageDetails InputTokenDetails { get; } + public int OutputTokenCount { get; } + public ChatOutputTokenUsageDetails OutputTokenDetails { get; } + public int TotalTokenCount { get; } + public static explicit operator ChatTokenUsage(ClientResult result); + public static implicit operator BinaryContent(ChatTokenUsage chatTokenUsage); + } + public class ChatTool : IJsonModel, IPersistableModel { + public string FunctionDescription { get; } + public string FunctionName { get; } + public BinaryData FunctionParameters { get; } + public bool? FunctionSchemaIsStrict { get; } + public ChatToolKind Kind { get; } + public static ChatTool CreateFunctionTool(string functionName, string functionDescription = null, BinaryData functionParameters = null, bool? functionSchemaIsStrict = null); + public static explicit operator ChatTool(ClientResult result); + public static implicit operator BinaryContent(ChatTool chatTool); + } + public class ChatToolCall : IJsonModel, IPersistableModel { + public BinaryData FunctionArguments { get; } + public string FunctionName { get; } + public string Id { get; set; } + public ChatToolCallKind Kind { get; } + public static ChatToolCall CreateFunctionToolCall(string id, string functionName, BinaryData functionArguments); + public static explicit operator ChatToolCall(ClientResult result); + public static implicit operator BinaryContent(ChatToolCall chatToolCall); + } + public enum ChatToolCallKind { + Function = 0 + } + public class ChatToolChoice : IJsonModel, IPersistableModel { + public static ChatToolChoice CreateAutoChoice(); + public static ChatToolChoice CreateFunctionChoice(string functionName); + public static ChatToolChoice CreateNoneChoice(); + public static ChatToolChoice CreateRequiredChoice(); + public static explicit operator ChatToolChoice(ClientResult result); + public static implicit operator BinaryContent(ChatToolChoice chatToolChoice); + } + public enum ChatToolKind { + Function = 0 + } + public class DeveloperChatMessage : ChatMessage, IJsonModel, IPersistableModel { + public DeveloperChatMessage(params ChatMessageContentPart[] contentParts); + public DeveloperChatMessage(IEnumerable contentParts); + public DeveloperChatMessage(string content); + public string ParticipantName { get; set; } + public new static explicit operator DeveloperChatMessage(ClientResult result); + public static implicit operator BinaryContent(DeveloperChatMessage developerChatMessage); + } + [Obsolete("This class is obsolete. Please use ToolChatMessage instead.")] + public class FunctionChatMessage : ChatMessage, IJsonModel, IPersistableModel { + public FunctionChatMessage(string functionName, string content); + public string FunctionName { get; } + public new static explicit operator FunctionChatMessage(ClientResult result); + public static implicit operator BinaryContent(FunctionChatMessage functionChatMessage); + } + 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); + [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 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)] + public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount, int audioTokenCount); + [EditorBrowsable(EditorBrowsableState.Never)] + public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount); + public static ChatTokenLogProbabilityDetails ChatTokenLogProbabilityDetails(string token = null, float logProbability = 0, ReadOnlyMemory? utf8Bytes = null, IEnumerable topLogProbabilities = null); + public static ChatTokenTopLogProbabilityDetails ChatTokenTopLogProbabilityDetails(string token = null, float logProbability = 0, ReadOnlyMemory? utf8Bytes = null); + public static ChatTokenUsage ChatTokenUsage(int outputTokenCount = 0, int inputTokenCount = 0, int totalTokenCount = 0, ChatOutputTokenUsageDetails outputTokenDetails = null, ChatInputTokenUsageDetails inputTokenDetails = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public static ChatTokenUsage ChatTokenUsage(int outputTokenCount, int inputTokenCount, int totalTokenCount, ChatOutputTokenUsageDetails outputTokenDetails); + public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate(string completionId = null, ChatMessageContent contentUpdate = null, StreamingChatFunctionCallUpdate functionCallUpdate = null, IEnumerable toolCallUpdates = null, ChatMessageRole? role = null, string refusalUpdate = null, IEnumerable contentTokenLogProbabilities = null, IEnumerable refusalTokenLogProbabilities = null, ChatFinishReason? finishReason = null, DateTimeOffset createdAt = default, string model = null, string systemFingerprint = null, ChatTokenUsage usage = null, StreamingChatOutputAudioUpdate outputAudioUpdate = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate(string completionId, ChatMessageContent contentUpdate, StreamingChatFunctionCallUpdate functionCallUpdate, IEnumerable toolCallUpdates, ChatMessageRole? role, string refusalUpdate, IEnumerable contentTokenLogProbabilities, IEnumerable refusalTokenLogProbabilities, ChatFinishReason? finishReason, DateTimeOffset createdAt, string model, string systemFingerprint, ChatTokenUsage usage); + [Obsolete("This class is obsolete. Please use StreamingChatToolCallUpdate instead.")] + public static StreamingChatFunctionCallUpdate StreamingChatFunctionCallUpdate(string functionName = null, BinaryData functionArgumentsUpdate = null); + public static StreamingChatOutputAudioUpdate StreamingChatOutputAudioUpdate(string id = null, DateTimeOffset? expiresAt = null, string transcriptUpdate = null, BinaryData audioBytesUpdate = null); + public static StreamingChatToolCallUpdate StreamingChatToolCallUpdate(int index = 0, string toolCallId = null, ChatToolCallKind kind = ChatToolCallKind.Function, string functionName = null, BinaryData functionArgumentsUpdate = null); + } + public class StreamingChatCompletionUpdate : IJsonModel, IPersistableModel { + public string CompletionId { get; } + public IReadOnlyList ContentTokenLogProbabilities { get; } + public ChatMessageContent ContentUpdate { get; } + public DateTimeOffset CreatedAt { get; } + public ChatFinishReason? FinishReason { get; } + [Obsolete("This property is obsolete. Please use ToolCallUpdates instead.")] + public StreamingChatFunctionCallUpdate FunctionCallUpdate { get; } + public string Model { get; } + public StreamingChatOutputAudioUpdate OutputAudioUpdate { get; } + public IReadOnlyList RefusalTokenLogProbabilities { get; } + public string RefusalUpdate { get; } + public ChatMessageRole? Role { get; } + public string SystemFingerprint { get; } + public IReadOnlyList ToolCallUpdates { get; } + public ChatTokenUsage Usage { get; } + public static explicit operator StreamingChatCompletionUpdate(ClientResult result); + public static implicit operator BinaryContent(StreamingChatCompletionUpdate streamingChatCompletionUpdate); + } + [Obsolete("This class is obsolete. Please use StreamingChatToolCallUpdate instead.")] + public class StreamingChatFunctionCallUpdate : IJsonModel, IPersistableModel { + public BinaryData FunctionArgumentsUpdate { get; } + public string FunctionName { get; } + public static explicit operator StreamingChatFunctionCallUpdate(ClientResult result); + public static implicit operator BinaryContent(StreamingChatFunctionCallUpdate streamingChatFunctionCallUpdate); + } + public class StreamingChatOutputAudioUpdate : IJsonModel, IPersistableModel { + public BinaryData AudioBytesUpdate { get; } + public DateTimeOffset? ExpiresAt { get; } + public string Id { get; } + public string TranscriptUpdate { get; } + public static explicit operator StreamingChatOutputAudioUpdate(ClientResult result); + public static implicit operator BinaryContent(StreamingChatOutputAudioUpdate streamingChatOutputAudioUpdate); + } + public class StreamingChatToolCallUpdate : IJsonModel, IPersistableModel { + public BinaryData FunctionArgumentsUpdate { get; } + public string FunctionName { get; } + public int Index { get; } + public ChatToolCallKind Kind { get; } + public string ToolCallId { get; } + public static explicit operator StreamingChatToolCallUpdate(ClientResult result); + public static implicit operator BinaryContent(StreamingChatToolCallUpdate streamingChatToolCallUpdate); + } + public class SystemChatMessage : ChatMessage, IJsonModel, IPersistableModel { + public SystemChatMessage(params ChatMessageContentPart[] contentParts); + public SystemChatMessage(IEnumerable contentParts); + public SystemChatMessage(string content); + public string ParticipantName { get; set; } + public new static explicit operator SystemChatMessage(ClientResult result); + public static implicit operator BinaryContent(SystemChatMessage systemChatMessage); + } + public class ToolChatMessage : ChatMessage, IJsonModel, IPersistableModel { + public ToolChatMessage(string toolCallId, params ChatMessageContentPart[] contentParts); + public ToolChatMessage(string toolCallId, IEnumerable contentParts); + public ToolChatMessage(string toolCallId, string content); + public string ToolCallId { get; } + public new static explicit operator ToolChatMessage(ClientResult result); + public static implicit operator BinaryContent(ToolChatMessage toolChatMessage); + } + public class UserChatMessage : ChatMessage, IJsonModel, IPersistableModel { + public UserChatMessage(params ChatMessageContentPart[] contentParts); + public UserChatMessage(IEnumerable contentParts); + public UserChatMessage(string content); + public string ParticipantName { get; set; } + public new static explicit operator UserChatMessage(ClientResult result); + public static implicit operator BinaryContent(UserChatMessage userChatMessage); + } +} +namespace OpenAI.Embeddings { + public class EmbeddingClient { + protected EmbeddingClient(); + protected internal EmbeddingClient(ClientPipeline pipeline, string model, OpenAIClientOptions options); + public EmbeddingClient(string model, ApiKeyCredential credential, OpenAIClientOptions options); + public EmbeddingClient(string model, ApiKeyCredential credential); + public EmbeddingClient(string model, string apiKey); + public ClientPipeline Pipeline { get; } + public virtual ClientResult GenerateEmbedding(string input, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateEmbeddingAsync(string input, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GenerateEmbeddings(BinaryContent content, RequestOptions options = null); + public virtual ClientResult GenerateEmbeddings(IEnumerable> inputs, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateEmbeddings(IEnumerable inputs, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GenerateEmbeddingsAsync(BinaryContent content, RequestOptions options = null); + public virtual Task> GenerateEmbeddingsAsync(IEnumerable> inputs, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateEmbeddingsAsync(IEnumerable inputs, EmbeddingGenerationOptions options = null, CancellationToken cancellationToken = default); + } + public class EmbeddingGenerationOptions : IJsonModel, IPersistableModel { + public int? Dimensions { get; set; } + public string EndUserId { get; set; } + public static explicit operator EmbeddingGenerationOptions(ClientResult result); + public static implicit operator BinaryContent(EmbeddingGenerationOptions embeddingGenerationOptions); + } + public class EmbeddingTokenUsage : IJsonModel, IPersistableModel { + public int InputTokenCount { get; } + public int TotalTokenCount { get; } + public static explicit operator EmbeddingTokenUsage(ClientResult result); + public static implicit operator BinaryContent(EmbeddingTokenUsage embeddingTokenUsage); + } + public class OpenAIEmbedding : IJsonModel, IPersistableModel { + public int Index { get; } + public static explicit operator OpenAIEmbedding(ClientResult result); + public static implicit operator BinaryContent(OpenAIEmbedding openAIEmbedding); + public ReadOnlyMemory ToFloats(); + } + public class OpenAIEmbeddingCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { + public string Model { get; } + public EmbeddingTokenUsage Usage { get; } + public static explicit operator OpenAIEmbeddingCollection(ClientResult result); + public static implicit operator BinaryContent(OpenAIEmbeddingCollection openAIEmbeddingCollection); + } + public static class OpenAIEmbeddingsModelFactory { + public static EmbeddingTokenUsage EmbeddingTokenUsage(int inputTokenCount = 0, int totalTokenCount = 0); + public static OpenAIEmbedding OpenAIEmbedding(int index = 0, IEnumerable vector = null); + public static OpenAIEmbeddingCollection OpenAIEmbeddingCollection(IEnumerable items = null, string model = null, EmbeddingTokenUsage usage = null); + } +} +namespace OpenAI.Files { + public class FileDeletionResult : IJsonModel, IPersistableModel { + public bool Deleted { get; } + public string FileId { get; } + public static explicit operator FileDeletionResult(ClientResult result); + public static implicit operator BinaryContent(FileDeletionResult fileDeletionResult); + } + public enum FilePurpose { + Assistants = 0, + AssistantsOutput = 1, + Batch = 2, + BatchOutput = 3, + FineTune = 4, + FineTuneResults = 5, + Vision = 6 + } + [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 { + Uploaded = 0, + Processed = 1, + Error = 2 + } + public readonly partial struct FileUploadPurpose : IEquatable { + public FileUploadPurpose(string value); + public static FileUploadPurpose Assistants { get; } + public static FileUploadPurpose Batch { get; } + public static FileUploadPurpose FineTune { get; } + public static FileUploadPurpose Vision { get; } + public readonly bool Equals(FileUploadPurpose other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(FileUploadPurpose left, FileUploadPurpose right); + public static implicit operator FileUploadPurpose(string value); + public static bool operator !=(FileUploadPurpose left, FileUploadPurpose right); + public override readonly string ToString(); + } + public class OpenAIFile : IJsonModel, IPersistableModel { + public DateTimeOffset CreatedAt { get; } + public string Filename { get; } + public string Id { get; } + public FilePurpose Purpose { get; } + public int? SizeInBytes { get; } + [Obsolete("This property is obsolete. If this is a fine-tuning training file, it may take some time to process after it has been uploaded. While the file is processing, you can still create a fine-tuning job but it will not start until the file processing has completed.")] + public FileStatus Status { get; } + [Obsolete("This property is obsolete. For details on why a fine-tuning training file failed validation, see the `error` field on the fine-tuning job.")] + public string StatusDetails { get; } + public static explicit operator OpenAIFile(ClientResult result); + public static implicit operator BinaryContent(OpenAIFile openAIFile); + } + public class OpenAIFileClient { + protected OpenAIFileClient(); + public OpenAIFileClient(ApiKeyCredential credential, OpenAIClientOptions options); + public OpenAIFileClient(ApiKeyCredential credential); + protected internal OpenAIFileClient(ClientPipeline pipeline, OpenAIClientOptions options); + public OpenAIFileClient(string apiKey); + public ClientPipeline Pipeline { get; } + [Experimental("OPENAI001")] + public virtual ClientResult AddUploadPart(string uploadId, BinaryContent content, string contentType, RequestOptions options = null); + [Experimental("OPENAI001")] + public virtual Task AddUploadPartAsync(string uploadId, BinaryContent content, string contentType, RequestOptions options = null); + [Experimental("OPENAI001")] + public virtual ClientResult CancelUpload(string uploadId, RequestOptions options = null); + [Experimental("OPENAI001")] + public virtual Task CancelUploadAsync(string uploadId, RequestOptions options = null); + [Experimental("OPENAI001")] + public virtual ClientResult CompleteUpload(string uploadId, BinaryContent content, RequestOptions options = null); + [Experimental("OPENAI001")] + public virtual Task CompleteUploadAsync(string uploadId, BinaryContent content, RequestOptions options = null); + [Experimental("OPENAI001")] + public virtual ClientResult CreateUpload(BinaryContent content, RequestOptions options = null); + [Experimental("OPENAI001")] + public virtual Task CreateUploadAsync(BinaryContent content, RequestOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult DeleteFile(string fileId, RequestOptions options); + public virtual ClientResult DeleteFile(string fileId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task DeleteFileAsync(string fileId, RequestOptions options); + public virtual Task> DeleteFileAsync(string fileId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult DownloadFile(string fileId, RequestOptions options); + public virtual ClientResult DownloadFile(string fileId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task DownloadFileAsync(string fileId, RequestOptions options); + public virtual Task> DownloadFileAsync(string fileId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetFile(string fileId, RequestOptions options); + public virtual ClientResult GetFile(string fileId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetFileAsync(string fileId, RequestOptions options); + public virtual Task> GetFileAsync(string fileId, CancellationToken cancellationToken = default); + public virtual ClientResult GetFiles(FilePurpose purpose, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetFiles(string purpose, RequestOptions options); + public virtual ClientResult GetFiles(CancellationToken cancellationToken = default); + public virtual Task> GetFilesAsync(FilePurpose purpose, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetFilesAsync(string purpose, RequestOptions options); + public virtual Task> GetFilesAsync(CancellationToken cancellationToken = default); + public virtual ClientResult UploadFile(BinaryData file, string filename, FileUploadPurpose purpose); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult UploadFile(BinaryContent content, string contentType, RequestOptions options = null); + public virtual ClientResult UploadFile(Stream file, string filename, FileUploadPurpose purpose, CancellationToken cancellationToken = default); + public virtual ClientResult UploadFile(string filePath, FileUploadPurpose purpose); + public virtual Task> UploadFileAsync(BinaryData file, string filename, FileUploadPurpose purpose); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task UploadFileAsync(BinaryContent content, string contentType, RequestOptions options = null); + public virtual Task> UploadFileAsync(Stream file, string filename, FileUploadPurpose purpose, CancellationToken cancellationToken = default); + public virtual Task> UploadFileAsync(string filePath, FileUploadPurpose purpose); + } + public class OpenAIFileCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { + public static explicit operator OpenAIFileCollection(ClientResult result); + public static implicit operator BinaryContent(OpenAIFileCollection openAIFileCollection); + } + 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); + } +} +namespace OpenAI.FineTuning { + [Experimental("OPENAI001")] + public class FineTuningClient { + protected FineTuningClient(); + public FineTuningClient(ApiKeyCredential credential, OpenAIClientOptions options); + public FineTuningClient(ApiKeyCredential credential); + protected internal FineTuningClient(ClientPipeline pipeline, OpenAIClientOptions options); + public FineTuningClient(string apiKey); + public ClientPipeline Pipeline { get; } + public virtual FineTuningJobOperation CreateFineTuningJob(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); + public virtual Task CreateFineTuningJobAsync(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); + public virtual ClientResult GetJob(string fineTuningJobId, RequestOptions options); + public virtual Task GetJobAsync(string fineTuningJobId, RequestOptions options); + public virtual CollectionResult GetJobs(string after, int? limit, RequestOptions options); + public virtual AsyncCollectionResult GetJobsAsync(string after, int? limit, RequestOptions options); + } + [Experimental("OPENAI001")] + public class FineTuningJobOperation : OperationResult { + public string JobId { get; } + public override ContinuationToken? RehydrationToken { get; protected set; } + public virtual ClientResult Cancel(RequestOptions? options); + public virtual Task CancelAsync(RequestOptions? options); + public virtual ClientResult GetJob(RequestOptions? options); + public virtual Task GetJobAsync(RequestOptions? options); + public virtual CollectionResult GetJobCheckpoints(string? after, int? limit, RequestOptions? options); + public virtual AsyncCollectionResult GetJobCheckpointsAsync(string? after, int? limit, RequestOptions? options); + public virtual CollectionResult GetJobEvents(string? after, int? limit, RequestOptions options); + public virtual AsyncCollectionResult GetJobEventsAsync(string? after, int? limit, RequestOptions options); + public static FineTuningJobOperation Rehydrate(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static FineTuningJobOperation Rehydrate(FineTuningClient client, string fineTuningJobId, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(FineTuningClient client, string fineTuningJobId, CancellationToken cancellationToken = default); + public override ClientResult UpdateStatus(RequestOptions? options = null); + public override ValueTask UpdateStatusAsync(RequestOptions? options = null); + } +} +namespace OpenAI.Images { + public class GeneratedImage : IJsonModel, IPersistableModel { + public BinaryData ImageBytes { get; } + public Uri ImageUri { get; } + public string RevisedPrompt { get; } + public static explicit operator GeneratedImage(ClientResult result); + public static implicit operator BinaryContent(GeneratedImage generatedImage); + } + public class GeneratedImageCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { + public DateTimeOffset CreatedAt { get; } + public static explicit operator GeneratedImageCollection(ClientResult result); + public static implicit operator BinaryContent(GeneratedImageCollection generatedImageCollection); + } + public readonly partial struct GeneratedImageFormat : IEquatable { + public GeneratedImageFormat(string value); + public static GeneratedImageFormat Bytes { get; } + public static GeneratedImageFormat Uri { get; } + public readonly bool Equals(GeneratedImageFormat other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedImageFormat left, GeneratedImageFormat right); + public static implicit operator GeneratedImageFormat(string value); + public static bool operator !=(GeneratedImageFormat left, GeneratedImageFormat right); + public override readonly string ToString(); + } + public readonly partial struct GeneratedImageQuality : IEquatable { + public GeneratedImageQuality(string value); + public static GeneratedImageQuality High { get; } + public static GeneratedImageQuality Standard { get; } + public readonly bool Equals(GeneratedImageQuality other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedImageQuality left, GeneratedImageQuality right); + public static implicit operator GeneratedImageQuality(string value); + public static bool operator !=(GeneratedImageQuality left, GeneratedImageQuality right); + public override readonly string ToString(); + } + public readonly partial struct GeneratedImageSize : IEquatable { + public static readonly GeneratedImageSize W1024xH1024; + public static readonly GeneratedImageSize W1024xH1792; + public static readonly GeneratedImageSize W1792xH1024; + public static readonly GeneratedImageSize W256xH256; + public static readonly GeneratedImageSize W512xH512; + public GeneratedImageSize(int width, int height); + public readonly bool Equals(GeneratedImageSize other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedImageSize left, GeneratedImageSize right); + public static bool operator !=(GeneratedImageSize left, GeneratedImageSize right); + public override readonly string ToString(); + } + public readonly partial struct GeneratedImageStyle : IEquatable { + public GeneratedImageStyle(string value); + public static GeneratedImageStyle Natural { get; } + public static GeneratedImageStyle Vivid { get; } + public readonly bool Equals(GeneratedImageStyle other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedImageStyle left, GeneratedImageStyle right); + public static implicit operator GeneratedImageStyle(string value); + public static bool operator !=(GeneratedImageStyle left, GeneratedImageStyle right); + public override readonly string ToString(); + } + public class ImageClient { + protected ImageClient(); + protected internal ImageClient(ClientPipeline pipeline, string model, OpenAIClientOptions options); + public ImageClient(string model, ApiKeyCredential credential, OpenAIClientOptions options); + public ImageClient(string model, ApiKeyCredential credential); + public ImageClient(string model, string apiKey); + public ClientPipeline Pipeline { get; } + public virtual ClientResult GenerateImage(string prompt, ImageGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateImageAsync(string prompt, ImageGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateImageEdit(Stream image, string imageFilename, string prompt, ImageEditOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateImageEdit(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, ImageEditOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateImageEdit(string imageFilePath, string prompt, ImageEditOptions options = null); + public virtual ClientResult GenerateImageEdit(string imageFilePath, string prompt, string maskFilePath, ImageEditOptions options = null); + public virtual Task> GenerateImageEditAsync(Stream image, string imageFilename, string prompt, ImageEditOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateImageEditAsync(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, ImageEditOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateImageEditAsync(string imageFilePath, string prompt, ImageEditOptions options = null); + public virtual Task> GenerateImageEditAsync(string imageFilePath, string prompt, string maskFilePath, ImageEditOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GenerateImageEdits(BinaryContent content, string contentType, RequestOptions options = null); + public virtual ClientResult GenerateImageEdits(Stream image, string imageFilename, string prompt, int imageCount, ImageEditOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateImageEdits(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, int imageCount, ImageEditOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateImageEdits(string imageFilePath, string prompt, int imageCount, ImageEditOptions options = null); + public virtual ClientResult GenerateImageEdits(string imageFilePath, string prompt, string maskFilePath, int imageCount, ImageEditOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GenerateImageEditsAsync(BinaryContent content, string contentType, RequestOptions options = null); + public virtual Task> GenerateImageEditsAsync(Stream image, string imageFilename, string prompt, int imageCount, ImageEditOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateImageEditsAsync(Stream image, string imageFilename, string prompt, Stream mask, string maskFilename, int imageCount, ImageEditOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateImageEditsAsync(string imageFilePath, string prompt, int imageCount, ImageEditOptions options = null); + public virtual Task> GenerateImageEditsAsync(string imageFilePath, string prompt, string maskFilePath, int imageCount, ImageEditOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GenerateImages(BinaryContent content, RequestOptions options = null); + public virtual ClientResult GenerateImages(string prompt, int imageCount, ImageGenerationOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GenerateImagesAsync(BinaryContent content, RequestOptions options = null); + public virtual Task> GenerateImagesAsync(string prompt, int imageCount, ImageGenerationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateImageVariation(Stream image, string imageFilename, ImageVariationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateImageVariation(string imageFilePath, ImageVariationOptions options = null); + public virtual Task> GenerateImageVariationAsync(Stream image, string imageFilename, ImageVariationOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateImageVariationAsync(string imageFilePath, ImageVariationOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GenerateImageVariations(BinaryContent content, string contentType, RequestOptions options = null); + public virtual ClientResult GenerateImageVariations(Stream image, string imageFilename, int imageCount, ImageVariationOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GenerateImageVariations(string imageFilePath, int imageCount, ImageVariationOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GenerateImageVariationsAsync(BinaryContent content, string contentType, RequestOptions options = null); + public virtual Task> GenerateImageVariationsAsync(Stream image, string imageFilename, int imageCount, ImageVariationOptions options = null, CancellationToken cancellationToken = default); + public virtual Task> GenerateImageVariationsAsync(string imageFilePath, int imageCount, ImageVariationOptions options = null); + } + public class ImageEditOptions : IJsonModel, IPersistableModel { + public string EndUserId { get; set; } + public GeneratedImageFormat? ResponseFormat { get; set; } + public GeneratedImageSize? Size { get; set; } + public static explicit operator ImageEditOptions(ClientResult result); + public static implicit operator BinaryContent(ImageEditOptions imageEditOptions); + } + public class ImageGenerationOptions : IJsonModel, IPersistableModel { + public string EndUserId { get; set; } + public GeneratedImageQuality? Quality { get; set; } + public GeneratedImageFormat? ResponseFormat { get; set; } + public GeneratedImageSize? Size { get; set; } + public GeneratedImageStyle? Style { get; set; } + public static explicit operator ImageGenerationOptions(ClientResult result); + public static implicit operator BinaryContent(ImageGenerationOptions imageGenerationOptions); + } + public class ImageVariationOptions : IJsonModel, IPersistableModel { + public string EndUserId { get; set; } + public GeneratedImageFormat? ResponseFormat { get; set; } + public GeneratedImageSize? Size { get; set; } + public static explicit operator ImageVariationOptions(ClientResult result); + public static implicit operator BinaryContent(ImageVariationOptions imageVariationOptions); + } + public static class OpenAIImagesModelFactory { + public static GeneratedImage GeneratedImage(BinaryData imageBytes = null, Uri imageUri = null, string revisedPrompt = null); + public static GeneratedImageCollection GeneratedImageCollection(DateTimeOffset createdAt = default, IEnumerable items = null); + } +} +namespace OpenAI.Models { + public class ModelDeletionResult : IJsonModel, IPersistableModel { + public bool Deleted { get; } + public string ModelId { get; } + public static explicit operator ModelDeletionResult(ClientResult result); + public static implicit operator BinaryContent(ModelDeletionResult modelDeletionResult); + } + public class OpenAIModel : IJsonModel, IPersistableModel { + public DateTimeOffset CreatedAt { get; } + public string Id { get; } + public string OwnedBy { get; } + public static explicit operator OpenAIModel(ClientResult result); + public static implicit operator BinaryContent(OpenAIModel openAIModel); + } + public class OpenAIModelClient { + protected OpenAIModelClient(); + public OpenAIModelClient(ApiKeyCredential credential, OpenAIClientOptions options); + public OpenAIModelClient(ApiKeyCredential credential); + protected internal OpenAIModelClient(ClientPipeline pipeline, OpenAIClientOptions options); + public OpenAIModelClient(string apiKey); + public ClientPipeline Pipeline { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult DeleteModel(string model, RequestOptions options); + public virtual ClientResult DeleteModel(string model, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task DeleteModelAsync(string model, RequestOptions options); + public virtual Task> DeleteModelAsync(string model, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetModel(string model, RequestOptions options); + public virtual ClientResult GetModel(string model, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetModelAsync(string model, RequestOptions options); + public virtual Task> GetModelAsync(string model, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetModels(RequestOptions options); + public virtual ClientResult GetModels(CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetModelsAsync(RequestOptions options); + public virtual Task> GetModelsAsync(CancellationToken cancellationToken = default); + } + public class OpenAIModelCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { + public static explicit operator OpenAIModelCollection(ClientResult result); + public static implicit operator BinaryContent(OpenAIModelCollection openAIModelCollection); + } + public static class OpenAIModelsModelFactory { + public static ModelDeletionResult ModelDeletionResult(string modelId = null, bool deleted = false); + public static OpenAIModel OpenAIModel(string id = null, DateTimeOffset createdAt = default, string ownedBy = null); + public static OpenAIModelCollection OpenAIModelCollection(IEnumerable items = null); + } +} +namespace OpenAI.Moderations { + public class ModerationCategory { + public bool Flagged { get; } + public float Score { get; } + } + public class ModerationClient { + protected ModerationClient(); + protected internal ModerationClient(ClientPipeline pipeline, string model, OpenAIClientOptions options); + public ModerationClient(string model, ApiKeyCredential credential, OpenAIClientOptions options); + public ModerationClient(string model, ApiKeyCredential credential); + public ModerationClient(string model, string apiKey); + public ClientPipeline Pipeline { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult ClassifyText(BinaryContent content, RequestOptions options = null); + public virtual ClientResult ClassifyText(IEnumerable inputs, CancellationToken cancellationToken = default); + public virtual ClientResult ClassifyText(string input, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task ClassifyTextAsync(BinaryContent content, RequestOptions options = null); + public virtual Task> ClassifyTextAsync(IEnumerable inputs, CancellationToken cancellationToken = default); + public virtual Task> ClassifyTextAsync(string input, CancellationToken cancellationToken = default); + } + public class ModerationResult : IJsonModel, IPersistableModel { + public bool Flagged { get; } + public ModerationCategory Harassment { get; } + public ModerationCategory HarassmentThreatening { get; } + public ModerationCategory Hate { get; } + public ModerationCategory HateThreatening { get; } + public ModerationCategory Illicit { get; } + public ModerationCategory IllicitViolent { get; } + public ModerationCategory SelfHarm { get; } + public ModerationCategory SelfHarmInstructions { get; } + public ModerationCategory SelfHarmIntent { get; } + public ModerationCategory Sexual { get; } + public ModerationCategory SexualMinors { get; } + public ModerationCategory Violence { get; } + public ModerationCategory ViolenceGraphic { get; } + public static explicit operator ModerationResult(ClientResult result); + public static implicit operator BinaryContent(ModerationResult moderationResult); + } + public class ModerationResultCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { + public string Id { get; } + public string Model { get; } + public static explicit operator ModerationResultCollection(ClientResult result); + public static implicit operator BinaryContent(ModerationResultCollection moderationResultCollection); + } + public static class OpenAIModerationsModelFactory { + public static ModerationCategory ModerationCategory(bool flagged = false, float score = 0); + public static ModerationResult ModerationResult(bool flagged = false, ModerationCategory hate = null, ModerationCategory hateThreatening = null, ModerationCategory harassment = null, ModerationCategory harassmentThreatening = null, ModerationCategory selfHarm = null, ModerationCategory selfHarmIntent = null, ModerationCategory selfHarmInstructions = null, ModerationCategory sexual = null, ModerationCategory sexualMinors = null, ModerationCategory violence = null, ModerationCategory violenceGraphic = null, ModerationCategory illicit = null, ModerationCategory illicitViolent = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public static ModerationResult ModerationResult(bool flagged, ModerationCategory hate, ModerationCategory hateThreatening, ModerationCategory harassment, ModerationCategory harassmentThreatening, ModerationCategory selfHarm, ModerationCategory selfHarmIntent, ModerationCategory selfHarmInstructions, ModerationCategory sexual, ModerationCategory sexualMinors, ModerationCategory violence, ModerationCategory violenceGraphic); + public static ModerationResultCollection ModerationResultCollection(string id = null, string model = null, IEnumerable items = null); + } +} +namespace OpenAI.RealtimeConversation { + [Experimental("OPENAI002")] + public readonly partial struct ConversationAudioFormat : IEquatable { + public ConversationAudioFormat(string value); + public static ConversationAudioFormat G711Alaw { get; } + public static ConversationAudioFormat G711Ulaw { get; } + public static ConversationAudioFormat Pcm16 { get; } + public readonly bool Equals(ConversationAudioFormat other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ConversationAudioFormat left, ConversationAudioFormat right); + public static implicit operator ConversationAudioFormat(string value); + public static bool operator !=(ConversationAudioFormat left, ConversationAudioFormat right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + [Flags] + public enum ConversationContentModalities { + Default = 0, + Text = 1, + Audio = 2 + } + [Experimental("OPENAI002")] + public abstract class ConversationContentPart : IJsonModel, IPersistableModel { + public string AudioTranscript { get; } + public string Text { get; } + public static ConversationContentPart CreateInputAudioTranscriptPart(string transcript = null); + public static ConversationContentPart CreateInputTextPart(string text); + public static ConversationContentPart CreateOutputAudioTranscriptPart(string transcript = null); + public static ConversationContentPart CreateOutputTextPart(string text); + public static explicit operator ConversationContentPart(ClientResult result); + public static implicit operator BinaryContent(ConversationContentPart conversationContentPart); + public static implicit operator ConversationContentPart(string text); + } + [Experimental("OPENAI002")] + public readonly partial struct ConversationContentPartKind : IEquatable { + public ConversationContentPartKind(string value); + public static ConversationContentPartKind InputAudio { get; } + public static ConversationContentPartKind InputText { get; } + public static ConversationContentPartKind OutputAudio { get; } + public static ConversationContentPartKind OutputText { get; } + public readonly bool Equals(ConversationContentPartKind other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ConversationContentPartKind left, ConversationContentPartKind right); + public static implicit operator ConversationContentPartKind(string value); + public static bool operator !=(ConversationContentPartKind left, ConversationContentPartKind right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + public class ConversationErrorUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public string ErrorCode { get; } + public string ErrorEventId { get; } + public string Message { get; } + public string ParameterName { get; } + public new static explicit operator ConversationErrorUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationErrorUpdate conversationErrorUpdate); + } + [Experimental("OPENAI002")] + public class ConversationFunctionTool : ConversationTool, IJsonModel, IPersistableModel { + public ConversationFunctionTool(); + [SetsRequiredMembers] + public ConversationFunctionTool(string name); + public string Description { get; set; } + public required string Name { get; set; } + public BinaryData Parameters { get; set; } + public new static explicit operator ConversationFunctionTool(ClientResult result); + public static implicit operator BinaryContent(ConversationFunctionTool conversationFunctionTool); + } + [Experimental("OPENAI002")] + public readonly partial struct ConversationIncompleteReason : IEquatable { + public ConversationIncompleteReason(string value); + public static ConversationIncompleteReason ClientCancelled { get; } + public static ConversationIncompleteReason ContentFilter { get; } + public static ConversationIncompleteReason MaxOutputTokens { get; } + public static ConversationIncompleteReason TurnDetected { get; } + public readonly bool Equals(ConversationIncompleteReason other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ConversationIncompleteReason left, ConversationIncompleteReason right); + public static implicit operator ConversationIncompleteReason(string value); + public static bool operator !=(ConversationIncompleteReason left, ConversationIncompleteReason right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + public class ConversationInputAudioClearedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public new static explicit operator ConversationInputAudioClearedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationInputAudioClearedUpdate conversationInputAudioClearedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationInputAudioCommittedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public string ItemId { get; } + public string PreviousItemId { get; } + public new static explicit operator ConversationInputAudioCommittedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationInputAudioCommittedUpdate conversationInputAudioCommittedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationInputSpeechFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public TimeSpan AudioEndTime { get; } + public string ItemId { get; } + public new static explicit operator ConversationInputSpeechFinishedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationInputSpeechFinishedUpdate conversationInputSpeechFinishedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationInputSpeechStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public TimeSpan AudioStartTime { get; } + public string ItemId { get; } + public new static explicit operator ConversationInputSpeechStartedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationInputSpeechStartedUpdate conversationInputSpeechStartedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationInputTokenUsageDetails : IJsonModel, IPersistableModel { + public int AudioTokenCount { get; } + public int CachedTokenCount { get; } + public int TextTokenCount { get; } + public static explicit operator ConversationInputTokenUsageDetails(ClientResult result); + public static implicit operator BinaryContent(ConversationInputTokenUsageDetails conversationInputTokenUsageDetails); + } + [Experimental("OPENAI002")] + public class ConversationInputTranscriptionFailedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ErrorCode { get; } + public string ErrorMessage { get; } + public string ErrorParameterName { get; } + public string ItemId { get; } + public new static explicit operator ConversationInputTranscriptionFailedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationInputTranscriptionFailedUpdate conversationInputTranscriptionFailedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationInputTranscriptionFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public string Transcript { get; } + public new static explicit operator ConversationInputTranscriptionFinishedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationInputTranscriptionFinishedUpdate conversationInputTranscriptionFinishedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationInputTranscriptionOptions : IJsonModel, IPersistableModel { + public ConversationTranscriptionModel? Model { get; set; } + public static explicit operator ConversationInputTranscriptionOptions(ClientResult result); + public static implicit operator BinaryContent(ConversationInputTranscriptionOptions conversationInputTranscriptionOptions); + } + [Experimental("OPENAI002")] + public abstract class ConversationItem : IJsonModel, IPersistableModel { + public string FunctionArguments { get; } + public string FunctionCallId { get; } + public string FunctionName { get; } + public string Id { get; set; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public static ConversationItem CreateAssistantMessage(IEnumerable contentItems); + public static ConversationItem CreateFunctionCall(string name, string callId, string arguments); + public static ConversationItem CreateFunctionCallOutput(string callId, string output); + public static ConversationItem CreateSystemMessage(IEnumerable contentItems); + public static ConversationItem CreateUserMessage(IEnumerable contentItems); + public static explicit operator ConversationItem(ClientResult result); + public static implicit operator BinaryContent(ConversationItem conversationItem); + } + [Experimental("OPENAI002")] + public class ConversationItemCreatedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public string FunctionCallArguments { get; } + public string FunctionCallId { get; } + public string FunctionCallOutput { get; } + public string FunctionName { get; } + public string ItemId { get; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public string PreviousItemId { get; } + public new static explicit operator ConversationItemCreatedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationItemCreatedUpdate conversationItemCreatedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationItemDeletedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public string ItemId { get; } + public new static explicit operator ConversationItemDeletedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationItemDeletedUpdate conversationItemDeletedUpdate); + } + [Experimental("OPENAI002")] + public readonly partial struct ConversationItemStatus : IEquatable { + public ConversationItemStatus(string value); + public static ConversationItemStatus Completed { get; } + public static ConversationItemStatus Incomplete { get; } + public static ConversationItemStatus InProgress { get; } + public readonly bool Equals(ConversationItemStatus other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ConversationItemStatus left, ConversationItemStatus right); + public static implicit operator ConversationItemStatus(string value); + public static bool operator !=(ConversationItemStatus left, ConversationItemStatus right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + public class ConversationItemStreamingAudioFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + public new static explicit operator ConversationItemStreamingAudioFinishedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationItemStreamingAudioFinishedUpdate conversationItemStreamingAudioFinishedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationItemStreamingAudioTranscriptionFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + public string Transcript { get; } + public new static explicit operator ConversationItemStreamingAudioTranscriptionFinishedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationItemStreamingAudioTranscriptionFinishedUpdate conversationItemStreamingAudioTranscriptionFinishedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationItemStreamingFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public string FunctionCallArguments { get; } + public string FunctionCallId { get; } + public string FunctionCallOutput { get; } + public string FunctionName { get; } + public string ItemId { get; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + public new static explicit operator ConversationItemStreamingFinishedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationItemStreamingFinishedUpdate conversationItemStreamingFinishedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationItemStreamingPartDeltaUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public BinaryData AudioBytes { get; } + public string AudioTranscript { get; } + public int ContentPartIndex { get; } + public string FunctionArguments { get; } + public string FunctionCallId { get; } + public string ItemId { get; } + public int ItemIndex { get; } + public string ResponseId { get; } + public string Text { get; } + } + public class ConversationItemStreamingPartFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public string AudioTranscript { get; } + public int ContentPartIndex { get; } + public string FunctionArguments { get; } + public string FunctionCallId { get; } + public string ItemId { get; } + public int ItemIndex { get; } + public string ResponseId { get; } + public string Text { get; } + } + [Experimental("OPENAI002")] + public class ConversationItemStreamingStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public string FunctionCallArguments { get; } + public string FunctionCallId { get; } + public string FunctionCallOutput { get; } + public string FunctionName { get; } + public string ItemId { get; } + public int ItemIndex { get; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public string ResponseId { get; } + public new static explicit operator ConversationItemStreamingStartedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationItemStreamingStartedUpdate conversationItemStreamingStartedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationItemStreamingTextFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + public string Text { get; } + public new static explicit operator ConversationItemStreamingTextFinishedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationItemStreamingTextFinishedUpdate conversationItemStreamingTextFinishedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationItemTruncatedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public int AudioEndMs { get; } + public int ContentIndex { get; } + public string ItemId { get; } + public new static explicit operator ConversationItemTruncatedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationItemTruncatedUpdate conversationItemTruncatedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationMaxTokensChoice : IJsonModel, IPersistableModel { + public ConversationMaxTokensChoice(int numberValue); + public int? NumericValue { get; } + public static ConversationMaxTokensChoice CreateDefaultMaxTokensChoice(); + public static ConversationMaxTokensChoice CreateInfiniteMaxTokensChoice(); + public static ConversationMaxTokensChoice CreateNumericMaxTokensChoice(int maxTokens); + public static implicit operator ConversationMaxTokensChoice(int maxTokens); + } + [Experimental("OPENAI002")] + public readonly partial struct ConversationMessageRole : IEquatable { + public ConversationMessageRole(string value); + public static ConversationMessageRole Assistant { get; } + public static ConversationMessageRole System { get; } + public static ConversationMessageRole User { get; } + public readonly bool Equals(ConversationMessageRole 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 ==(ConversationMessageRole left, ConversationMessageRole right); + public static implicit operator ConversationMessageRole(string value); + public static bool operator !=(ConversationMessageRole left, ConversationMessageRole right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + public class ConversationOutputTokenUsageDetails : IJsonModel, IPersistableModel { + public int AudioTokenCount { get; } + public int TextTokenCount { get; } + public static explicit operator ConversationOutputTokenUsageDetails(ClientResult result); + public static implicit operator BinaryContent(ConversationOutputTokenUsageDetails conversationOutputTokenUsageDetails); + } + [Experimental("OPENAI002")] + public class ConversationRateLimitDetailsItem : IJsonModel, IPersistableModel { + public int MaximumCount { get; } + public string Name { get; } + public int RemainingCount { get; } + public TimeSpan TimeUntilReset { get; } + public static explicit operator ConversationRateLimitDetailsItem(ClientResult result); + public static implicit operator BinaryContent(ConversationRateLimitDetailsItem conversationRateLimitDetailsItem); + } + [Experimental("OPENAI002")] + public class ConversationRateLimitsUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public IReadOnlyList AllDetails { get; } + public ConversationRateLimitDetailsItem RequestDetails { get; } + public ConversationRateLimitDetailsItem TokenDetails { get; } + public new static explicit operator ConversationRateLimitsUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationRateLimitsUpdate conversationRateLimitsUpdate); + } + [Experimental("OPENAI002")] + public class ConversationResponseFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public IReadOnlyList CreatedItems { get; } + public string ResponseId { get; } + public ConversationStatus? Status { get; } + public ConversationStatusDetails StatusDetails { get; } + public ConversationTokenUsage Usage { get; } + public new static explicit operator ConversationResponseFinishedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationResponseFinishedUpdate conversationResponseFinishedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationResponseOptions : IJsonModel, IPersistableModel { + public ConversationContentModalities ContentModalities { get; set; } + public ResponseConversationSelection? ConversationSelection { get; set; } + public string Instructions { get; set; } + public ConversationMaxTokensChoice MaxOutputTokens { get; set; } + public IDictionary Metadata { get; } + public ConversationAudioFormat? OutputAudioFormat { get; set; } + public IList OverrideItems { get; } + public float? Temperature { get; set; } + public ConversationToolChoice ToolChoice { get; set; } + public IList Tools { get; } + public ConversationVoice? Voice { get; set; } + public static explicit operator ConversationResponseOptions(ClientResult result); + public static implicit operator BinaryContent(ConversationResponseOptions conversationResponseOptions); + } + [Experimental("OPENAI002")] + public class ConversationResponseStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public IReadOnlyList CreatedItems { get; } + public string ResponseId { get; } + public ConversationStatus Status { get; } + public ConversationStatusDetails StatusDetails { get; } + public ConversationTokenUsage Usage { get; } + public new static explicit operator ConversationResponseStartedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationResponseStartedUpdate conversationResponseStartedUpdate); + } + [Experimental("OPENAI002")] + public class ConversationSessionConfiguredUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public ConversationContentModalities ContentModalities { get; } + public ConversationAudioFormat InputAudioFormat { get; } + public ConversationInputTranscriptionOptions InputTranscriptionOptions { get; } + public string Instructions { get; } + public ConversationMaxTokensChoice MaxOutputTokens { get; } + public string Model { get; } + public ConversationAudioFormat OutputAudioFormat { get; } + public string SessionId { get; } + public float Temperature { get; } + public ConversationToolChoice ToolChoice { get; } + public IReadOnlyList Tools { get; } + public ConversationTurnDetectionOptions TurnDetectionOptions { get; } + public ConversationVoice Voice { get; } + public new static explicit operator ConversationSessionConfiguredUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationSessionConfiguredUpdate conversationSessionConfiguredUpdate); + } + [Experimental("OPENAI002")] + public class ConversationSessionOptions : IJsonModel, IPersistableModel { + public ConversationContentModalities ContentModalities { get; set; } + public ConversationAudioFormat? InputAudioFormat { get; set; } + public ConversationInputTranscriptionOptions InputTranscriptionOptions { get; set; } + public string Instructions { get; set; } + public ConversationMaxTokensChoice MaxOutputTokens { get; set; } + public ConversationAudioFormat? OutputAudioFormat { get; set; } + public float? Temperature { get; set; } + public ConversationToolChoice ToolChoice { get; set; } + public IList Tools { get; } + public ConversationTurnDetectionOptions TurnDetectionOptions { get; set; } + public ConversationVoice? Voice { get; set; } + public static explicit operator ConversationSessionOptions(ClientResult result); + public static implicit operator BinaryContent(ConversationSessionOptions conversationSessionOptions); + } + [Experimental("OPENAI002")] + public class ConversationSessionStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { + public ConversationContentModalities ContentModalities { get; } + public ConversationAudioFormat InputAudioFormat { get; } + public ConversationInputTranscriptionOptions InputTranscriptionOptions { get; } + public string Instructions { get; } + public ConversationMaxTokensChoice MaxOutputTokens { get; } + public string Model { get; } + public ConversationAudioFormat OutputAudioFormat { get; } + public string SessionId { get; } + public float Temperature { get; } + public ConversationToolChoice ToolChoice { get; } + public IReadOnlyList Tools { get; } + public ConversationTurnDetectionOptions TurnDetectionOptions { get; } + public ConversationVoice Voice { get; } + public new static explicit operator ConversationSessionStartedUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationSessionStartedUpdate conversationSessionStartedUpdate); + } + [Experimental("OPENAI002")] + public readonly partial struct ConversationStatus : IEquatable { + public ConversationStatus(string value); + public static ConversationStatus Cancelled { get; } + public static ConversationStatus Completed { get; } + public static ConversationStatus Failed { get; } + public static ConversationStatus Incomplete { get; } + public readonly bool Equals(ConversationStatus other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ConversationStatus left, ConversationStatus right); + public static implicit operator ConversationStatus(string value); + public static bool operator !=(ConversationStatus left, ConversationStatus right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + public class ConversationStatusDetails : IJsonModel, IPersistableModel { + public string ErrorCode { get; } + public string ErrorKind { get; } + public ConversationIncompleteReason? IncompleteReason { get; } + public ConversationStatus StatusKind { get; } + public static explicit operator ConversationStatusDetails(ClientResult result); + public static implicit operator BinaryContent(ConversationStatusDetails conversationStatusDetails); + } + [Experimental("OPENAI002")] + public class ConversationTokenUsage : IJsonModel, IPersistableModel { + public int InputTokenCount { get; } + public ConversationInputTokenUsageDetails InputTokenDetails { get; } + public int OutputTokenCount { get; } + public ConversationOutputTokenUsageDetails OutputTokenDetails { get; } + public int TotalTokenCount { get; } + public static explicit operator ConversationTokenUsage(ClientResult result); + public static implicit operator BinaryContent(ConversationTokenUsage conversationTokenUsage); + } + [Experimental("OPENAI002")] + public abstract class ConversationTool : IJsonModel, IPersistableModel { + public ConversationToolKind Kind { get; } + public static ConversationTool CreateFunctionTool(string name, string description = null, BinaryData parameters = null); + public static explicit operator ConversationTool(ClientResult result); + public static implicit operator BinaryContent(ConversationTool conversationTool); + } + [Experimental("OPENAI002")] + public class ConversationToolChoice : IJsonModel, IPersistableModel { + public string FunctionName { get; } + public ConversationToolChoiceKind Kind { get; } + public static ConversationToolChoice CreateAutoToolChoice(); + public static ConversationToolChoice CreateFunctionToolChoice(string functionName); + public static ConversationToolChoice CreateNoneToolChoice(); + public static ConversationToolChoice CreateRequiredToolChoice(); + } + [Experimental("OPENAI002")] + public enum ConversationToolChoiceKind { + Unknown = 0, + Auto = 1, + None = 2, + Required = 3, + Function = 4 + } + [Experimental("OPENAI002")] + public readonly partial struct ConversationToolKind : IEquatable { + public ConversationToolKind(string value); + public static ConversationToolKind Function { get; } + public readonly bool Equals(ConversationToolKind other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ConversationToolKind left, ConversationToolKind right); + public static implicit operator ConversationToolKind(string value); + public static bool operator !=(ConversationToolKind left, ConversationToolKind right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + public readonly partial struct ConversationTranscriptionModel : IEquatable { + public ConversationTranscriptionModel(string value); + public static ConversationTranscriptionModel Whisper1 { get; } + public readonly bool Equals(ConversationTranscriptionModel other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ConversationTranscriptionModel left, ConversationTranscriptionModel right); + public static implicit operator ConversationTranscriptionModel(string value); + public static bool operator !=(ConversationTranscriptionModel left, ConversationTranscriptionModel right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + public enum ConversationTurnDetectionKind { + ServerVoiceActivityDetection = 0, + Disabled = 1 + } + [Experimental("OPENAI002")] + public abstract class ConversationTurnDetectionOptions : IJsonModel, IPersistableModel { + public ConversationTurnDetectionKind Kind { get; protected internal set; } + public static ConversationTurnDetectionOptions CreateDisabledTurnDetectionOptions(); + public static ConversationTurnDetectionOptions CreateServerVoiceActivityTurnDetectionOptions(float? detectionThreshold = null, TimeSpan? prefixPaddingDuration = null, TimeSpan? silenceDuration = null, bool? enableAutomaticResponseCreation = null); + public static explicit operator ConversationTurnDetectionOptions(ClientResult result); + public static implicit operator BinaryContent(ConversationTurnDetectionOptions conversationTurnDetectionOptions); + } + [Experimental("OPENAI002")] + public abstract class ConversationUpdate : IJsonModel, IPersistableModel { + public string EventId { get; } + public ConversationUpdateKind Kind { get; protected internal set; } + public BinaryData GetRawContent(); + public static explicit operator ConversationUpdate(ClientResult result); + public static implicit operator BinaryContent(ConversationUpdate conversationUpdate); + } + [Experimental("OPENAI002")] + public enum ConversationUpdateKind { + Unknown = 0, + SessionStarted = 1, + SessionConfigured = 2, + ItemCreated = 3, + ConversationCreated = 4, + ItemDeleted = 5, + ItemTruncated = 6, + ResponseStarted = 7, + ResponseFinished = 8, + RateLimitsUpdated = 9, + ItemStreamingStarted = 10, + ItemStreamingFinished = 11, + ItemContentPartStarted = 12, + ItemContentPartFinished = 13, + ItemStreamingPartAudioDelta = 14, + ItemStreamingPartAudioFinished = 15, + ItemStreamingPartAudioTranscriptionDelta = 16, + ItemStreamingPartAudioTranscriptionFinished = 17, + ItemStreamingPartTextDelta = 18, + ItemStreamingPartTextFinished = 19, + ItemStreamingFunctionCallArgumentsDelta = 20, + ItemStreamingFunctionCallArgumentsFinished = 21, + InputSpeechStarted = 22, + InputSpeechStopped = 23, + InputTranscriptionFinished = 24, + InputTranscriptionFailed = 25, + InputAudioCommitted = 26, + InputAudioCleared = 27, + Error = 28 + } + [Experimental("OPENAI002")] + public readonly partial struct ConversationVoice : IEquatable { + public ConversationVoice(string value); + public static ConversationVoice Alloy { get; } + public static ConversationVoice Ash { get; } + public static ConversationVoice Ballad { get; } + public static ConversationVoice Coral { get; } + public static ConversationVoice Echo { get; } + public static ConversationVoice Sage { get; } + public static ConversationVoice Shimmer { get; } + public static ConversationVoice Verse { get; } + public readonly bool Equals(ConversationVoice other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ConversationVoice left, ConversationVoice right); + public static implicit operator ConversationVoice(string value); + public static bool operator !=(ConversationVoice left, ConversationVoice right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + public class RealtimeConversationClient { + protected RealtimeConversationClient(); + protected internal RealtimeConversationClient(ClientPipeline pipeline, OpenAIClientOptions options); + public RealtimeConversationClient(string model, ApiKeyCredential credential, OpenAIClientOptions options); + public RealtimeConversationClient(string model, ApiKeyCredential credential); + public ClientPipeline Pipeline { get; } + public event EventHandler OnReceivingCommand { add; remove; } + public event EventHandler OnSendingCommand { add; remove; } + public RealtimeConversationSession StartConversationSession(CancellationToken cancellationToken = default); + public virtual Task StartConversationSessionAsync(RequestOptions options); + public virtual Task StartConversationSessionAsync(CancellationToken cancellationToken = default); + } + [Experimental("OPENAI002")] + public class RealtimeConversationSession : IDisposable { + protected internal RealtimeConversationSession(RealtimeConversationClient parentClient, Uri endpoint, ApiKeyCredential credential); + public Net.WebSockets.WebSocket WebSocket { get; protected set; } + public virtual void AddItem(ConversationItem item, string previousItemId, CancellationToken cancellationToken = default); + public virtual void AddItem(ConversationItem item, CancellationToken cancellationToken = default); + public virtual Task AddItemAsync(ConversationItem item, string previousItemId, CancellationToken cancellationToken = default); + public virtual Task AddItemAsync(ConversationItem item, CancellationToken cancellationToken = default); + public virtual void CancelResponse(CancellationToken cancellationToken = default); + public virtual Task CancelResponseAsync(CancellationToken cancellationToken = default); + public virtual void ClearInputAudio(CancellationToken cancellationToken = default); + public virtual Task ClearInputAudioAsync(CancellationToken cancellationToken = default); + public virtual void CommitPendingAudio(CancellationToken cancellationToken = default); + public virtual Task CommitPendingAudioAsync(CancellationToken cancellationToken = default); + public virtual void ConfigureSession(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default); + public virtual Task ConfigureSessionAsync(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + protected internal virtual void Connect(RequestOptions options); + [EditorBrowsable(EditorBrowsableState.Never)] + protected internal virtual Task ConnectAsync(RequestOptions options); + public virtual void DeleteItem(string itemId, CancellationToken cancellationToken = default); + public virtual Task DeleteItemAsync(string itemId, CancellationToken cancellationToken = default); + public void Dispose(); + public virtual void InterruptResponse(CancellationToken cancellationToken = default); + public virtual Task InterruptResponseAsync(CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual IEnumerable ReceiveUpdates(RequestOptions options); + public virtual IEnumerable ReceiveUpdates(CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual IAsyncEnumerable ReceiveUpdatesAsync(RequestOptions options); + public virtual IAsyncEnumerable ReceiveUpdatesAsync(CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual void SendCommand(BinaryData data, RequestOptions options); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task SendCommandAsync(BinaryData data, RequestOptions options); + public virtual void SendInputAudio(BinaryData audio, CancellationToken cancellationToken = default); + public virtual void SendInputAudio(Stream audio, CancellationToken cancellationToken = default); + public virtual Task SendInputAudioAsync(BinaryData audio, CancellationToken cancellationToken = default); + public virtual Task SendInputAudioAsync(Stream audio, CancellationToken cancellationToken = default); + public virtual void StartResponse(ConversationResponseOptions options, CancellationToken cancellationToken = default); + public void StartResponse(CancellationToken cancellationToken = default); + public virtual Task StartResponseAsync(ConversationResponseOptions options, CancellationToken cancellationToken = default); + public virtual Task StartResponseAsync(CancellationToken cancellationToken = default); + public virtual void TruncateItem(string itemId, int contentPartIndex, TimeSpan audioDuration, CancellationToken cancellationToken = default); + public virtual Task TruncateItemAsync(string itemId, int contentPartIndex, TimeSpan audioDuration, CancellationToken cancellationToken = default); + } + [Experimental("OPENAI002")] + public readonly partial struct ResponseConversationSelection : IEquatable { + public ResponseConversationSelection(string value); + public static ResponseConversationSelection Auto { get; } + public static ResponseConversationSelection None { get; } + public readonly bool Equals(ResponseConversationSelection other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseConversationSelection left, ResponseConversationSelection right); + public static implicit operator ResponseConversationSelection(string value); + public static bool operator !=(ResponseConversationSelection left, ResponseConversationSelection right); + public override readonly string ToString(); + } +} +namespace OpenAI.VectorStores { + [Experimental("OPENAI001")] + public class AddFileToVectorStoreOperation : OperationResult { + public string FileId { get; } + public override ContinuationToken? RehydrationToken { get; protected set; } + public VectorStoreFileAssociationStatus? Status { get; } + public VectorStoreFileAssociation? Value { get; } + public string VectorStoreId { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetFileAssociation(RequestOptions? options); + public virtual ClientResult GetFileAssociation(CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetFileAssociationAsync(RequestOptions? options); + public virtual Task> GetFileAssociationAsync(CancellationToken cancellationToken = default); + public static AddFileToVectorStoreOperation Rehydrate(VectorStoreClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(VectorStoreClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public override ClientResult UpdateStatus(RequestOptions? options = null); + public override ValueTask UpdateStatusAsync(RequestOptions? options = null); + } + [Experimental("OPENAI001")] + public class CreateBatchFileJobOperation : OperationResult { + public string BatchId { get; } + public override ContinuationToken? RehydrationToken { get; protected set; } + public VectorStoreBatchFileJobStatus? Status { get; } + public VectorStoreBatchFileJob? Value { get; } + public string VectorStoreId { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult Cancel(RequestOptions? options); + public virtual ClientResult Cancel(CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CancelAsync(RequestOptions? options); + public virtual Task> CancelAsync(CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetFileBatch(RequestOptions? options); + public virtual ClientResult GetFileBatch(CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetFileBatchAsync(RequestOptions? options); + public virtual Task> GetFileBatchAsync(CancellationToken cancellationToken = default); + public static CreateBatchFileJobOperation Rehydrate(VectorStoreClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(VectorStoreClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public override ClientResult UpdateStatus(RequestOptions? options = null); + public override ValueTask UpdateStatusAsync(RequestOptions? options = null); + } + [Experimental("OPENAI001")] + public class CreateVectorStoreOperation : OperationResult { + public override ContinuationToken? RehydrationToken { get; protected set; } + public VectorStoreStatus? Status { get; } + public VectorStore? Value { get; } + public string VectorStoreId { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetVectorStore(RequestOptions? options); + public virtual ClientResult GetVectorStore(CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetVectorStoreAsync(RequestOptions? options); + public virtual Task> GetVectorStoreAsync(CancellationToken cancellationToken = default); + public static CreateVectorStoreOperation Rehydrate(VectorStoreClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(VectorStoreClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public override ClientResult UpdateStatus(RequestOptions? options = null); + public override ValueTask UpdateStatusAsync(RequestOptions? options = null); + } + [Experimental("OPENAI001")] + public abstract class FileChunkingStrategy : IJsonModel, IPersistableModel { + public static FileChunkingStrategy Auto { get; } + public static FileChunkingStrategy Unknown { get; } + public static FileChunkingStrategy CreateStaticStrategy(int maxTokensPerChunk, int overlappingTokenCount); + public static explicit operator FileChunkingStrategy(ClientResult result); + public static implicit operator BinaryContent(FileChunkingStrategy fileChunkingStrategy); + } + [Experimental("OPENAI001")] + public class FileFromStoreRemovalResult : IJsonModel, IPersistableModel { + public string FileId { get; } + public bool Removed { get; } + public static explicit operator FileFromStoreRemovalResult(ClientResult result); + public static implicit operator BinaryContent(FileFromStoreRemovalResult fileFromStoreRemovalResult); + } + [Experimental("OPENAI001")] + public class StaticFileChunkingStrategy : FileChunkingStrategy, IJsonModel, IPersistableModel { + public StaticFileChunkingStrategy(int maxTokensPerChunk, int overlappingTokenCount); + public int MaxTokensPerChunk { get; } + public int OverlappingTokenCount { get; } + public new static explicit operator StaticFileChunkingStrategy(ClientResult result); + public static implicit operator BinaryContent(StaticFileChunkingStrategy staticFileChunkingStrategy); + } + [Experimental("OPENAI001")] + public class VectorStore : IJsonModel, IPersistableModel { + public DateTimeOffset CreatedAt { get; } + public VectorStoreExpirationPolicy ExpirationPolicy { get; } + public DateTimeOffset? ExpiresAt { get; } + public VectorStoreFileCounts FileCounts { get; } + public string Id { get; } + public DateTimeOffset? LastActiveAt { get; } + public IReadOnlyDictionary Metadata { get; } + public string Name { get; } + public VectorStoreStatus Status { get; } + public int UsageBytes { get; } + public static explicit operator VectorStore(ClientResult result); + public static implicit operator BinaryContent(VectorStore vectorStore); + } + [Experimental("OPENAI001")] + public class VectorStoreBatchFileJob : IJsonModel, IPersistableModel { + public string BatchId { get; } + public DateTimeOffset CreatedAt { get; } + public VectorStoreFileCounts FileCounts { get; } + public VectorStoreBatchFileJobStatus Status { get; } + public string VectorStoreId { get; } + public static explicit operator VectorStoreBatchFileJob(ClientResult result); + public static implicit operator BinaryContent(VectorStoreBatchFileJob vectorStoreBatchFileJob); + } + [Experimental("OPENAI001")] + public readonly partial struct VectorStoreBatchFileJobStatus : IEquatable { + public VectorStoreBatchFileJobStatus(string value); + public static VectorStoreBatchFileJobStatus Cancelled { get; } + public static VectorStoreBatchFileJobStatus Completed { get; } + public static VectorStoreBatchFileJobStatus Failed { get; } + public static VectorStoreBatchFileJobStatus InProgress { get; } + public readonly bool Equals(VectorStoreBatchFileJobStatus other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(VectorStoreBatchFileJobStatus left, VectorStoreBatchFileJobStatus right); + public static implicit operator VectorStoreBatchFileJobStatus(string value); + public static bool operator !=(VectorStoreBatchFileJobStatus left, VectorStoreBatchFileJobStatus right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class VectorStoreClient { + protected VectorStoreClient(); + public VectorStoreClient(ApiKeyCredential credential, OpenAIClientOptions options); + public VectorStoreClient(ApiKeyCredential credential); + protected internal VectorStoreClient(ClientPipeline pipeline, OpenAIClientOptions options); + public VectorStoreClient(string apiKey); + public ClientPipeline Pipeline { get; } + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual AddFileToVectorStoreOperation AddFileToVectorStore(string vectorStoreId, BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); + public virtual AddFileToVectorStoreOperation AddFileToVectorStore(string vectorStoreId, string fileId, bool waitUntilCompleted, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task AddFileToVectorStoreAsync(string vectorStoreId, BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); + public virtual Task AddFileToVectorStoreAsync(string vectorStoreId, string fileId, bool waitUntilCompleted, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult CancelBatchFileJob(string vectorStoreId, string batchId, RequestOptions options); + public virtual ClientResult CancelBatchFileJob(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CancelBatchFileJobAsync(string vectorStoreId, string batchId, RequestOptions options); + public virtual Task> CancelBatchFileJobAsync(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual CreateBatchFileJobOperation CreateBatchFileJob(string vectorStoreId, BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); + public virtual CreateBatchFileJobOperation CreateBatchFileJob(string vectorStoreId, IEnumerable fileIds, bool waitUntilCompleted, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CreateBatchFileJobAsync(string vectorStoreId, BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); + public virtual Task CreateBatchFileJobAsync(string vectorStoreId, IEnumerable fileIds, bool waitUntilCompleted, CancellationToken cancellationToken = default); + public virtual CreateVectorStoreOperation CreateVectorStore(bool waitUntilCompleted, VectorStoreCreationOptions vectorStore = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual CreateVectorStoreOperation CreateVectorStore(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); + public virtual ClientResult CreateVectorStore(BinaryContent content, RequestOptions options = null); + public virtual Task CreateVectorStoreAsync(bool waitUntilCompleted, VectorStoreCreationOptions vectorStore = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task CreateVectorStoreAsync(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); + public virtual Task CreateVectorStoreAsync(BinaryContent content, RequestOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult DeleteVectorStore(string vectorStoreId, RequestOptions options); + public virtual ClientResult DeleteVectorStore(string vectorStoreId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task DeleteVectorStoreAsync(string vectorStoreId, RequestOptions options); + public virtual Task> DeleteVectorStoreAsync(string vectorStoreId, CancellationToken cancellationToken = default); + public virtual ClientResult GetBatchFileJob(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default); + public virtual Task> GetBatchFileJobAsync(string vectorStoreId, string batchJobId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult GetFileAssociation(string vectorStoreId, string fileId, RequestOptions options); + public virtual ClientResult GetFileAssociation(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task GetFileAssociationAsync(string vectorStoreId, string fileId, RequestOptions options); + public virtual Task> GetFileAssociationAsync(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); + public virtual CollectionResult GetFileAssociations(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + public virtual CollectionResult GetFileAssociations(string vectorStoreId, VectorStoreFileAssociationCollectionOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual CollectionResult GetFileAssociations(string vectorStoreId, int? limit, string order, string after, string before, string filter, RequestOptions options); + public virtual CollectionResult GetFileAssociations(string vectorStoreId, string batchJobId, VectorStoreFileAssociationCollectionOptions options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult GetFileAssociations(string vectorStoreId, string batchJobId, ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual CollectionResult GetFileAssociations(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options); + public virtual AsyncCollectionResult GetFileAssociationsAsync(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetFileAssociationsAsync(string vectorStoreId, VectorStoreFileAssociationCollectionOptions options = null, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual AsyncCollectionResult GetFileAssociationsAsync(string vectorStoreId, int? limit, string order, string after, string before, string filter, RequestOptions options); + public virtual AsyncCollectionResult GetFileAssociationsAsync(string vectorStoreId, string batchJobId, VectorStoreFileAssociationCollectionOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetFileAssociationsAsync(string vectorStoreId, string batchJobId, ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual AsyncCollectionResult GetFileAssociationsAsync(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options); + public virtual ClientResult GetVectorStore(string vectorStoreId, CancellationToken cancellationToken = default); + public virtual CollectionResult GetVectorStores(VectorStoreCollectionOptions options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult GetVectorStores(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual CollectionResult GetVectorStores(int? limit, string order, string after, string before, RequestOptions options); + public virtual AsyncCollectionResult GetVectorStoresAsync(VectorStoreCollectionOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetVectorStoresAsync(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual AsyncCollectionResult GetVectorStoresAsync(int? limit, string order, string after, string before, RequestOptions options); + public virtual ClientResult ModifyVectorStore(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult ModifyVectorStore(string vectorStoreId, BinaryContent content, RequestOptions options = null); + public virtual Task> ModifyVectorStoreAsync(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task ModifyVectorStoreAsync(string vectorStoreId, BinaryContent content, RequestOptions options = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ClientResult RemoveFileFromStore(string vectorStoreId, string fileId, RequestOptions options); + public virtual ClientResult RemoveFileFromStore(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task RemoveFileFromStoreAsync(string vectorStoreId, string fileId, RequestOptions options); + public virtual Task> RemoveFileFromStoreAsync(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); + } + [Experimental("OPENAI001")] + public class VectorStoreCollectionOptions { + public string AfterId { get; set; } + public string BeforeId { get; set; } + public VectorStoreCollectionOrder? Order { get; set; } + public int? PageSizeLimit { get; set; } + } + [Experimental("OPENAI001")] + public readonly partial struct VectorStoreCollectionOrder : IEquatable { + public VectorStoreCollectionOrder(string value); + public static VectorStoreCollectionOrder Ascending { get; } + public static VectorStoreCollectionOrder Descending { get; } + public readonly bool Equals(VectorStoreCollectionOrder other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(VectorStoreCollectionOrder left, VectorStoreCollectionOrder right); + public static implicit operator VectorStoreCollectionOrder(string value); + public static bool operator !=(VectorStoreCollectionOrder left, VectorStoreCollectionOrder right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class VectorStoreCreationOptions : IJsonModel, IPersistableModel { + public FileChunkingStrategy ChunkingStrategy { get; set; } + public VectorStoreExpirationPolicy ExpirationPolicy { get; set; } + public IList FileIds { get; } + public IDictionary Metadata { get; } + public string Name { get; set; } + public static explicit operator VectorStoreCreationOptions(ClientResult result); + public static implicit operator BinaryContent(VectorStoreCreationOptions vectorStoreCreationOptions); + } + [Experimental("OPENAI001")] + public class VectorStoreDeletionResult : IJsonModel, IPersistableModel { + public bool Deleted { get; } + public string VectorStoreId { get; } + public static explicit operator VectorStoreDeletionResult(ClientResult result); + public static implicit operator BinaryContent(VectorStoreDeletionResult vectorStoreDeletionResult); + } + [Experimental("OPENAI001")] + public enum VectorStoreExpirationAnchor { + Unknown = 0, + LastActiveAt = 1 + } + [Experimental("OPENAI001")] + public class VectorStoreExpirationPolicy : IJsonModel, IPersistableModel { + public VectorStoreExpirationPolicy(); + [SetsRequiredMembers] + public VectorStoreExpirationPolicy(VectorStoreExpirationAnchor anchor, int days); + public required VectorStoreExpirationAnchor Anchor { get; set; } + public required int Days { get; set; } + public static explicit operator VectorStoreExpirationPolicy(ClientResult result); + public static implicit operator BinaryContent(VectorStoreExpirationPolicy vectorStoreExpirationPolicy); + } + [Experimental("OPENAI001")] + public class VectorStoreFileAssociation : IJsonModel, IPersistableModel { + public FileChunkingStrategy ChunkingStrategy { get; } + public DateTimeOffset CreatedAt { get; } + public string FileId { get; } + public VectorStoreFileAssociationError LastError { get; } + public int Size { get; } + public VectorStoreFileAssociationStatus Status { get; } + public string VectorStoreId { get; } + public static explicit operator VectorStoreFileAssociation(ClientResult result); + public static implicit operator BinaryContent(VectorStoreFileAssociation vectorStoreFileAssociation); + } + [Experimental("OPENAI001")] + public class VectorStoreFileAssociationCollectionOptions { + public string AfterId { get; set; } + public string BeforeId { get; set; } + public VectorStoreFileStatusFilter? Filter { get; set; } + public VectorStoreFileAssociationCollectionOrder? Order { get; set; } + public int? PageSizeLimit { get; set; } + } + [Experimental("OPENAI001")] + public readonly partial struct VectorStoreFileAssociationCollectionOrder : IEquatable { + public VectorStoreFileAssociationCollectionOrder(string value); + public static VectorStoreFileAssociationCollectionOrder Ascending { get; } + public static VectorStoreFileAssociationCollectionOrder Descending { get; } + public readonly bool Equals(VectorStoreFileAssociationCollectionOrder other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(VectorStoreFileAssociationCollectionOrder left, VectorStoreFileAssociationCollectionOrder right); + public static implicit operator VectorStoreFileAssociationCollectionOrder(string value); + public static bool operator !=(VectorStoreFileAssociationCollectionOrder left, VectorStoreFileAssociationCollectionOrder right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class VectorStoreFileAssociationError : IJsonModel, IPersistableModel { + public VectorStoreFileAssociationErrorCode Code { get; } + public string Message { get; } + public static explicit operator VectorStoreFileAssociationError(ClientResult result); + public static implicit operator BinaryContent(VectorStoreFileAssociationError vectorStoreFileAssociationError); + } + [Experimental("OPENAI001")] + public readonly partial struct VectorStoreFileAssociationErrorCode : IEquatable { + public VectorStoreFileAssociationErrorCode(string value); + public static VectorStoreFileAssociationErrorCode InvalidFile { get; } + public static VectorStoreFileAssociationErrorCode ServerError { get; } + public static VectorStoreFileAssociationErrorCode UnsupportedFile { get; } + public readonly bool Equals(VectorStoreFileAssociationErrorCode other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(VectorStoreFileAssociationErrorCode left, VectorStoreFileAssociationErrorCode right); + public static implicit operator VectorStoreFileAssociationErrorCode(string value); + public static bool operator !=(VectorStoreFileAssociationErrorCode left, VectorStoreFileAssociationErrorCode right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public enum VectorStoreFileAssociationStatus { + Unknown = 0, + InProgress = 1, + Completed = 2, + Cancelled = 3, + Failed = 4 + } + [Experimental("OPENAI001")] + public class VectorStoreFileCounts : IJsonModel, IPersistableModel { + public int Cancelled { get; } + public int Completed { get; } + public int Failed { get; } + public int InProgress { get; } + public int Total { get; } + public static explicit operator VectorStoreFileCounts(ClientResult result); + public static implicit operator BinaryContent(VectorStoreFileCounts vectorStoreFileCounts); + } + [Experimental("OPENAI001")] + public readonly partial struct VectorStoreFileStatusFilter : IEquatable { + public VectorStoreFileStatusFilter(string value); + public static VectorStoreFileStatusFilter Cancelled { get; } + public static VectorStoreFileStatusFilter Completed { get; } + public static VectorStoreFileStatusFilter Failed { get; } + public static VectorStoreFileStatusFilter InProgress { get; } + public readonly bool Equals(VectorStoreFileStatusFilter other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(VectorStoreFileStatusFilter left, VectorStoreFileStatusFilter right); + public static implicit operator VectorStoreFileStatusFilter(string value); + public static bool operator !=(VectorStoreFileStatusFilter left, VectorStoreFileStatusFilter right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class VectorStoreModificationOptions : IJsonModel, IPersistableModel { + public VectorStoreExpirationPolicy ExpirationPolicy { get; set; } + public IDictionary Metadata { get; } + public string Name { get; set; } + public static explicit operator VectorStoreModificationOptions(ClientResult result); + public static implicit operator BinaryContent(VectorStoreModificationOptions vectorStoreModificationOptions); + } + [Experimental("OPENAI001")] + public enum VectorStoreStatus { + Unknown = 0, + InProgress = 1, + Completed = 2, + Expired = 3 + } +} \ No newline at end of file diff --git a/api/OpenAI.netstandard2.0.cs b/api/OpenAI.netstandard2.0.cs index 84d1f0fa1..52b1d8263 100644 --- a/api/OpenAI.netstandard2.0.cs +++ b/api/OpenAI.netstandard2.0.cs @@ -289,12 +289,8 @@ public class AssistantThread : IJsonModel, IPersistableModel, IPersistableModel { - protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator CodeInterpreterToolDefinition(ClientResult result); public static implicit operator BinaryContent(CodeInterpreterToolDefinition codeInterpreterToolDefinition); - protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class CodeInterpreterToolResources : IJsonModel, IPersistableModel { public IList FileIds { get; } @@ -326,12 +322,8 @@ public class FileSearchRankingOptions : IJsonModel, IP public class FileSearchToolDefinition : ToolDefinition, IJsonModel, IPersistableModel { public int? MaxResults { get; set; } public FileSearchRankingOptions RankingOptions { get; set; } - protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator FileSearchToolDefinition(ClientResult result); public static implicit operator BinaryContent(FileSearchToolDefinition fileSearchToolDefinition); - protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class FileSearchToolResources : IJsonModel, IPersistableModel { public IList NewVectorStores { get; } @@ -346,12 +338,8 @@ public class FunctionToolDefinition : ToolDefinition, IJsonModel ToolCalls { get; } - protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator AssistantChatMessage(ClientResult result); public static implicit operator BinaryContent(AssistantChatMessage assistantChatMessage); - protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatAudioOptions : IJsonModel, IPersistableModel { public ChatAudioOptions(ChatOutputAudioVoice outputAudioVoice, ChatOutputAudioFormat outputAudioFormat); @@ -1514,33 +1498,35 @@ public class DeveloperChatMessage : ChatMessage, IJsonModel contentParts); public DeveloperChatMessage(string content); public string ParticipantName { get; set; } - protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator DeveloperChatMessage(ClientResult result); public static implicit operator BinaryContent(DeveloperChatMessage developerChatMessage); - protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Obsolete("This class is obsolete. Please use ToolChatMessage instead.")] public class FunctionChatMessage : ChatMessage, IJsonModel, IPersistableModel { public FunctionChatMessage(string functionName, string content); public string FunctionName { get; } - protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator FunctionChatMessage(ClientResult result); public static implicit operator BinaryContent(FunctionChatMessage functionChatMessage); - protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIChatModelFactory { public static ChatCompletion ChatCompletion(string id = null, ChatFinishReason finishReason = ChatFinishReason.Stop, ChatMessageContent content = null, string refusal = null, IEnumerable toolCalls = null, ChatMessageRole role = ChatMessageRole.System, ChatFunctionCall functionCall = null, IEnumerable contentTokenLogProbabilities = null, IEnumerable refusalTokenLogProbabilities = null, DateTimeOffset createdAt = default, string model = null, string systemFingerprint = null, ChatTokenUsage usage = null, ChatOutputAudio outputAudio = null); + [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 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)] + public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount, int audioTokenCount); + [EditorBrowsable(EditorBrowsableState.Never)] + public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount); public static ChatTokenLogProbabilityDetails ChatTokenLogProbabilityDetails(string token = null, float logProbability = 0, ReadOnlyMemory? utf8Bytes = null, IEnumerable topLogProbabilities = null); public static ChatTokenTopLogProbabilityDetails ChatTokenTopLogProbabilityDetails(string token = null, float logProbability = 0, ReadOnlyMemory? utf8Bytes = null); public static ChatTokenUsage ChatTokenUsage(int outputTokenCount = 0, int inputTokenCount = 0, int totalTokenCount = 0, ChatOutputTokenUsageDetails outputTokenDetails = null, ChatInputTokenUsageDetails inputTokenDetails = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public static ChatTokenUsage ChatTokenUsage(int outputTokenCount, int inputTokenCount, int totalTokenCount, ChatOutputTokenUsageDetails outputTokenDetails); public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate(string completionId = null, ChatMessageContent contentUpdate = null, StreamingChatFunctionCallUpdate functionCallUpdate = null, IEnumerable toolCallUpdates = null, ChatMessageRole? role = null, string refusalUpdate = null, IEnumerable contentTokenLogProbabilities = null, IEnumerable refusalTokenLogProbabilities = null, ChatFinishReason? finishReason = null, DateTimeOffset createdAt = default, string model = null, string systemFingerprint = null, ChatTokenUsage usage = null, StreamingChatOutputAudioUpdate outputAudioUpdate = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate(string completionId, ChatMessageContent contentUpdate, StreamingChatFunctionCallUpdate functionCallUpdate, IEnumerable toolCallUpdates, ChatMessageRole? role, string refusalUpdate, IEnumerable contentTokenLogProbabilities, IEnumerable refusalTokenLogProbabilities, ChatFinishReason? finishReason, DateTimeOffset createdAt, string model, string systemFingerprint, ChatTokenUsage usage); [Obsolete("This class is obsolete. Please use StreamingChatToolCallUpdate instead.")] public static StreamingChatFunctionCallUpdate StreamingChatFunctionCallUpdate(string functionName = null, BinaryData functionArgumentsUpdate = null); public static StreamingChatOutputAudioUpdate StreamingChatOutputAudioUpdate(string id = null, DateTimeOffset? expiresAt = null, string transcriptUpdate = null, BinaryData audioBytesUpdate = null); @@ -1594,36 +1580,24 @@ public class SystemChatMessage : ChatMessage, IJsonModel, IPe public SystemChatMessage(IEnumerable contentParts); public SystemChatMessage(string content); public string ParticipantName { get; set; } - protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator SystemChatMessage(ClientResult result); public static implicit operator BinaryContent(SystemChatMessage systemChatMessage); - protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ToolChatMessage : ChatMessage, IJsonModel, IPersistableModel { public ToolChatMessage(string toolCallId, params ChatMessageContentPart[] contentParts); public ToolChatMessage(string toolCallId, IEnumerable contentParts); public ToolChatMessage(string toolCallId, string content); public string ToolCallId { get; } - protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ToolChatMessage(ClientResult result); public static implicit operator BinaryContent(ToolChatMessage toolChatMessage); - protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class UserChatMessage : ChatMessage, IJsonModel, IPersistableModel { public UserChatMessage(params ChatMessageContentPart[] contentParts); public UserChatMessage(IEnumerable contentParts); public UserChatMessage(string content); public string ParticipantName { get; set; } - protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator UserChatMessage(ClientResult result); public static implicit operator BinaryContent(UserChatMessage userChatMessage); - protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } } namespace OpenAI.Embeddings { @@ -2067,6 +2041,8 @@ public class ModerationResultCollection : ObjectModel.ReadOnlyCollection items = null); } } @@ -2124,12 +2100,8 @@ public class ConversationErrorUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public ConversationFunctionTool(); @@ -2137,12 +2109,8 @@ public class ConversationFunctionTool : ConversationTool, IJsonModel { public ConversationIncompleteReason(string value); @@ -2161,42 +2129,26 @@ public class ConversationFunctionTool : ConversationTool, IJsonModel, IPersistableModel { - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationInputAudioClearedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationInputAudioClearedUpdate conversationInputAudioClearedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationInputAudioCommittedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public string PreviousItemId { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationInputAudioCommittedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationInputAudioCommittedUpdate conversationInputAudioCommittedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationInputSpeechFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public TimeSpan AudioEndTime { get; } public string ItemId { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationInputSpeechFinishedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationInputSpeechFinishedUpdate conversationInputSpeechFinishedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationInputSpeechStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public TimeSpan AudioStartTime { get; } public string ItemId { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationInputSpeechStartedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationInputSpeechStartedUpdate conversationInputSpeechStartedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationInputTokenUsageDetails : IJsonModel, IPersistableModel { public int AudioTokenCount { get; } @@ -2211,23 +2163,15 @@ public class ConversationInputTranscriptionFailedUpdate : ConversationUpdate, IJ public string ErrorMessage { get; } public string ErrorParameterName { get; } public string ItemId { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationInputTranscriptionFailedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationInputTranscriptionFailedUpdate conversationInputTranscriptionFailedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationInputTranscriptionFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string ItemId { get; } public string Transcript { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationInputTranscriptionFinishedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationInputTranscriptionFinishedUpdate conversationInputTranscriptionFinishedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationInputTranscriptionOptions : IJsonModel, IPersistableModel { public ConversationTranscriptionModel? Model { get; set; } @@ -2258,21 +2202,13 @@ public class ConversationItemCreatedUpdate : ConversationUpdate, IJsonModel MessageContentParts { get; } public ConversationMessageRole? MessageRole { get; } public string PreviousItemId { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationItemCreatedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationItemCreatedUpdate conversationItemCreatedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationItemDeletedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationItemDeletedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationItemDeletedUpdate conversationItemDeletedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ConversationItemStatus : IEquatable { public ConversationItemStatus(string value); @@ -2294,12 +2230,8 @@ public class ConversationItemStreamingAudioFinishedUpdate : ConversationUpdate, public string ItemId { get; } public int OutputIndex { get; } public string ResponseId { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationItemStreamingAudioFinishedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationItemStreamingAudioFinishedUpdate conversationItemStreamingAudioFinishedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationItemStreamingAudioTranscriptionFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } @@ -2307,12 +2239,8 @@ public class ConversationItemStreamingAudioTranscriptionFinishedUpdate : Convers public int OutputIndex { get; } public string ResponseId { get; } public string Transcript { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationItemStreamingAudioTranscriptionFinishedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationItemStreamingAudioTranscriptionFinishedUpdate conversationItemStreamingAudioTranscriptionFinishedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationItemStreamingFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public string FunctionCallArguments { get; } @@ -2324,12 +2252,8 @@ public class ConversationItemStreamingFinishedUpdate : ConversationUpdate, IJson public ConversationMessageRole? MessageRole { get; } public int OutputIndex { get; } public string ResponseId { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationItemStreamingFinishedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationItemStreamingFinishedUpdate conversationItemStreamingFinishedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationItemStreamingPartDeltaUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public BinaryData AudioBytes { get; } @@ -2362,12 +2286,8 @@ public class ConversationItemStreamingStartedUpdate : ConversationUpdate, IJsonM public IReadOnlyList MessageContentParts { get; } public ConversationMessageRole? MessageRole { get; } public string ResponseId { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationItemStreamingStartedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationItemStreamingStartedUpdate conversationItemStreamingStartedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationItemStreamingTextFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } @@ -2375,23 +2295,15 @@ public class ConversationItemStreamingTextFinishedUpdate : ConversationUpdate, I public int OutputIndex { get; } public string ResponseId { get; } public string Text { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationItemStreamingTextFinishedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationItemStreamingTextFinishedUpdate conversationItemStreamingTextFinishedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationItemTruncatedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public int AudioEndMs { get; } public int ContentIndex { get; } public string ItemId { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationItemTruncatedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationItemTruncatedUpdate conversationItemTruncatedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationMaxTokensChoice : IJsonModel, IPersistableModel { public ConversationMaxTokensChoice(int numberValue); @@ -2434,12 +2346,8 @@ public class ConversationRateLimitsUpdate : ConversationUpdate, IJsonModel AllDetails { get; } public ConversationRateLimitDetailsItem RequestDetails { get; } public ConversationRateLimitDetailsItem TokenDetails { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationRateLimitsUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationRateLimitsUpdate conversationRateLimitsUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationResponseFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public IReadOnlyList CreatedItems { get; } @@ -2447,12 +2355,8 @@ public class ConversationResponseFinishedUpdate : ConversationUpdate, IJsonModel public ConversationStatus? Status { get; } public ConversationStatusDetails StatusDetails { get; } public ConversationTokenUsage Usage { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationResponseFinishedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationResponseFinishedUpdate conversationResponseFinishedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationResponseOptions : IJsonModel, IPersistableModel { public ConversationContentModalities ContentModalities { get; set; } @@ -2475,12 +2379,8 @@ public class ConversationResponseStartedUpdate : ConversationUpdate, IJsonModel< public ConversationStatus Status { get; } public ConversationStatusDetails StatusDetails { get; } public ConversationTokenUsage Usage { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationResponseStartedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationResponseStartedUpdate conversationResponseStartedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationSessionConfiguredUpdate : ConversationUpdate, IJsonModel, IPersistableModel { public ConversationContentModalities ContentModalities { get; } @@ -2496,12 +2396,8 @@ public class ConversationSessionConfiguredUpdate : ConversationUpdate, IJsonMode public IReadOnlyList Tools { get; } public ConversationTurnDetectionOptions TurnDetectionOptions { get; } public ConversationVoice Voice { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationSessionConfiguredUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationSessionConfiguredUpdate conversationSessionConfiguredUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationSessionOptions : IJsonModel, IPersistableModel { public ConversationContentModalities ContentModalities { get; set; } @@ -2532,12 +2428,8 @@ public class ConversationSessionStartedUpdate : ConversationUpdate, IJsonModel Tools { get; } public ConversationTurnDetectionOptions TurnDetectionOptions { get; } public ConversationVoice Voice { get; } - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public new static explicit operator ConversationSessionStartedUpdate(ClientResult result); public static implicit operator BinaryContent(ConversationSessionStartedUpdate conversationSessionStartedUpdate); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ConversationStatus : IEquatable { public ConversationStatus(string value); @@ -2834,12 +2726,8 @@ public class StaticFileChunkingStrategy : FileChunkingStrategy, IJsonModel, IPersistableModel { public DateTimeOffset CreatedAt { get; } diff --git a/src/Custom/Chat/ChatClient.cs b/src/Custom/Chat/ChatClient.cs index 137200eb9..cff46f3b5 100644 --- a/src/Custom/Chat/ChatClient.cs +++ b/src/Custom/Chat/ChatClient.cs @@ -251,9 +251,18 @@ private void CreateChatCompletionOptions(IEnumerable messages, ref { options.Messages = messages.ToList(); options.Model = _model; - options.Stream = stream - ? true - : null; - options.StreamOptions = stream ? options.StreamOptions : null; + if (stream) + { + options.Stream = true; + options.StreamOptions = s_includeUsageStreamOptions; + } + else + { + options.Stream = null; + options.StreamOptions = null; + } } + + private static readonly InternalChatCompletionStreamOptions s_includeUsageStreamOptions + = new(includeUsage: true, additionalBinaryDataProperties: null); } \ No newline at end of file diff --git a/src/Custom/Chat/ChatCompletionOptions.Serialization.cs b/src/Custom/Chat/ChatCompletionOptions.Serialization.cs index cc003e4b4..3922890ee 100644 --- a/src/Custom/Chat/ChatCompletionOptions.Serialization.cs +++ b/src/Custom/Chat/ChatCompletionOptions.Serialization.cs @@ -13,19 +13,12 @@ public partial class ChatCompletionOptions [MethodImpl(MethodImplOptions.AggressiveInlining)] private void SerializeMessagesValue(Utf8JsonWriter writer, ModelReaderWriterOptions options) { - if (Messages is not null) - { - writer.WriteStartArray(); - foreach (var item in Messages) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else + writer.WriteStartArray(); + foreach (var item in Messages) { - writer.WriteNullValue(); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); } // CUSTOM: Added custom serialization to treat a single string as a collection of strings with one item. diff --git a/src/Custom/Chat/ChatCompletionOptions.cs b/src/Custom/Chat/ChatCompletionOptions.cs index b0136a2bc..f23abf28a 100644 --- a/src/Custom/Chat/ChatCompletionOptions.cs +++ b/src/Custom/Chat/ChatCompletionOptions.cs @@ -1,6 +1,8 @@ using System; +using System.ClientModel.Primitives; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using System.Threading; namespace OpenAI.Chat; @@ -8,7 +10,7 @@ namespace OpenAI.Chat; /// Request-level options for chat completion. /// [CodeGenModel("CreateChatCompletionRequest")] -[CodeGenSuppress("ChatCompletionOptions", typeof(IEnumerable), typeof(InternalCreateChatCompletionRequestModel))] +[CodeGenSuppress("ChatCompletionOptions", typeof(IEnumerable), typeof(InternalCreateChatCompletionRequestModel?))] [CodeGenSerialization(nameof(Messages), SerializationValueHook = nameof(SerializeMessagesValue))] [CodeGenSerialization(nameof(StopSequences), SerializationValueHook = nameof(SerializeStopSequencesValue), DeserializationValueHook = nameof(DeserializeStopSequencesValue))] [CodeGenSerialization(nameof(LogitBiases), SerializationValueHook = nameof(SerializeLogitBiasesValue), DeserializationValueHook = nameof(DeserializeLogitBiasesValue))] @@ -32,7 +34,7 @@ public partial class ChatCompletionOptions /// ID of the model to use. See the model endpoint compatibility table for details on which models work with the Chat API. /// [CodeGenMember("Model")] - internal InternalCreateChatCompletionRequestModel Model { get; set; } + internal InternalCreateChatCompletionRequestModel? Model { get; set; } // CUSTOM: Made internal. We only ever request a single choice. /// How many chat completion choices to generate for each input message. Note that you will be charged based on the number of generated tokens across all of the choices. Keep `n` as `1` to minimize costs. @@ -47,16 +49,18 @@ public partial class ChatCompletionOptions /// Gets or sets the stream options. [CodeGenMember("StreamOptions")] internal InternalChatCompletionStreamOptions StreamOptions { get; set; } - = new() { IncludeUsage = true }; // CUSTOM: Made public now that there are no required properties. /// Initializes a new instance of for deserialization. public ChatCompletionOptions() { + Messages = new ChangeTrackingList(); LogitBiases = new ChangeTrackingDictionary(); StopSequences = new ChangeTrackingList(); Tools = new ChangeTrackingList(); Functions = new ChangeTrackingList(); + InternalModalities = new ChangeTrackingList(); + Metadata = new ChangeTrackingDictionary(); } // CUSTOM: Renamed. @@ -113,20 +117,6 @@ public ChatCompletionOptions() [CodeGenMember("ParallelToolCalls")] public bool? AllowParallelToolCalls { get; set; } - /// - /// An object specifying the format that the model must output. - /// - /// - ///

- /// Compatible with GPT-4o, GPT-4o mini, GPT-4 Turbo and all GPT-3.5 Turbo models newer than gpt-3.5-turbo-1106. - ///

- ///

- /// Learn more in the Structured Outputs guide. - ///

- ///
- //[CodeGenMember("ResponseFormat")] - //public ChatResponseFormat ResponseFormat { get; set; } - [CodeGenMember("ServiceTier")] internal InternalCreateChatCompletionRequestServiceTier? _serviceTier; @@ -166,7 +156,7 @@ public ChatCompletionOptions() /// OpenAI Platform dashboard. /// [CodeGenMember("Metadata")] - public IDictionary Metadata { get; } = new ChangeTrackingDictionary(); + public IDictionary Metadata { get; } // CUSTOM: Renamed. /// @@ -188,7 +178,16 @@ public ChatCompletionOptions() // CUSTOM: Made internal for automatic enablement via audio options. [CodeGenMember("Modalities")] - private IList _internalModalities = new ChangeTrackingList(); + private IList InternalModalities + { + get => _internalModalities; + set + { + _internalModalities = value; + _responseModalities = ChatResponseModalitiesExtensions.FromInternalModalities(value); + } + } + private IList _internalModalities; /// /// Specifies the content types that the model should generate in its responses. @@ -200,25 +199,18 @@ public ChatCompletionOptions() /// public ChatResponseModalities ResponseModalities { - get => ChatResponseModalitiesExtensions.FromInternalModalities(_internalModalities); - set => _internalModalities = value.ToInternalModalities(); - } - - // CUSTOM: supplemented with custom setter to internally enable audio output via modalities. - [CodeGenMember("Audio")] - private ChatAudioOptions _audioOptions; - - public ChatAudioOptions AudioOptions - { - get => _audioOptions; + get => _responseModalities; set { - _audioOptions = value; - _internalModalities = value is null - ? new ChangeTrackingList() - : [InternalCreateChatCompletionRequestModality.Text, InternalCreateChatCompletionRequestModality.Audio]; + _responseModalities = value; + _internalModalities = value.ToInternalModalities(); } } + private ChatResponseModalities _responseModalities; + + // CUSTOM: Renamed. + [CodeGenMember("Audio")] + public ChatAudioOptions AudioOptions { get; set; } // CUSTOM: rename. [CodeGenMember("Prediction")] diff --git a/src/Custom/Chat/OpenAIChatModelFactory.cs b/src/Custom/Chat/OpenAIChatModelFactory.cs index 4a08548ab..84c27a756 100644 --- a/src/Custom/Chat/OpenAIChatModelFactory.cs +++ b/src/Custom/Chat/OpenAIChatModelFactory.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; namespace OpenAI.Chat; @@ -7,6 +8,39 @@ namespace OpenAI.Chat; /// Model factory for models. public static partial class OpenAIChatModelFactory { + /// Initializes a new instance of . + /// A new instance for mocking. + [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) => + ChatCompletion( + id: id, + finishReason: finishReason, + content:content, + refusal: refusal, + toolCalls: toolCalls, + role: role, + functionCall: functionCall, + contentTokenLogProbabilities: contentTokenLogProbabilities, + refusalTokenLogProbabilities: refusalTokenLogProbabilities, + createdAt: createdAt, + model: model, + systemFingerprint: systemFingerprint, + usage: usage, + outputAudio: default); + /// Initializes a new instance of . /// A new instance for mocking. public static ChatCompletion ChatCompletion( @@ -16,14 +50,14 @@ public static ChatCompletion ChatCompletion( string refusal = null, IEnumerable toolCalls = null, ChatMessageRole role = default, - ChatFunctionCall functionCall = null, + ChatFunctionCall functionCall = default, IEnumerable contentTokenLogProbabilities = null, IEnumerable refusalTokenLogProbabilities = null, DateTimeOffset createdAt = default, string model = null, string systemFingerprint = null, - ChatTokenUsage usage = null, - ChatOutputAudio outputAudio = null) + ChatTokenUsage usage = default, + ChatOutputAudio outputAudio = default) { content ??= new ChatMessageContent(); toolCalls ??= new List(); @@ -91,16 +125,27 @@ public static ChatTokenTopLogProbabilityDetails ChatTokenTopLogProbabilityDetail additionalBinaryDataProperties: null); } + /// Initializes a new instance of . + /// A new instance for mocking. + [EditorBrowsable(EditorBrowsableState.Never)] + public static ChatTokenUsage ChatTokenUsage(int outputTokenCount, int inputTokenCount, int totalTokenCount, ChatOutputTokenUsageDetails outputTokenDetails) => + ChatTokenUsage( + outputTokenCount: outputTokenCount, + inputTokenCount: inputTokenCount, + totalTokenCount: totalTokenCount, + outputTokenDetails: outputTokenDetails, + inputTokenDetails: default); + /// Initializes a new instance of . /// A new instance for mocking. public static ChatTokenUsage ChatTokenUsage(int outputTokenCount = default, int inputTokenCount = default, int totalTokenCount = default, ChatOutputTokenUsageDetails outputTokenDetails = null, ChatInputTokenUsageDetails inputTokenDetails = null) { return new ChatTokenUsage( - outputTokenCount, - inputTokenCount, - totalTokenCount, - outputTokenDetails, - inputTokenDetails, + outputTokenCount: outputTokenCount, + inputTokenCount: inputTokenCount, + totalTokenCount: totalTokenCount, + outputTokenDetails: outputTokenDetails, + inputTokenDetails: inputTokenDetails, additionalBinaryDataProperties: null); } @@ -116,7 +161,25 @@ public static ChatInputTokenUsageDetails ChatInputTokenUsageDetails(int audioTok /// Initializes a new instance of . /// A new instance for mocking. - public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount = default, int audioTokenCount = default, int acceptedPredictionTokenCount = default, int rejectedPredictionTokenCount = 0) + [EditorBrowsable(EditorBrowsableState.Never)] + public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount) => + ChatOutputTokenUsageDetails( + reasoningTokenCount: reasoningTokenCount, + audioTokenCount: default); + + /// Initializes a new instance of . + /// A new instance for mocking. + [EditorBrowsable(EditorBrowsableState.Never)] + public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount, int audioTokenCount) => + ChatOutputTokenUsageDetails( + reasoningTokenCount: reasoningTokenCount, + audioTokenCount: audioTokenCount, + acceptedPredictionTokenCount: default, + rejectedPredictionTokenCount: default); + + /// Initializes a new instance of . + /// A new instance for mocking. + public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount = default, int audioTokenCount = default, int acceptedPredictionTokenCount = default, int rejectedPredictionTokenCount = default) { return new ChatOutputTokenUsageDetails( audioTokenCount: audioTokenCount, @@ -136,6 +199,39 @@ public static ChatOutputAudio ChatOutputAudio(BinaryData audioBytes, string id = additionalBinaryDataProperties: null); } + /// Initializes a new instance of . + /// A new instance for mocking. + [EditorBrowsable(EditorBrowsableState.Never)] + public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate( + string completionId, + ChatMessageContent contentUpdate, + StreamingChatFunctionCallUpdate functionCallUpdate, + IEnumerable toolCallUpdates, + ChatMessageRole? role, + string refusalUpdate, + IEnumerable contentTokenLogProbabilities, + IEnumerable refusalTokenLogProbabilities, + ChatFinishReason? finishReason, + DateTimeOffset createdAt, + string model, + string systemFingerprint, + ChatTokenUsage usage) => + StreamingChatCompletionUpdate( + completionId: completionId, + contentUpdate: contentUpdate, + functionCallUpdate: functionCallUpdate, + toolCallUpdates: toolCallUpdates, + role: role, + refusalUpdate: refusalUpdate, + contentTokenLogProbabilities: contentTokenLogProbabilities, + refusalTokenLogProbabilities: refusalTokenLogProbabilities, + finishReason: finishReason, + createdAt: createdAt, + model: model, + systemFingerprint: systemFingerprint, + usage: usage, + outputAudioUpdate: default); + /// Initializes a new instance of . /// A new instance for mocking. public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate( @@ -143,16 +239,16 @@ public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate( ChatMessageContent contentUpdate = null, StreamingChatFunctionCallUpdate functionCallUpdate = null, IEnumerable toolCallUpdates = null, - ChatMessageRole? role = null, + ChatMessageRole? role = default, string refusalUpdate = null, IEnumerable contentTokenLogProbabilities = null, IEnumerable refusalTokenLogProbabilities = null, - ChatFinishReason? finishReason = null, + ChatFinishReason? finishReason = default, DateTimeOffset createdAt = default, string model = null, string systemFingerprint = null, - ChatTokenUsage usage = null, - StreamingChatOutputAudioUpdate outputAudioUpdate = null) + ChatTokenUsage usage = default, + StreamingChatOutputAudioUpdate outputAudioUpdate = default) { contentUpdate ??= new ChatMessageContent(); toolCallUpdates ??= new List(); diff --git a/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs b/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs index 93d392013..84d5472ff 100644 --- a/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs +++ b/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs @@ -11,7 +11,7 @@ public partial class StreamingChatCompletionUpdate private IReadOnlyList _toolCallUpdates; private IReadOnlyList _contentTokenLogProbabilities; private IReadOnlyList _refusalTokenLogProbabilities; - internal InternalCreateChatCompletionStreamResponseChoice InternalChoice => (Choices.Count > 0) ? Choices[0] : null; + internal InternalCreateChatCompletionStreamResponseChoice InternalChoice => (Choices?.Count > 0) ? Choices[0] : null; internal InternalChatCompletionStreamResponseDelta InternalChoiceDelta => InternalChoice?.Delta; // CUSTOM: diff --git a/src/Custom/Moderations/OpenAIModerationsModelFactory.cs b/src/Custom/Moderations/OpenAIModerationsModelFactory.cs index 8b659e430..ab8d7f431 100644 --- a/src/Custom/Moderations/OpenAIModerationsModelFactory.cs +++ b/src/Custom/Moderations/OpenAIModerationsModelFactory.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.ComponentModel; using System.Linq; namespace OpenAI.Moderations; @@ -26,6 +27,26 @@ public static ModerationResultCollection ModerationResultCollection(string id = serializedAdditionalRawData: null); } + /// Initializes a new instance of . + /// A new instance for mocking. + [EditorBrowsable(EditorBrowsableState.Never)] + public static ModerationResult ModerationResult(bool flagged, ModerationCategory hate, ModerationCategory hateThreatening, ModerationCategory harassment, ModerationCategory harassmentThreatening, ModerationCategory selfHarm, ModerationCategory selfHarmIntent, ModerationCategory selfHarmInstructions, ModerationCategory sexual, ModerationCategory sexualMinors, ModerationCategory violence, ModerationCategory violenceGraphic) => + ModerationResult( + flagged, + hate, + hateThreatening, + harassment, + harassmentThreatening, + selfHarm, + selfHarmIntent, + selfHarmInstructions, + sexual, + sexualMinors, + violence, + violenceGraphic, + default, + default); + /// Initializes a new instance of . /// A new instance for mocking. public static ModerationResult ModerationResult(bool flagged = default, ModerationCategory hate = default, ModerationCategory hateThreatening = default, ModerationCategory harassment = default, ModerationCategory harassmentThreatening = default, ModerationCategory selfHarm = default, ModerationCategory selfHarmIntent = default, ModerationCategory selfHarmInstructions = default, ModerationCategory sexual = default, ModerationCategory sexualMinors = default, ModerationCategory violence = default, ModerationCategory violenceGraphic = default, ModerationCategory illicit = default, ModerationCategory illicitViolent = default) diff --git a/src/Generated/Models/ChatCompletionOptions.Serialization.cs b/src/Generated/Models/ChatCompletionOptions.Serialization.cs index 64308c959..226bcf1c0 100644 --- a/src/Generated/Models/ChatCompletionOptions.Serialization.cs +++ b/src/Generated/Models/ChatCompletionOptions.Serialization.cs @@ -90,15 +90,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (_additionalBinaryDataProperties?.ContainsKey("messages") != true) + // 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); } - if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + // 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); - writer.WriteStringValue(Model.ToString()); + writer.WriteStringValue(Model.Value.ToString()); } if (Optional.IsDefined(N) && _additionalBinaryDataProperties?.ContainsKey("n") != true) { @@ -283,57 +285,57 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reasoning_effort"u8); writer.WriteStringValue(ReasoningEffortLevel.Value.ToString()); } - if (Optional.IsDefined(OutputPrediction) && _additionalBinaryDataProperties?.ContainsKey("prediction") != true) + if (Optional.IsCollectionDefined(InternalModalities) && _additionalBinaryDataProperties?.ContainsKey("modalities") != true) { - if (OutputPrediction != null) + if (InternalModalities != null) { - writer.WritePropertyName("prediction"u8); - writer.WriteObjectValue(OutputPrediction, options); + writer.WritePropertyName("modalities"u8); + writer.WriteStartArray(); + foreach (InternalCreateChatCompletionRequestModality item in InternalModalities) + { + writer.WriteStringValue(item.ToString()); + } + writer.WriteEndArray(); } else { - writer.WriteNull("prediction"u8); + writer.WriteNull("modalities"u8); } } - if (Optional.IsDefined(_serviceTier) && _additionalBinaryDataProperties?.ContainsKey("service_tier") != true) + if (Optional.IsDefined(AudioOptions) && _additionalBinaryDataProperties?.ContainsKey("audio") != true) { - if (_serviceTier != null) + if (AudioOptions != null) { - writer.WritePropertyName("service_tier"u8); - writer.WriteStringValue(_serviceTier.Value.ToString()); + writer.WritePropertyName("audio"u8); + writer.WriteObjectValue(AudioOptions, options); } else { - writer.WriteNull("serviceTier"u8); + writer.WriteNull("audio"u8); } } - if (Optional.IsCollectionDefined(_internalModalities) && _additionalBinaryDataProperties?.ContainsKey("modalities") != true) + if (Optional.IsDefined(OutputPrediction) && _additionalBinaryDataProperties?.ContainsKey("prediction") != true) { - if (_internalModalities != null) + if (OutputPrediction != null) { - writer.WritePropertyName("modalities"u8); - writer.WriteStartArray(); - foreach (InternalCreateChatCompletionRequestModality item in _internalModalities) - { - writer.WriteStringValue(item.ToString()); - } - writer.WriteEndArray(); + writer.WritePropertyName("prediction"u8); + writer.WriteObjectValue(OutputPrediction, options); } else { - writer.WriteNull("modalities"u8); + writer.WriteNull("prediction"u8); } } - if (Optional.IsDefined(_audioOptions) && _additionalBinaryDataProperties?.ContainsKey("audio") != true) + if (Optional.IsDefined(_serviceTier) && _additionalBinaryDataProperties?.ContainsKey("service_tier") != true) { - if (_audioOptions != null) + if (_serviceTier != null) { - writer.WritePropertyName("audio"u8); - writer.WriteObjectValue(_audioOptions, options); + writer.WritePropertyName("service_tier"u8); + writer.WriteStringValue(_serviceTier.Value.ToString()); } else { - writer.WriteNull("audio"u8); + writer.WriteNull("serviceTier"u8); } } if (true && _additionalBinaryDataProperties != null) @@ -383,7 +385,7 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme float? topP = default; IList tools = default; IList messages = default; - InternalCreateChatCompletionRequestModel model = default; + InternalCreateChatCompletionRequestModel? model = default; int? n = default; bool? stream = default; InternalChatCompletionStreamOptions streamOptions = default; @@ -402,10 +404,10 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme IDictionary metadata = default; bool? storedOutputEnabled = default; ChatReasoningEffortLevel? reasoningEffortLevel = default; - ChatOutputPrediction outputPrediction = default; - InternalCreateChatCompletionRequestServiceTier? serviceTier = default; IList internalModalities = default; ChatAudioOptions audioOptions = default; + ChatOutputPrediction outputPrediction = default; + InternalCreateChatCompletionRequestServiceTier? serviceTier = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -663,48 +665,48 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme reasoningEffortLevel = new ChatReasoningEffortLevel(prop.Value.GetString()); continue; } - if (prop.NameEquals("prediction"u8)) + if (prop.NameEquals("modalities"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - outputPrediction = null; continue; } - outputPrediction = ChatOutputPrediction.DeserializeChatOutputPrediction(prop.Value, options); + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(new InternalCreateChatCompletionRequestModality(item.GetString())); + } + internalModalities = array; continue; } - if (prop.NameEquals("service_tier"u8)) + if (prop.NameEquals("audio"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - serviceTier = null; + audioOptions = null; continue; } - serviceTier = new InternalCreateChatCompletionRequestServiceTier(prop.Value.GetString()); + audioOptions = ChatAudioOptions.DeserializeChatAudioOptions(prop.Value, options); continue; } - if (prop.NameEquals("modalities"u8)) + if (prop.NameEquals("prediction"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { + outputPrediction = null; continue; } - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - array.Add(new InternalCreateChatCompletionRequestModality(item.GetString())); - } - internalModalities = array; + outputPrediction = ChatOutputPrediction.DeserializeChatOutputPrediction(prop.Value, options); continue; } - if (prop.NameEquals("audio"u8)) + if (prop.NameEquals("service_tier"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - audioOptions = null; + serviceTier = null; continue; } - audioOptions = ChatAudioOptions.DeserializeChatAudioOptions(prop.Value, options); + serviceTier = new InternalCreateChatCompletionRequestServiceTier(prop.Value.GetString()); continue; } if (true) @@ -712,6 +714,7 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } } + // CUSTOM: Ensure messages collection is initialized. return new ChatCompletionOptions( frequencyPenalty, presencePenalty, @@ -719,7 +722,7 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme temperature, topP, tools ?? new ChangeTrackingList(), - messages, + messages ?? new ChangeTrackingList(), model, n, stream, @@ -739,10 +742,10 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme metadata ?? new ChangeTrackingDictionary(), storedOutputEnabled, reasoningEffortLevel, + internalModalities ?? new ChangeTrackingList(), + audioOptions, outputPrediction, serviceTier, - internalModalities, - audioOptions, additionalBinaryDataProperties); } diff --git a/src/Generated/Models/ChatCompletionOptions.cs b/src/Generated/Models/ChatCompletionOptions.cs index 5dd47d2c0..82f0a9006 100644 --- a/src/Generated/Models/ChatCompletionOptions.cs +++ b/src/Generated/Models/ChatCompletionOptions.cs @@ -11,7 +11,7 @@ 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, ChatOutputPrediction outputPrediction, InternalCreateChatCompletionRequestServiceTier? serviceTier, IList internalModalities, ChatAudioOptions audioOptions, 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) { FrequencyPenalty = frequencyPenalty; PresencePenalty = presencePenalty; @@ -39,10 +39,10 @@ internal ChatCompletionOptions(float? frequencyPenalty, float? presencePenalty, Metadata = metadata; StoredOutputEnabled = storedOutputEnabled; ReasoningEffortLevel = reasoningEffortLevel; + InternalModalities = internalModalities; + AudioOptions = audioOptions; OutputPrediction = outputPrediction; _serviceTier = serviceTier; - _internalModalities = internalModalities; - _audioOptions = audioOptions; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/OpenAIModelFactory.cs b/src/Generated/OpenAIModelFactory.cs index 809cb209d..ae8b08455 100644 --- a/src/Generated/OpenAIModelFactory.cs +++ b/src/Generated/OpenAIModelFactory.cs @@ -919,7 +919,7 @@ 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, ChatOutputPrediction outputPrediction = default, InternalCreateChatCompletionRequestServiceTier? serviceTier = default, IEnumerable internalModalities = default, ChatAudioOptions audioOptions = default) + 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(); @@ -956,10 +956,10 @@ public static ChatCompletionOptions ChatCompletionOptions(float? frequencyPenalt metadata, storedOutputEnabled, reasoningEffortLevel, - outputPrediction, - serviceTier, internalModalities?.ToList(), audioOptions, + outputPrediction, + serviceTier, additionalBinaryDataProperties: null); } diff --git a/tests/Chat/ChatSmokeTests.cs b/tests/Chat/ChatSmokeTests.cs index 7c518a4ae..237c66c4d 100644 --- a/tests/Chat/ChatSmokeTests.cs +++ b/tests/Chat/ChatSmokeTests.cs @@ -7,9 +7,11 @@ using System.ClientModel.Primitives; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Net; using System.Reflection; using System.Text.Json; +using System.Text.Json.Nodes; using System.Threading.Tasks; using static System.Net.Mime.MediaTypeNames; @@ -936,4 +938,34 @@ public void CanUseCollections() Assert.That(options.Metadata.Count, Is.EqualTo(0)); Assert.That(options.StopSequences.Count, Is.EqualTo(0)); } + + [Test] + public void IdempotentOptionsSerialization() + { + ChatCompletionOptions emptyOptions = new(); + BinaryData serializedEmptyOptions = ModelReaderWriter.Write(emptyOptions); + Assert.That(serializedEmptyOptions.ToString(), Is.EqualTo("{}")); + ChatCompletionOptions deserializedEmptyOptions = ModelReaderWriter.Read(serializedEmptyOptions); + BinaryData reserializedEmptyOptions = ModelReaderWriter.Write(deserializedEmptyOptions); + Assert.That(reserializedEmptyOptions.ToString(), Is.EqualTo("{}")); + + ChatCompletionOptions originalOptions = new() + { + IncludeLogProbabilities = true, + FrequencyPenalty = 0.4f, + }; + + BinaryData serializedOptions = ModelReaderWriter.Write(originalOptions); + + string serializedOptionsText = serializedOptions.ToString(); + Assert.That(serializedOptionsText, Does.Contain("frequency_penalty")); + Assert.That(serializedOptionsText, Does.Not.Contain("presence_penalty")); + Assert.That(serializedOptionsText, Does.Not.Contain("stream_options")); + + ChatCompletionOptions deserializedOptions = ModelReaderWriter.Read(serializedOptions); + BinaryData reserializedOptions = ModelReaderWriter.Write(deserializedOptions); + + string reserializedOptionsText = reserializedOptions.ToString(); + Assert.That(serializedOptions.ToString(), Is.EqualTo(reserializedOptionsText)); + } } diff --git a/tests/Chat/ChatTests.cs b/tests/Chat/ChatTests.cs index 04c5db513..9635da236 100644 --- a/tests/Chat/ChatTests.cs +++ b/tests/Chat/ChatTests.cs @@ -366,6 +366,56 @@ public async Task ChatWithVision() Assert.That(result.Value.Content[0].Text.ToLowerInvariant(), Does.Contain("dog").Or.Contain("cat").IgnoreCase); } + [Test] + public async Task ChatWithBasicAudioOutput() + { + ChatClient client = GetTestClient(TestScenario.Chat, "gpt-4o-audio-preview"); + List messages = ["Say the exact word 'hello' and nothing else."]; + ChatCompletionOptions options = new() + { + AudioOptions = new(ChatOutputAudioVoice.Ash, ChatOutputAudioFormat.Pcm16), + ResponseModalities = ChatResponseModalities.Text | ChatResponseModalities.Audio, + }; + + StringBuilder transcriptBuilder = new(); + using MemoryStream outputAudioStream = new(); + string streamedAudioId = null; + ChatTokenUsage streamedUsage = null; + DateTimeOffset? streamedExpiresAt = null; + + await foreach (StreamingChatCompletionUpdate update + in client.CompleteChatStreamingAsync(messages, options)) + { + if (update.Usage is not null) + { + Assert.That(streamedUsage, Is.Null); + streamedUsage = update.Usage; + } + if (update.OutputAudioUpdate?.ExpiresAt is not null) + { + Assert.That(streamedExpiresAt, Is.Null); + streamedExpiresAt = update.OutputAudioUpdate.ExpiresAt; + } + if (update.OutputAudioUpdate?.Id is not null) + { + if (streamedAudioId is not null) + { + Assert.That(streamedAudioId, Is.EqualTo(update.OutputAudioUpdate.Id)); + } + streamedAudioId ??= update.OutputAudioUpdate.Id; + } + transcriptBuilder.Append(update.OutputAudioUpdate?.TranscriptUpdate); + outputAudioStream.Write(update.OutputAudioUpdate?.AudioBytesUpdate); + } + + Assert.That(streamedAudioId, Has.Length.GreaterThan("audio".Length)); + Assert.That(transcriptBuilder.ToString().ToLower(), Does.Contain("hello")); + Assert.That(outputAudioStream.Length, Is.GreaterThan(9000)); + Assert.That(streamedUsage?.InputTokenDetails?.AudioTokenCount, Is.EqualTo(0)); + Assert.That(streamedUsage?.OutputTokenDetails?.AudioTokenCount, Is.GreaterThan(0)); + Assert.That(streamedExpiresAt, Is.GreaterThan(DateTimeOffset.Parse("2025-01-01"))); + } + [Test] public async Task ChatWithAudio() { @@ -417,12 +467,18 @@ public async Task ChatWithAudio() string streamedCorrelationId = null; DateTimeOffset? streamedExpiresAt = null; StringBuilder streamedTranscriptBuilder = new(); + ChatTokenUsage streamedUsage = null; using MemoryStream outputAudioStream = new(); await foreach (StreamingChatCompletionUpdate update in client.CompleteChatStreamingAsync(messages, options)) { Assert.That(update.ContentUpdate, Has.Count.EqualTo(0)); StreamingChatOutputAudioUpdate outputAudioUpdate = update.OutputAudioUpdate; + if (update.Usage is not null) + { + Assert.That(streamedUsage, Is.Null); + streamedUsage = update.Usage; + } if (outputAudioUpdate is not null) { string serializedOutputAudioUpdate = ModelReaderWriter.Write(outputAudioUpdate).ToString(); @@ -446,6 +502,8 @@ public async Task ChatWithAudio() Assert.That(streamedExpiresAt.HasValue, Is.True); Assert.That(streamedTranscriptBuilder.ToString(), Is.Not.Null.And.Not.Empty); Assert.That(outputAudioStream.Length, Is.GreaterThan(9000)); + Assert.That(streamedUsage?.InputTokenDetails?.AudioTokenCount, Is.GreaterThan(0)); + Assert.That(streamedUsage?.OutputTokenDetails?.AudioTokenCount, Is.GreaterThan(0)); } [Test]