openai/openai-dotnet

Public

mirrored from https://github.com/openai/openai-dotnetAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
OpenAI_2.2.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/Custom/Chat/ChatCompletion.cs

109lines · modeblame

5dce104aJose Arriaga Maldonado1 years ago1using OpenAI.Internal;
9f9f2936Jose Arriaga Maldonado2 years ago2using System;
5dce104aJose Arriaga Maldonado1 years ago3using System.ClientModel;
4using System.ClientModel.Primitives;
9f9f2936Jose Arriaga Maldonado2 years ago5using System.Collections.Generic;
5dce104aJose Arriaga Maldonado1 years ago6using System.Diagnostics.CodeAnalysis;
0ca4c062Jose Arriaga Maldonado1 years ago7using System.Linq;
5dce104aJose Arriaga Maldonado1 years ago8using System.Text.Json;
9f9f2936Jose Arriaga Maldonado2 years ago9
10namespace OpenAI.Chat;
11
31c2ba63Jose Arriaga Maldonado1 years ago12/// <summary> A chat completion generated by the model. </summary>
0ca4c062Jose Arriaga Maldonado1 years ago13[CodeGenType("CreateChatCompletionResponse")]
9f9f2936Jose Arriaga Maldonado2 years ago14public partial class ChatCompletion
15{
2ab1a942Jose Arriaga Maldonado1 years ago16private IReadOnlyList<ChatTokenLogProbabilityDetails> _contentTokenLogProbabilities;
17private IReadOnlyList<ChatTokenLogProbabilityDetails> _refusalTokenLogProbabilities;
9f9f2936Jose Arriaga Maldonado2 years ago18
19// CUSTOM: Made private. This property does not add value in the context of a strongly-typed class.
20/// <summary> The object type, which is always `chat.completion`. </summary>
21[CodeGenMember("Object")]
5dce104aJose Arriaga Maldonado1 years ago22internal string Object { get; } = "chat.completion";
31c2ba63Jose Arriaga Maldonado1 years ago23
24// CUSTOM: Made internal.
25[CodeGenMember("ServiceTier")]
5dce104aJose Arriaga Maldonado1 years ago26internal InternalServiceTier? ServiceTier { get; }
9f9f2936Jose Arriaga Maldonado2 years ago27
28// CUSTOM: Made internal. We only get back a single choice, and instead we flatten the structure for usability.
29[CodeGenMember("Choices")]
30internal IReadOnlyList<InternalCreateChatCompletionResponseChoice> Choices { get; }
31
32// CUSTOM: Renamed.
31c2ba63Jose Arriaga Maldonado1 years ago33/// <summary> The timestamp when the chat completion was created. </summary>
9f9f2936Jose Arriaga Maldonado2 years ago34[CodeGenMember("Created")]
35public DateTimeOffset CreatedAt { get; }
36
37// CUSTOM: Flattened choice property.
38/// <summary>
31c2ba63Jose Arriaga Maldonado1 years ago39/// The reason the model stopped generating tokens. This will be:
40/// <list>
41/// <item>
42/// <see cref="ChatFinishReason.Stop"/> if the model hit a natural stop point or a provided stop sequence
43/// </item>
44/// <item>
45/// <see cref="ChatFinishReason.Length"/> if the maximum number of tokens specified in the request was reached
46/// </item>
47/// <item>
48/// <see cref="ChatFinishReason.ContentFilter"/> if content was omitted due to a flag from our content filters
49/// </item>
50/// <item>
51/// <see cref="ChatFinishReason.ToolCalls"/> if the model called a tool
52/// </item>
53/// <item>
54/// <see cref="ChatFinishReason.FunctionCall"/> (obsolte) if the model called a function
55/// </item>
56/// </list>
9f9f2936Jose Arriaga Maldonado2 years ago57/// </summary>
58public ChatFinishReason FinishReason => Choices[0].FinishReason;
59
60// CUSTOM: Flattened choice logprobs property.
31c2ba63Jose Arriaga Maldonado1 years ago61/// <summary> The message content tokens with log probability information. </summary>
62public IReadOnlyList<ChatTokenLogProbabilityDetails> ContentTokenLogProbabilities =>
63_contentTokenLogProbabilities
64??= Choices[0].Logprobs?.Content
65?? new ChangeTrackingList<ChatTokenLogProbabilityDetails>();
9f9f2936Jose Arriaga Maldonado2 years ago66
31c2ba63Jose Arriaga Maldonado1 years ago67// CUSTOM: Flattened choice logprobs property.
68/// <summary> The message refusal tokens with log probability information. </summary>
69public IReadOnlyList<ChatTokenLogProbabilityDetails> RefusalTokenLogProbabilities =>
70_refusalTokenLogProbabilities
71??= Choices[0].Logprobs?.Refusal
72?? new ChangeTrackingList<ChatTokenLogProbabilityDetails>();
3467b535Travis Wilson1 years ago73
9f9f2936Jose Arriaga Maldonado2 years ago74// CUSTOM: Flattened choice message property.
31c2ba63Jose Arriaga Maldonado1 years ago75/// <summary> The role of the author of this message. </summary>
9f9f2936Jose Arriaga Maldonado2 years ago76public ChatMessageRole Role => Choices[0].Message.Role;
77
78// CUSTOM: Flattened choice message property.
31c2ba63Jose Arriaga Maldonado1 years ago79/// <summary> The contents of the message. </summary>
80public ChatMessageContent Content => Choices[0].Message.Content;
9f9f2936Jose Arriaga Maldonado2 years ago81
82// CUSTOM: Flattened choice message property.
31c2ba63Jose Arriaga Maldonado1 years ago83/// <summary> The tool calls generated by the model, such as function calls. </summary>
9f9f2936Jose Arriaga Maldonado2 years ago84public IReadOnlyList<ChatToolCall> ToolCalls => Choices[0].Message.ToolCalls;
85
86// CUSTOM: Flattened choice message property.
31c2ba63Jose Arriaga Maldonado1 years ago87/// <summary> The refusal message generated by the model. </summary>
3467b535Travis Wilson1 years ago88public string Refusal => Choices[0].Message.Refusal;
89
31c2ba63Jose Arriaga Maldonado1 years ago90// CUSTOM: Flattened choice message property.
91[Obsolete($"This property is obsolete. Please use {nameof(ToolCalls)} instead.")]
92public ChatFunctionCall FunctionCall => Choices[0].Message.FunctionCall;
0e0c460cJose Arriaga Maldonado1 years ago93
5dce104aJose Arriaga Maldonado1 years ago94// CUSTOM: Added Experimental attribute.
0e0c460cJose Arriaga Maldonado1 years ago95/// <summary> The audio response generated by the model. </summary>
5dce104aJose Arriaga Maldonado1 years ago96[Experimental("OPENAI001")]
0e0c460cJose Arriaga Maldonado1 years ago97public ChatOutputAudio OutputAudio => Choices[0].Message.Audio;
0ca4c062Jose Arriaga Maldonado1 years ago98
5dce104aJose Arriaga Maldonado1 years ago99// CUSTOM: Added Experimental attribute.
100[Experimental("OPENAI001")]
101public IReadOnlyList<ChatMessageAnnotation> Annotations => [.. Choices[0].Message.Annotations];
102
103internal static ChatCompletion FromClientResult(ClientResult result)
104{
105using PipelineResponse response = result.GetRawResponse();
106using JsonDocument document = JsonDocument.Parse(response.Content);
107return DeserializeChatCompletion(document.RootElement, ModelSerializationExtensions.WireOptions);
108}
9f9f2936Jose Arriaga Maldonado2 years ago109}