@celljs/ai-openai 3.8.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/common/api/api-protocol.d.ts +46 -0
- package/esm/common/api/api-protocol.js +3 -0
- package/esm/common/api/api-protocol.js.map +1 -0
- package/esm/common/api/chat-request.d.ts +203 -0
- package/esm/common/api/chat-request.js +236 -0
- package/esm/common/api/chat-request.js.map +1 -0
- package/esm/common/api/chat-response.d.ts +192 -0
- package/esm/common/api/chat-response.js +191 -0
- package/esm/common/api/chat-response.js.map +1 -0
- package/esm/common/api/embeddings-request.d.ts +62 -0
- package/esm/common/api/embeddings-request.js +85 -0
- package/esm/common/api/embeddings-request.js.map +1 -0
- package/esm/common/api/embeddings-response.d.ts +26 -0
- package/esm/common/api/embeddings-response.js +44 -0
- package/esm/common/api/embeddings-response.js.map +1 -0
- package/esm/common/api/index.d.ts +9 -0
- package/esm/common/api/index.js +10 -0
- package/esm/common/api/index.js.map +1 -0
- package/esm/common/api/message.d.ts +215 -0
- package/esm/common/api/message.js +250 -0
- package/esm/common/api/message.js.map +1 -0
- package/esm/common/api/openai-api.d.ts +18 -0
- package/esm/common/api/openai-api.js +118 -0
- package/esm/common/api/openai-api.js.map +1 -0
- package/esm/common/api/openai-model.d.ts +116 -0
- package/esm/common/api/openai-model.js +118 -0
- package/esm/common/api/openai-model.js.map +1 -0
- package/esm/common/api/response-format.d.ts +59 -0
- package/esm/common/api/response-format.js +107 -0
- package/esm/common/api/response-format.js.map +1 -0
- package/esm/common/api/usage.d.ts +78 -0
- package/esm/common/api/usage.js +106 -0
- package/esm/common/api/usage.js.map +1 -0
- package/esm/common/index.d.ts +3 -0
- package/esm/common/index.js +4 -0
- package/esm/common/index.js.map +1 -0
- package/esm/common/model/index.d.ts +4 -0
- package/esm/common/model/index.js +5 -0
- package/esm/common/model/index.js.map +1 -0
- package/esm/common/model/openai-chat-model.d.ts +36 -0
- package/esm/common/model/openai-chat-model.js +363 -0
- package/esm/common/model/openai-chat-model.js.map +1 -0
- package/esm/common/model/openai-chat-options.d.ts +169 -0
- package/esm/common/model/openai-chat-options.js +274 -0
- package/esm/common/model/openai-chat-options.js.map +1 -0
- package/esm/common/model/openai-embedding-model.d.ts +14 -0
- package/esm/common/model/openai-embedding-model.js +69 -0
- package/esm/common/model/openai-embedding-model.js.map +1 -0
- package/esm/common/model/openai-embedding-options.d.ts +34 -0
- package/esm/common/model/openai-embedding-options.js +72 -0
- package/esm/common/model/openai-embedding-options.js.map +1 -0
- package/esm/common/module.d.ts +3 -0
- package/esm/common/module.js +4 -0
- package/esm/common/module.js.map +1 -0
- package/esm/common/support/index.d.ts +2 -0
- package/esm/common/support/index.js +3 -0
- package/esm/common/support/index.js.map +1 -0
- package/esm/common/support/openai-api-response-headers.d.ts +33 -0
- package/esm/common/support/openai-api-response-headers.js +42 -0
- package/esm/common/support/openai-api-response-headers.js.map +1 -0
- package/esm/common/support/openai-response-header-extractor.d.ts +11 -0
- package/esm/common/support/openai-response-header-extractor.js +129 -0
- package/esm/common/support/openai-response-header-extractor.js.map +1 -0
- package/esm/common/test/mock-openai-api.d.ts +12 -0
- package/esm/common/test/mock-openai-api.js +53 -0
- package/esm/common/test/mock-openai-api.js.map +1 -0
- package/esm/common/test/test-container.d.ts +2 -0
- package/esm/common/test/test-container.js +12 -0
- package/esm/common/test/test-container.js.map +1 -0
- package/esm/package.json +3 -0
- package/package.json +49 -6
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { AssistantMessage, ChatGenerationMetadata, ChatModel, ChatResponse, ChatResponseMetadata, FunctionCallbackRegister, FunctionCallingOptions, MessageType, RateLimit, SystemMessage, ToolResponseMessage, UsageUtil, Usage, UserMessage, ToolHandler, PromptTemplate } from '@celljs/ai-core';
|
|
11
|
+
import { of } from 'rxjs';
|
|
12
|
+
import { map, bufferCount, mergeMap, concatAll } from 'rxjs/operators/index.js';
|
|
13
|
+
import { ChatCompletionRequest, ChatCompletion, ChatCompletionMessage, Role, OpenAIAPI, Choice, MediaContent, Format, AudioOutput, Function, FunctionTool, OutputModality, ChatCompletionFinishReason } from '../api/index.js';
|
|
14
|
+
import { Autowired, ByteUtil, Component, IllegalArgumentError, Logger, MimeTypeUtils } from '@celljs/core';
|
|
15
|
+
import { OpenAIChatOptions } from './openai-chat-options.js';
|
|
16
|
+
import { OpenAIResponseHeaderExtractor } from '../support/index.js';
|
|
17
|
+
/**
|
|
18
|
+
* {@link ChatModel} implementation for {@literal OpenAI}
|
|
19
|
+
* backed by {@link OpenAIAPI}.
|
|
20
|
+
*/
|
|
21
|
+
let OpenAIChatModel = class OpenAIChatModel {
|
|
22
|
+
fromAudioData(audioData) {
|
|
23
|
+
if (audioData instanceof Uint8Array) {
|
|
24
|
+
return ByteUtil.encodeBase64(audioData);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
throw new IllegalArgumentError(`Unsupported audio data type: ${audioData.constructor.name}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
fromMediaData(mimeType, mediaContentData) {
|
|
31
|
+
if (mediaContentData instanceof Uint8Array) {
|
|
32
|
+
return `data:${mimeType.toString()};base64,${ByteUtil.encodeBase64(mediaContentData)}`;
|
|
33
|
+
}
|
|
34
|
+
else if (typeof mediaContentData === 'string') {
|
|
35
|
+
return mediaContentData;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
throw new IllegalArgumentError(`Unsupported media data type: ${mediaContentData.constructor.name}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
mapToMediaContent(media) {
|
|
42
|
+
const mimeType = media.mimeType.toString();
|
|
43
|
+
if (mimeType === 'audio/mp3') {
|
|
44
|
+
return MediaContent.createInputAudio(this.fromAudioData(media.data), Format.MP3);
|
|
45
|
+
}
|
|
46
|
+
if (mimeType === 'audio/wav') {
|
|
47
|
+
return MediaContent.createInputAudio(this.fromAudioData(media.data), Format.WAV);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return MediaContent.createImageUrl(this.fromMediaData(media.mimeType, media.data));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
getFunctionTools(functionNames) {
|
|
54
|
+
return this.functionCallbackRegister.resolve(Array.from(functionNames)).map(functionCallback => {
|
|
55
|
+
const func = Function.create(functionCallback.description, functionCallback.name, JSON.parse(functionCallback.inputTypeSchema));
|
|
56
|
+
return FunctionTool.create(func);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
createRequest(prompt, stream) {
|
|
60
|
+
const chatCompletionMessages = prompt.instructions.map(message => {
|
|
61
|
+
var _a;
|
|
62
|
+
if (message instanceof UserMessage || message instanceof SystemMessage) {
|
|
63
|
+
let content = message.content;
|
|
64
|
+
if (message instanceof UserMessage) {
|
|
65
|
+
if (((_a = message.media) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
66
|
+
const contentList = [MediaContent.createText(message.content), ...message.media.map(media => this.mapToMediaContent(media))];
|
|
67
|
+
content = contentList;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const role = message.messageType === MessageType.USER ? Role.USER : Role.SYSTEM;
|
|
71
|
+
return ChatCompletionMessage.create(content, role);
|
|
72
|
+
}
|
|
73
|
+
else if (message instanceof AssistantMessage) {
|
|
74
|
+
const assistantMessage = message;
|
|
75
|
+
let toolCalls = [];
|
|
76
|
+
if (assistantMessage.toolCalls.length > 0) {
|
|
77
|
+
toolCalls = assistantMessage.toolCalls.map(toolCall => ({
|
|
78
|
+
id: toolCall.id,
|
|
79
|
+
type: 'function',
|
|
80
|
+
function: {
|
|
81
|
+
name: toolCall.name,
|
|
82
|
+
arguments: toolCall.arguments
|
|
83
|
+
}
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
let audioOutput;
|
|
87
|
+
if (assistantMessage.media.length > 0) {
|
|
88
|
+
if (assistantMessage.media.length !== 1) {
|
|
89
|
+
throw new IllegalArgumentError('Only one media content is supported for assistant messages');
|
|
90
|
+
}
|
|
91
|
+
const media = assistantMessage.media[0];
|
|
92
|
+
audioOutput = AudioOutput.create(media.id);
|
|
93
|
+
}
|
|
94
|
+
const chatCompletionMessage = ChatCompletionMessage.create(assistantMessage.content, Role.ASSISTANT);
|
|
95
|
+
chatCompletionMessage.toolCalls = toolCalls;
|
|
96
|
+
chatCompletionMessage.audioOutput = audioOutput;
|
|
97
|
+
return chatCompletionMessage;
|
|
98
|
+
}
|
|
99
|
+
else if (message instanceof ToolResponseMessage) {
|
|
100
|
+
message.responses.forEach(response => {
|
|
101
|
+
if (!response.id) {
|
|
102
|
+
throw new IllegalArgumentError('ToolResponseMessage must have an id');
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
return message.responses.map(tr => {
|
|
106
|
+
const chatCompletionMessage = ChatCompletionMessage.create(tr.responseData, Role.TOOL);
|
|
107
|
+
chatCompletionMessage.name = tr.name;
|
|
108
|
+
chatCompletionMessage.toolCallId = tr.id;
|
|
109
|
+
return chatCompletionMessage;
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
throw new IllegalArgumentError(`Unsupported message type: ${message.messageType}`);
|
|
114
|
+
}
|
|
115
|
+
}).flat();
|
|
116
|
+
let request = new ChatCompletionRequest();
|
|
117
|
+
request.messages = chatCompletionMessages;
|
|
118
|
+
request.stream = stream;
|
|
119
|
+
// Runtime options
|
|
120
|
+
let runtimeOptions = OpenAIChatOptions.builder().build();
|
|
121
|
+
if (prompt.options) {
|
|
122
|
+
runtimeOptions = Object.assign(runtimeOptions, prompt.options);
|
|
123
|
+
}
|
|
124
|
+
const enabledToolsToUse = FunctionCallingOptions.getEnabledFunctionsToCall(runtimeOptions);
|
|
125
|
+
if (this.defaultOptions.functions.size > 0) {
|
|
126
|
+
for (const functionName of this.defaultOptions.functions) {
|
|
127
|
+
enabledToolsToUse.add(functionName);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
runtimeOptions = Object.assign(this.defaultOptions, runtimeOptions);
|
|
131
|
+
request = Object.assign(request, runtimeOptions);
|
|
132
|
+
if (enabledToolsToUse.size > 0) {
|
|
133
|
+
request.tools = this.getFunctionTools(enabledToolsToUse);
|
|
134
|
+
}
|
|
135
|
+
// Remove `streamOptions` from the request if it is not a streaming request
|
|
136
|
+
if (request.streamOptions && !stream) {
|
|
137
|
+
request.streamOptions = undefined;
|
|
138
|
+
}
|
|
139
|
+
return request;
|
|
140
|
+
}
|
|
141
|
+
buildGeneration(choice, metadata, request) {
|
|
142
|
+
var _a, _b, _c;
|
|
143
|
+
var _d, _e;
|
|
144
|
+
const toolCalls = (_d = (_a = choice.message.toolCalls) === null || _a === void 0 ? void 0 : _a.map(toolCall => { var _a; return ({
|
|
145
|
+
id: (_a = toolCall.id) !== null && _a !== void 0 ? _a : '',
|
|
146
|
+
type: 'function',
|
|
147
|
+
name: toolCall.function.name,
|
|
148
|
+
arguments: JSON.stringify(toolCall.function.arguments)
|
|
149
|
+
}); })) !== null && _d !== void 0 ? _d : [];
|
|
150
|
+
const finishReason = (_e = choice.finishReason) !== null && _e !== void 0 ? _e : '';
|
|
151
|
+
const generationMetadata = ChatGenerationMetadata.from(finishReason);
|
|
152
|
+
const media = [];
|
|
153
|
+
let textContent = choice.message.content;
|
|
154
|
+
const audioOutput = choice.message.audioOutput;
|
|
155
|
+
if (audioOutput) {
|
|
156
|
+
const mimeType = `audio/${(_c = (_b = request.audioParameters) === null || _b === void 0 ? void 0 : _b.format) === null || _c === void 0 ? void 0 : _c.toLowerCase()}`;
|
|
157
|
+
const audioData = ByteUtil.decodeBase64(audioOutput.data);
|
|
158
|
+
media.push({
|
|
159
|
+
mimeType: MimeTypeUtils.parseMimeType(mimeType),
|
|
160
|
+
data: audioData,
|
|
161
|
+
id: audioOutput.id
|
|
162
|
+
});
|
|
163
|
+
if (!textContent) {
|
|
164
|
+
textContent = audioOutput.transcript;
|
|
165
|
+
}
|
|
166
|
+
generationMetadata.metadata.audioId = audioOutput.id;
|
|
167
|
+
generationMetadata.metadata.audioExpiresAt = audioOutput.expiresAt;
|
|
168
|
+
}
|
|
169
|
+
const assistantMessage = new AssistantMessage(textContent, media, metadata, toolCalls);
|
|
170
|
+
return {
|
|
171
|
+
output: assistantMessage,
|
|
172
|
+
metadata: generationMetadata
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
buildChatResponseMetadataByResult(result, usage, rateLimit = RateLimit.createEmpty()) {
|
|
176
|
+
var _a, _b, _c, _d;
|
|
177
|
+
return ChatResponseMetadata.builder()
|
|
178
|
+
.id((_a = result.id) !== null && _a !== void 0 ? _a : '')
|
|
179
|
+
.usage(usage)
|
|
180
|
+
.model((_b = result.model) !== null && _b !== void 0 ? _b : '')
|
|
181
|
+
.keyValue('created', (_c = result.created) !== null && _c !== void 0 ? _c : 0)
|
|
182
|
+
.keyValue('system-fingerprint', (_d = result.systemFingerprint) !== null && _d !== void 0 ? _d : '')
|
|
183
|
+
.rateLimit(rateLimit)
|
|
184
|
+
.build();
|
|
185
|
+
}
|
|
186
|
+
buildChatResponseMetadata(chatResponseMetadata, usage) {
|
|
187
|
+
var _a, _b;
|
|
188
|
+
return ChatResponseMetadata.builder()
|
|
189
|
+
.id((_a = chatResponseMetadata.id) !== null && _a !== void 0 ? _a : '')
|
|
190
|
+
.usage(usage)
|
|
191
|
+
.model((_b = chatResponseMetadata.model) !== null && _b !== void 0 ? _b : '')
|
|
192
|
+
.rateLimit(chatResponseMetadata.rateLimit)
|
|
193
|
+
.build();
|
|
194
|
+
}
|
|
195
|
+
call(prompt) {
|
|
196
|
+
return this.internalCall(prompt);
|
|
197
|
+
}
|
|
198
|
+
async internalCall(prompt, previousChatResponse) {
|
|
199
|
+
var _a;
|
|
200
|
+
var _b;
|
|
201
|
+
const request = this.createRequest(prompt, false);
|
|
202
|
+
const httpHeaders = (_a = prompt.options) === null || _a === void 0 ? void 0 : _a.httpHeaders;
|
|
203
|
+
const completionEntity = await this.chatApi.chat(request, httpHeaders);
|
|
204
|
+
const chatCompletion = completionEntity.body;
|
|
205
|
+
if (!chatCompletion) {
|
|
206
|
+
this.logger.warn(`No chat completion returned for prompt: ${prompt}`);
|
|
207
|
+
return ChatResponse.from([]);
|
|
208
|
+
}
|
|
209
|
+
const choices = chatCompletion.choices;
|
|
210
|
+
if (!choices || choices.length === 0) {
|
|
211
|
+
this.logger.warn(`No choices returned for prompt: ${prompt}`);
|
|
212
|
+
return ChatResponse.from([]);
|
|
213
|
+
}
|
|
214
|
+
const generations = choices.map(choice => {
|
|
215
|
+
var _a, _b, _c, _d;
|
|
216
|
+
const metadata = {
|
|
217
|
+
id: (_a = chatCompletion.id) !== null && _a !== void 0 ? _a : '',
|
|
218
|
+
role: (_b = choice.message.role) !== null && _b !== void 0 ? _b : '',
|
|
219
|
+
index: choice.index,
|
|
220
|
+
finishReason: (_c = choice.finishReason) !== null && _c !== void 0 ? _c : '',
|
|
221
|
+
refusal: (_d = choice.message.refusal) !== null && _d !== void 0 ? _d : ''
|
|
222
|
+
};
|
|
223
|
+
return this.buildGeneration(choice, metadata, request);
|
|
224
|
+
});
|
|
225
|
+
const rateLimit = OpenAIResponseHeaderExtractor.extractAIResponseHeaders(completionEntity);
|
|
226
|
+
const usage = (_b = chatCompletion.usage) !== null && _b !== void 0 ? _b : {};
|
|
227
|
+
const chatResponse = ChatResponse.from(generations, this.buildChatResponseMetadataByResult(chatCompletion, usage, rateLimit));
|
|
228
|
+
if (FunctionCallingOptions.isProxyToolCalls(prompt.options, this.defaultOptions)) {
|
|
229
|
+
if (ChatResponse.isToolCall(chatResponse, new Set([ChatCompletionFinishReason.TOOL_CALLS, ChatCompletionFinishReason.STOP]))) {
|
|
230
|
+
const toolCallConversation = await this.toolHandler.handle(prompt, chatResponse);
|
|
231
|
+
return this.internalCall(await this.promptTemplate.create(toolCallConversation, { chatOptions: prompt.options }), chatResponse);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return chatResponse;
|
|
235
|
+
}
|
|
236
|
+
chunkToChatCompletion(chunk) {
|
|
237
|
+
const choices = chunk.choices.map(chunkChoice => {
|
|
238
|
+
const choice = new Choice();
|
|
239
|
+
choice.finishReason = chunkChoice.finishReason;
|
|
240
|
+
choice.index = chunkChoice.index;
|
|
241
|
+
choice.message = chunkChoice.delta;
|
|
242
|
+
choice.logprobs = chunkChoice.logprobs;
|
|
243
|
+
return choice;
|
|
244
|
+
});
|
|
245
|
+
const chatCompletion = new ChatCompletion();
|
|
246
|
+
chatCompletion.id = chunk.id;
|
|
247
|
+
chatCompletion.choices = choices;
|
|
248
|
+
chatCompletion.created = chunk.created;
|
|
249
|
+
chatCompletion.model = chunk.model;
|
|
250
|
+
chatCompletion.serviceTier = chunk.serviceTier;
|
|
251
|
+
chatCompletion.systemFingerprint = chunk.systemFingerprint;
|
|
252
|
+
chatCompletion.usage = chunk.usage;
|
|
253
|
+
return chatCompletion;
|
|
254
|
+
}
|
|
255
|
+
async internalStream(prompt, previousChatResponse) {
|
|
256
|
+
var _a, _b;
|
|
257
|
+
const request = this.createRequest(prompt, true);
|
|
258
|
+
if ((_a = request.outputModalities) === null || _a === void 0 ? void 0 : _a.includes(OutputModality.AUDIO)) {
|
|
259
|
+
this.logger.warn('Audio output is not supported for streaming requests. Removing audio output.');
|
|
260
|
+
throw new IllegalArgumentError('Audio output is not supported for streaming requests.');
|
|
261
|
+
}
|
|
262
|
+
if (request.audioParameters) {
|
|
263
|
+
this.logger.warn('Audio parameters are not supported for streaming requests. Removing audio parameters.');
|
|
264
|
+
throw new IllegalArgumentError('Audio parameters are not supported for streaming requests.');
|
|
265
|
+
}
|
|
266
|
+
const httpHeaders = (_b = prompt.options) === null || _b === void 0 ? void 0 : _b.httpHeaders;
|
|
267
|
+
const response = await this.chatApi.streamingChat(request, httpHeaders);
|
|
268
|
+
// For chunked responses, only the first chunk contains the choice role.
|
|
269
|
+
// Subsequent chunks contain the choices.
|
|
270
|
+
const roleMap = new Map();
|
|
271
|
+
const chatResponse = response.pipe(map(responseEntity => this.chunkToChatCompletion(responseEntity.body)), map(chatCompletion => {
|
|
272
|
+
try {
|
|
273
|
+
const generations = chatCompletion.choices.map(choice => {
|
|
274
|
+
var _a, _b, _c, _d;
|
|
275
|
+
const id = (_a = chatCompletion.id) !== null && _a !== void 0 ? _a : '';
|
|
276
|
+
if (choice.message.role) {
|
|
277
|
+
roleMap.set(id, choice.message.role);
|
|
278
|
+
}
|
|
279
|
+
const metadata = {
|
|
280
|
+
id,
|
|
281
|
+
role: (_b = roleMap.get(id)) !== null && _b !== void 0 ? _b : '',
|
|
282
|
+
index: choice.index,
|
|
283
|
+
finishReason: (_c = choice.finishReason) !== null && _c !== void 0 ? _c : '',
|
|
284
|
+
refusal: (_d = choice.message.refusal) !== null && _d !== void 0 ? _d : ''
|
|
285
|
+
};
|
|
286
|
+
return this.buildGeneration(choice, metadata, request);
|
|
287
|
+
});
|
|
288
|
+
const usage = chatCompletion.usage;
|
|
289
|
+
const currentChatResponseUsage = usage ? Usage.from(usage.promptTokens, usage.completionTokens, usage.totalTokens) : Usage.createEmpty();
|
|
290
|
+
const accumulatedUsage = UsageUtil.getCumulativeUsage(currentChatResponseUsage, previousChatResponse);
|
|
291
|
+
return ChatResponse.from(generations, this.buildChatResponseMetadataByResult(chatCompletion, accumulatedUsage));
|
|
292
|
+
}
|
|
293
|
+
catch (e) {
|
|
294
|
+
this.logger.error(e);
|
|
295
|
+
return ChatResponse.from([]);
|
|
296
|
+
}
|
|
297
|
+
}),
|
|
298
|
+
// When in stream mode and enabled to include the usage, the OpenAI
|
|
299
|
+
// Chat completion response would have the usage set only in its
|
|
300
|
+
// final response. Hence, the following overlapping buffer is
|
|
301
|
+
// created to store both the current and the subsequent response
|
|
302
|
+
// responses.
|
|
303
|
+
bufferCount(2, 1), map(buffer => {
|
|
304
|
+
var _a;
|
|
305
|
+
const firstResponse = buffer[0];
|
|
306
|
+
if (((_a = request.streamOptions) === null || _a === void 0 ? void 0 : _a.includeUsage) && buffer.length === 2) {
|
|
307
|
+
const secondResponse = buffer[1];
|
|
308
|
+
if (secondResponse === null || secondResponse === void 0 ? void 0 : secondResponse.metadata) {
|
|
309
|
+
// If the second response is not empty, then the first
|
|
310
|
+
// response is not the final response.
|
|
311
|
+
const usage = secondResponse.metadata.usage;
|
|
312
|
+
if (!UsageUtil.isEmpty(usage)) {
|
|
313
|
+
// Store the usage from the final response to the
|
|
314
|
+
// penultimate response for accumulation.
|
|
315
|
+
return ChatResponse.from(firstResponse.results, this.buildChatResponseMetadata(firstResponse.metadata, usage));
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return firstResponse;
|
|
320
|
+
}), mergeMap(async (chatResponse2) => {
|
|
321
|
+
if (FunctionCallingOptions.isProxyToolCalls(prompt.options, this.defaultOptions)) {
|
|
322
|
+
if (ChatResponse.isToolCall(chatResponse2, new Set([ChatCompletionFinishReason.TOOL_CALLS, ChatCompletionFinishReason.STOP]))) {
|
|
323
|
+
const toolCallConversation = await this.toolHandler.handle(prompt, chatResponse2);
|
|
324
|
+
return this.internalStream(await this.promptTemplate.create(toolCallConversation, { chatOptions: prompt.options }), chatResponse2);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return of(chatResponse2);
|
|
328
|
+
}), concatAll());
|
|
329
|
+
return chatResponse;
|
|
330
|
+
}
|
|
331
|
+
async stream(prompt) {
|
|
332
|
+
return this.internalStream(prompt);
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
__decorate([
|
|
336
|
+
Autowired(OpenAIChatOptions),
|
|
337
|
+
__metadata("design:type", OpenAIChatOptions)
|
|
338
|
+
], OpenAIChatModel.prototype, "defaultOptions", void 0);
|
|
339
|
+
__decorate([
|
|
340
|
+
Autowired(OpenAIAPI),
|
|
341
|
+
__metadata("design:type", Object)
|
|
342
|
+
], OpenAIChatModel.prototype, "chatApi", void 0);
|
|
343
|
+
__decorate([
|
|
344
|
+
Autowired(Logger),
|
|
345
|
+
__metadata("design:type", Object)
|
|
346
|
+
], OpenAIChatModel.prototype, "logger", void 0);
|
|
347
|
+
__decorate([
|
|
348
|
+
Autowired(FunctionCallbackRegister),
|
|
349
|
+
__metadata("design:type", Object)
|
|
350
|
+
], OpenAIChatModel.prototype, "functionCallbackRegister", void 0);
|
|
351
|
+
__decorate([
|
|
352
|
+
Autowired(ToolHandler),
|
|
353
|
+
__metadata("design:type", Object)
|
|
354
|
+
], OpenAIChatModel.prototype, "toolHandler", void 0);
|
|
355
|
+
__decorate([
|
|
356
|
+
Autowired(PromptTemplate),
|
|
357
|
+
__metadata("design:type", Object)
|
|
358
|
+
], OpenAIChatModel.prototype, "promptTemplate", void 0);
|
|
359
|
+
OpenAIChatModel = __decorate([
|
|
360
|
+
Component(ChatModel)
|
|
361
|
+
], OpenAIChatModel);
|
|
362
|
+
export { OpenAIChatModel };
|
|
363
|
+
//# sourceMappingURL=openai-chat-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-chat-model.js","sourceRoot":"","sources":["../../../src/common/model/openai-chat-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { FunctionCallback, FunctionCallingOptions, Prediction } from '@celljs/ai-core';
|
|
2
|
+
import { OpenAIModel } from '../api/openai-model.js';
|
|
3
|
+
import { AudioParameters, FunctionTool, ResponseFormat, StreamOptions } from '../api/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Options for the OpenAI Chat API.
|
|
6
|
+
*/
|
|
7
|
+
export declare class OpenAIChatOptions implements FunctionCallingOptions {
|
|
8
|
+
static readonly DEFAULT_MODEL = OpenAIModel.GPT_3_5_TURBO;
|
|
9
|
+
/**
|
|
10
|
+
* ID of the model to use.
|
|
11
|
+
*/
|
|
12
|
+
model?: string;
|
|
13
|
+
/**
|
|
14
|
+
* What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output
|
|
15
|
+
* more random, while lower values like 0.2 will make it more focused and deterministic. We generally recommend
|
|
16
|
+
* altering this or top_p but not both.
|
|
17
|
+
*/
|
|
18
|
+
temperature?: number;
|
|
19
|
+
/**
|
|
20
|
+
* The maximum number of tokens to generate in the chat completion. The total length of input
|
|
21
|
+
* tokens and generated tokens is limited by the model's context length.
|
|
22
|
+
*/
|
|
23
|
+
maxTokens?: number;
|
|
24
|
+
/**
|
|
25
|
+
* An alternative to sampling with temperature, called nucleus sampling, where the model considers the
|
|
26
|
+
* results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10%
|
|
27
|
+
* probability mass are considered. We generally recommend altering this or temperature but not both.
|
|
28
|
+
*/
|
|
29
|
+
topP?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they
|
|
32
|
+
* appear in the text so far, increasing the model's likelihood to talk about new topics.
|
|
33
|
+
*/
|
|
34
|
+
presencePenalty?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing
|
|
37
|
+
* frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.
|
|
38
|
+
*/
|
|
39
|
+
frequencyPenalty?: number;
|
|
40
|
+
/**
|
|
41
|
+
* How many chat completion choices to generate for each input message. Note that you will be charged based
|
|
42
|
+
* on the number of generated tokens across all of the choices. Keep n as 1 to minimize costs.
|
|
43
|
+
*/
|
|
44
|
+
n?: number;
|
|
45
|
+
/**
|
|
46
|
+
* Output types that you would like the model to generate for this request.
|
|
47
|
+
* Most models are capable of generating text, which is the default.
|
|
48
|
+
*/
|
|
49
|
+
outputModalities?: string[];
|
|
50
|
+
/**
|
|
51
|
+
* Audio parameters for the audio generation. Required when audio output is requested with
|
|
52
|
+
* modalities: ["audio"]
|
|
53
|
+
*/
|
|
54
|
+
outputAudio?: AudioParameters;
|
|
55
|
+
/**
|
|
56
|
+
* Modify the likelihood of specified tokens appearing in the completion. Accepts a JSON object
|
|
57
|
+
* that maps tokens (specified by their token ID in the tokenizer) to an associated bias value from -100 to 100.
|
|
58
|
+
*/
|
|
59
|
+
logitBias?: Record<string, number>;
|
|
60
|
+
/**
|
|
61
|
+
* Whether to return log probabilities of the output tokens or not. If true, returns the log probabilities
|
|
62
|
+
* of each output token returned in the 'content' of 'message'.
|
|
63
|
+
*/
|
|
64
|
+
logprobs?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* An integer between 0 and 5 specifying the number of most likely tokens to return at each token position,
|
|
67
|
+
* each with an associated log probability. 'logprobs' must be set to 'true' if this parameter is used.
|
|
68
|
+
*/
|
|
69
|
+
topLogprobs?: number;
|
|
70
|
+
/**
|
|
71
|
+
* An object specifying the format that the model must output. Setting to { "type":
|
|
72
|
+
* "json_object" } enables JSON mode, which guarantees the message the model generates is valid JSON.
|
|
73
|
+
*/
|
|
74
|
+
responseFormat?: ResponseFormat;
|
|
75
|
+
/**
|
|
76
|
+
* Options for streaming response. Included in the API only if streaming-mode completion is requested.
|
|
77
|
+
*/
|
|
78
|
+
streamOptions?: StreamOptions;
|
|
79
|
+
/**
|
|
80
|
+
* This feature is in Beta. If specified, our system will make a best effort to sample
|
|
81
|
+
* deterministically, such that repeated requests with the same seed and parameters should return the same result.
|
|
82
|
+
*/
|
|
83
|
+
seed?: number;
|
|
84
|
+
/**
|
|
85
|
+
* Up to 4 sequences where the API will stop generating further tokens.
|
|
86
|
+
*/
|
|
87
|
+
stop?: string[];
|
|
88
|
+
/**
|
|
89
|
+
* A list of tools the model may call. Currently, only functions are supported as a tool. Use this to
|
|
90
|
+
* provide a list of functions the model may generate JSON inputs for.
|
|
91
|
+
*/
|
|
92
|
+
tools?: FunctionTool[];
|
|
93
|
+
/**
|
|
94
|
+
* Controls which (if any) function is called by the model.
|
|
95
|
+
*/
|
|
96
|
+
toolChoice?: any;
|
|
97
|
+
/**
|
|
98
|
+
* A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.
|
|
99
|
+
*/
|
|
100
|
+
user?: string;
|
|
101
|
+
/**
|
|
102
|
+
* Whether to enable parallel function calling during tool use.
|
|
103
|
+
*/
|
|
104
|
+
parallelToolCalls?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Static predicted output content, such as the content of a text file that is
|
|
107
|
+
* being regenerated.
|
|
108
|
+
*/
|
|
109
|
+
prediction?: Prediction | null;
|
|
110
|
+
/**
|
|
111
|
+
* Extra parameters to be added to the request.
|
|
112
|
+
*/
|
|
113
|
+
extra?: Record<string, unknown>;
|
|
114
|
+
/**
|
|
115
|
+
* Tool Function Callbacks to register with the ChatModel.
|
|
116
|
+
*/
|
|
117
|
+
functionCallbacks: FunctionCallback[];
|
|
118
|
+
/**
|
|
119
|
+
* List of functions, identified by their names, to configure for function calling in
|
|
120
|
+
* the chat completion requests.
|
|
121
|
+
*/
|
|
122
|
+
functions: Set<string>;
|
|
123
|
+
/**
|
|
124
|
+
* If true, the AI will not handle the function calls internally, but will proxy them to the client.
|
|
125
|
+
*/
|
|
126
|
+
proxyToolCalls?: boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Optional HTTP headers to be added to the chat completion request.
|
|
129
|
+
*/
|
|
130
|
+
httpHeaders: Record<string, string>;
|
|
131
|
+
/**
|
|
132
|
+
* Tool context data.
|
|
133
|
+
*/
|
|
134
|
+
toolContext?: Record<string, any>;
|
|
135
|
+
copy(): OpenAIChatOptions;
|
|
136
|
+
static options(fromOptions: OpenAIChatOptions): OpenAIChatOptions;
|
|
137
|
+
static builder(): OpenAIOptionsBuilder;
|
|
138
|
+
}
|
|
139
|
+
export declare class OpenAIOptionsBuilder {
|
|
140
|
+
private options;
|
|
141
|
+
withModel(model: string): OpenAIOptionsBuilder;
|
|
142
|
+
withTemperature(temperature: number): OpenAIOptionsBuilder;
|
|
143
|
+
withMaxTokens(maxTokens: number): OpenAIOptionsBuilder;
|
|
144
|
+
withTopP(topP: number): OpenAIOptionsBuilder;
|
|
145
|
+
withPresencePenalty(presencePenalty: number): OpenAIOptionsBuilder;
|
|
146
|
+
withFrequencyPenalty(frequencyPenalty: number): OpenAIOptionsBuilder;
|
|
147
|
+
withN(n: number): OpenAIOptionsBuilder;
|
|
148
|
+
withOutputModalities(modalities: string[]): OpenAIOptionsBuilder;
|
|
149
|
+
withOutputAudio(audio: AudioParameters): OpenAIOptionsBuilder;
|
|
150
|
+
withLogitBias(bias: Record<string, number>): OpenAIOptionsBuilder;
|
|
151
|
+
withLogprobs(logprobs: boolean): OpenAIOptionsBuilder;
|
|
152
|
+
withTopLogprobs(topLogprobs: number): OpenAIOptionsBuilder;
|
|
153
|
+
withResponseFormat(format: ResponseFormat): OpenAIOptionsBuilder;
|
|
154
|
+
withStreamOptions(options: StreamOptions): OpenAIOptionsBuilder;
|
|
155
|
+
withSeed(seed: number): OpenAIOptionsBuilder;
|
|
156
|
+
withStop(stop: string[]): OpenAIOptionsBuilder;
|
|
157
|
+
withTools(tools: FunctionTool[]): OpenAIOptionsBuilder;
|
|
158
|
+
withToolChoice(choice: any): OpenAIOptionsBuilder;
|
|
159
|
+
withUser(user: string): OpenAIOptionsBuilder;
|
|
160
|
+
withParallelToolCalls(parallel: boolean): OpenAIOptionsBuilder;
|
|
161
|
+
withFunctionCallbacks(callbacks: FunctionCallback[]): OpenAIOptionsBuilder;
|
|
162
|
+
withFunctions(functions: Set<string>): OpenAIOptionsBuilder;
|
|
163
|
+
withProxyToolCalls(proxy: boolean): OpenAIOptionsBuilder;
|
|
164
|
+
withHttpHeaders(headers: Record<string, string>): OpenAIOptionsBuilder;
|
|
165
|
+
withToolContext(context: Record<string, any>): OpenAIOptionsBuilder;
|
|
166
|
+
withPrediction(prediction: Prediction | null): OpenAIOptionsBuilder;
|
|
167
|
+
withExtra(extra: Record<string, unknown>): OpenAIOptionsBuilder;
|
|
168
|
+
build(): OpenAIChatOptions;
|
|
169
|
+
}
|