1
1
using Liquid . Core . Entities ;
2
2
using Liquid . Core . Interfaces ;
3
3
using Liquid . Core . Settings ;
4
- using Azure . AI . OpenAI ;
4
+ using OpenAI . Chat ;
5
5
using System . Diagnostics . CodeAnalysis ;
6
6
7
7
namespace Liquid . ChatCompletions . OpenAi
@@ -27,26 +27,24 @@ public async Task<ChatCompletionResult> FunctionCalling(ChatMessages messages, L
27
27
{
28
28
var client = _factory . GetOpenAIClient ( settings . ClientId ) ;
29
29
30
- var requestMessages = new List < ChatRequestMessage > ( ) ;
30
+ var requestMessages = new List < OpenAI . Chat . ChatMessage > ( ) ;
31
31
32
32
messages . Messages . ForEach ( m => requestMessages . Add ( MapChatRequestMessage ( m ) ) ) ;
33
33
34
34
var option = MapChatCompletionOptions ( requestMessages , settings ) ;
35
35
36
- functions . ForEach ( f => option . Functions . Add ( GetDefinition ( f ) ) ) ;
36
+ functions . ForEach ( f => option . Tools . Add ( ChatTool . CreateFunctionTool ( f . Name , f . Description , f . Parameters ) ) ) ;
37
37
38
- var responseWithoutStream = await client . GetChatCompletionsAsync ( option , new CancellationToken ( ) ) ;
39
-
40
- var response = responseWithoutStream . Value . Choices [ 0 ] . Message . FunctionCall == null ?
41
- null : responseWithoutStream . Value . Choices [ 0 ] . Message . FunctionCall . Arguments ;
38
+ var responseWithoutStream = await client . CompleteChatAsync ( requestMessages , option ) ;
39
+ var response = responseWithoutStream . Value . Content [ 0 ] . Text ;
42
40
43
41
var result = new ChatCompletionResult ( )
44
42
{
45
- FinishReason = responseWithoutStream . Value . Choices [ 0 ] ? . FinishReason ? . ToString ( ) ,
43
+ FinishReason = responseWithoutStream . Value . FinishReason . ToString ( ) ,
46
44
Content = response ,
47
- Usage = responseWithoutStream . Value . Usage . TotalTokens ,
48
- PromptUsage = responseWithoutStream . Value . Usage . PromptTokens ,
49
- CompletionUsage = responseWithoutStream . Value . Usage . CompletionTokens ,
45
+ Usage = responseWithoutStream . Value . Usage . TotalTokenCount ,
46
+ PromptUsage = responseWithoutStream . Value . Usage . InputTokenCount ,
47
+ CompletionUsage = responseWithoutStream . Value . Usage . OutputTokenCount ,
50
48
} ;
51
49
52
50
return result ;
@@ -61,15 +59,16 @@ public async Task<ChatCompletionResult> ChatCompletions(string content, string p
61
59
62
60
var option = MapChatCompletionOptions ( messages , settings ) ;
63
61
64
- var responseWithoutStream = await client . GetChatCompletionsAsync ( option , new CancellationToken ( ) ) ;
62
+ var responseWithoutStream = await client . CompleteChatAsync ( messages , option ) ;
63
+ var response = responseWithoutStream . Value . Content [ 0 ] . Text ;
65
64
66
65
var result = new ChatCompletionResult ( )
67
66
{
68
- FinishReason = responseWithoutStream . Value . Choices [ 0 ] ? . FinishReason ? . ToString ( ) ,
69
- Content = responseWithoutStream . Value . Choices [ 0 ] ? . Message ? . Content ,
70
- Usage = responseWithoutStream . Value . Usage . TotalTokens ,
71
- PromptUsage = responseWithoutStream . Value . Usage . PromptTokens ,
72
- CompletionUsage = responseWithoutStream . Value . Usage . CompletionTokens ,
67
+ FinishReason = responseWithoutStream . Value . FinishReason . ToString ( ) ,
68
+ Content = response ,
69
+ Usage = responseWithoutStream . Value . Usage . TotalTokenCount ,
70
+ PromptUsage = responseWithoutStream . Value . Usage . InputTokenCount ,
71
+ CompletionUsage = responseWithoutStream . Value . Usage . OutputTokenCount ,
73
72
} ;
74
73
75
74
return result ;
@@ -78,36 +77,29 @@ public async Task<ChatCompletionResult> ChatCompletions(string content, string p
78
77
///<inheritdoc/>
79
78
public async Task < ReadOnlyMemory < float > > GetEmbeddings ( string description , string modelName , string clientId )
80
79
{
81
- var client = _factory . GetOpenAIClient ( clientId ) ;
80
+ // var client = _factory.GetOpenAIClient(clientId);
82
81
83
- EmbeddingsOptions embeddingsOptions = new ( modelName , new string [ ] { description } ) ;
82
+ //EmbeddingGenerationOptions embeddingsOptions = new(modelName, new string[] { description });
84
83
85
- var embeddings = await client . GetEmbeddingsAsync ( embeddingsOptions ) ;
84
+ // var embeddings = await client.(embeddingsOptions);
86
85
87
- return embeddings . Value . Data [ 0 ] . Embedding ;
88
- }
86
+ //return embeddings.Value.Data[0].Embedding;
89
87
90
- private FunctionDefinition GetDefinition ( FunctionBody function )
91
- {
92
- return new FunctionDefinition ( )
93
- {
94
- Name = function . Name ,
95
- Description = function . Description ,
96
- Parameters = function . Parameters ,
97
- } ;
88
+ throw new NotImplementedException ( ) ;
98
89
}
99
90
91
+
100
92
/// <summary>
101
93
/// get chat messages for a chat completions request.
102
94
/// </summary>
103
95
/// <param name="content">content of the user message</param>
104
96
/// <param name="prompt">prompt message</param>
105
97
/// <param name="chatHistory">chat context messages</param>
106
- private List < ChatRequestMessage > GetChatMessagesAsync ( string content , string prompt , ChatMessages ? chatHistory = null )
98
+ private List < OpenAI . Chat . ChatMessage > GetChatMessagesAsync ( string content , string prompt , ChatMessages ? chatHistory = null )
107
99
{
108
- var messages = new List < ChatRequestMessage >
100
+ var messages = new List < OpenAI . Chat . ChatMessage >
109
101
{
110
- new ChatRequestSystemMessage ( prompt )
102
+ new SystemChatMessage ( prompt )
111
103
} ;
112
104
113
105
if ( chatHistory ? . Messages != null && chatHistory . Messages . Count > 0 )
@@ -118,7 +110,7 @@ private List<ChatRequestMessage> GetChatMessagesAsync(string content, string pro
118
110
}
119
111
}
120
112
121
- messages . Add ( new ChatRequestUserMessage ( content ) ) ;
113
+ messages . Add ( new UserChatMessage ( content ) ) ;
122
114
123
115
return messages ;
124
116
}
@@ -128,19 +120,19 @@ private List<ChatRequestMessage> GetChatMessagesAsync(string content, string pro
128
120
/// </summary>
129
121
/// <param name="message">chat message</param>
130
122
/// <exception cref="ArgumentNullException"></exception>
131
- private ChatRequestMessage MapChatRequestMessage ( ChatMessage message )
123
+ private OpenAI . Chat . ChatMessage MapChatRequestMessage ( Core . Entities . ChatMessage message )
132
124
{
133
- ChatRequestMessage chatRequestMessage = null ;
125
+ OpenAI . Chat . ChatMessage chatRequestMessage = null ;
134
126
switch ( message . Role . ToLower ( ) )
135
127
{
136
128
case "system" :
137
- chatRequestMessage = new ChatRequestSystemMessage ( message . Content ) ;
129
+ chatRequestMessage = new SystemChatMessage ( message . Content ) ;
138
130
break ;
139
131
case "assistant" :
140
- chatRequestMessage = new ChatRequestAssistantMessage ( message . Content ) ;
132
+ chatRequestMessage = new AssistantChatMessage ( message . Content ) ;
141
133
break ;
142
134
case "user" :
143
- chatRequestMessage = new ChatRequestUserMessage ( message . Content ) ;
135
+ chatRequestMessage = new UserChatMessage ( message . Content ) ;
144
136
break ;
145
137
default :
146
138
break ;
@@ -160,15 +152,16 @@ private ChatRequestMessage MapChatRequestMessage(ChatMessage message)
160
152
/// <param name="messages">Chat messages </param>
161
153
/// <param name="settings">Chat completions settings</param>
162
154
/// <returns></returns>
163
- private ChatCompletionsOptions MapChatCompletionOptions ( List < ChatRequestMessage > messages , CompletionsSettings settings )
155
+ private ChatCompletionOptions MapChatCompletionOptions ( List < OpenAI . Chat . ChatMessage > messages , CompletionsSettings settings )
164
156
{
165
- return new ChatCompletionsOptions ( settings . DeploymentName , messages )
157
+ return new ChatCompletionOptions ( )
166
158
{
167
159
Temperature = settings . Temperature ,
168
- MaxTokens = settings . MaxTokens ,
169
- NucleusSamplingFactor = settings . NucleusSamplingFactor ,
160
+ MaxOutputTokenCount = settings . MaxTokens ,
161
+ TopP = settings . NucleusSamplingFactor ,
170
162
FrequencyPenalty = settings . FrequencyPenalty ,
171
- PresencePenalty = settings . PresencePenalty ,
163
+ PresencePenalty = settings . PresencePenalty
164
+
172
165
} ;
173
166
}
174
167
}
0 commit comments