@theia/ai-openai 1.58.2 → 1.59.0-next.62
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/README.md +11 -9
- package/lib/browser/openai-frontend-application-contribution.d.ts.map +1 -1
- package/lib/browser/openai-frontend-application-contribution.js +11 -7
- package/lib/browser/openai-frontend-application-contribution.js.map +1 -1
- package/lib/browser/openai-preferences.d.ts.map +1 -1
- package/lib/browser/openai-preferences.js +29 -15
- package/lib/browser/openai-preferences.js.map +1 -1
- package/lib/common/openai-language-models-manager.d.ts +9 -2
- package/lib/common/openai-language-models-manager.d.ts.map +1 -1
- package/lib/node/openai-backend-module.d.ts.map +1 -1
- package/lib/node/openai-backend-module.js +2 -0
- package/lib/node/openai-backend-module.js.map +1 -1
- package/lib/node/openai-language-model.d.ts +29 -7
- package/lib/node/openai-language-model.d.ts.map +1 -1
- package/lib/node/openai-language-model.js +93 -103
- package/lib/node/openai-language-model.js.map +1 -1
- package/lib/node/openai-language-models-manager-impl.d.ts +2 -0
- package/lib/node/openai-language-models-manager-impl.d.ts.map +1 -1
- package/lib/node/openai-language-models-manager-impl.js +7 -2
- package/lib/node/openai-language-models-manager-impl.js.map +1 -1
- package/lib/node/openai-model-utils.spec.d.ts +4 -0
- package/lib/node/openai-model-utils.spec.d.ts.map +1 -0
- package/lib/node/openai-model-utils.spec.js +155 -0
- package/lib/node/openai-model-utils.spec.js.map +1 -0
- package/lib/node/openai-streaming-iterator.d.ts +21 -0
- package/lib/node/openai-streaming-iterator.d.ts.map +1 -0
- package/lib/node/openai-streaming-iterator.js +126 -0
- package/lib/node/openai-streaming-iterator.js.map +1 -0
- package/lib/node/openai-streaming-iterator.spec.d.ts +2 -0
- package/lib/node/openai-streaming-iterator.spec.d.ts.map +1 -0
- package/lib/node/openai-streaming-iterator.spec.js +208 -0
- package/lib/node/openai-streaming-iterator.spec.js.map +1 -0
- package/package.json +7 -7
- package/src/browser/openai-frontend-application-contribution.ts +9 -5
- package/src/browser/openai-preferences.ts +36 -15
- package/src/common/openai-language-models-manager.ts +10 -2
- package/src/node/openai-backend-module.ts +2 -0
- package/src/node/openai-language-model.ts +106 -108
- package/src/node/openai-language-models-manager-impl.ts +9 -3
- package/src/node/openai-model-utils.spec.ts +164 -0
- package/src/node/openai-streaming-iterator.spec.ts +254 -0
- package/src/node/openai-streaming-iterator.ts +124 -0
- package/lib/package.spec.d.ts +0 -1
- package/lib/package.spec.d.ts.map +0 -1
- package/lib/package.spec.js +0 -26
- package/lib/package.spec.js.map +0 -1
- package/src/package.spec.ts +0 -28
|
@@ -15,8 +15,11 @@
|
|
|
15
15
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
16
|
// *****************************************************************************
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.OpenAiModel = exports.OpenAiModelIdentifier = void 0;
|
|
18
|
+
exports.OpenAiModelUtils = exports.OpenAiModel = exports.OpenAiModelIdentifier = void 0;
|
|
19
|
+
const tslib_1 = require("tslib");
|
|
20
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
19
21
|
const openai_1 = require("openai");
|
|
22
|
+
const openai_streaming_iterator_1 = require("./openai-streaming-iterator");
|
|
20
23
|
exports.OpenAiModelIdentifier = Symbol('OpenAiModelIdentifier');
|
|
21
24
|
class OpenAiModel {
|
|
22
25
|
/**
|
|
@@ -25,18 +28,20 @@ class OpenAiModel {
|
|
|
25
28
|
* @param enableStreaming whether the streaming API shall be used
|
|
26
29
|
* @param apiKey a function that returns the API key to use for this model, called on each request
|
|
27
30
|
* @param apiVersion a function that returns the OpenAPI version to use for this model, called on each request
|
|
28
|
-
* @param
|
|
31
|
+
* @param developerMessageSettings how to handle system messages
|
|
29
32
|
* @param url the OpenAI API compatible endpoint where the model is hosted. If not provided the default OpenAI endpoint will be used.
|
|
30
33
|
* @param defaultRequestSettings optional default settings for requests made using this model.
|
|
31
34
|
*/
|
|
32
|
-
constructor(id, model, enableStreaming, apiKey, apiVersion,
|
|
35
|
+
constructor(id, model, enableStreaming, apiKey, apiVersion, supportsStructuredOutput, url, openAiModelUtils, developerMessageSettings = 'developer', defaultRequestSettings) {
|
|
33
36
|
this.id = id;
|
|
34
37
|
this.model = model;
|
|
35
38
|
this.enableStreaming = enableStreaming;
|
|
36
39
|
this.apiKey = apiKey;
|
|
37
40
|
this.apiVersion = apiVersion;
|
|
38
|
-
this.
|
|
41
|
+
this.supportsStructuredOutput = supportsStructuredOutput;
|
|
39
42
|
this.url = url;
|
|
43
|
+
this.openAiModelUtils = openAiModelUtils;
|
|
44
|
+
this.developerMessageSettings = developerMessageSettings;
|
|
40
45
|
this.defaultRequestSettings = defaultRequestSettings;
|
|
41
46
|
}
|
|
42
47
|
getSettings(request) {
|
|
@@ -50,12 +55,12 @@ class OpenAiModel {
|
|
|
50
55
|
var _a;
|
|
51
56
|
const settings = this.getSettings(request);
|
|
52
57
|
const openai = this.initializeOpenAi();
|
|
58
|
+
if (((_a = request.response_format) === null || _a === void 0 ? void 0 : _a.type) === 'json_schema' && this.supportsStructuredOutput) {
|
|
59
|
+
return this.handleStructuredOutputRequest(openai, request);
|
|
60
|
+
}
|
|
53
61
|
if (this.isNonStreamingModel(this.model) || (typeof settings.stream === 'boolean' && !settings.stream)) {
|
|
54
62
|
return this.handleNonStreamingRequest(openai, request);
|
|
55
63
|
}
|
|
56
|
-
if (((_a = request.response_format) === null || _a === void 0 ? void 0 : _a.type) === 'json_schema' && this.supportsStructuredOutput()) {
|
|
57
|
-
return this.handleStructuredOutputRequest(openai, request);
|
|
58
|
-
}
|
|
59
64
|
if (cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.isCancellationRequested) {
|
|
60
65
|
return { text: '' };
|
|
61
66
|
}
|
|
@@ -64,7 +69,7 @@ class OpenAiModel {
|
|
|
64
69
|
if (tools) {
|
|
65
70
|
runner = openai.beta.chat.completions.runTools({
|
|
66
71
|
model: this.model,
|
|
67
|
-
messages: request.messages
|
|
72
|
+
messages: this.processMessages(request.messages),
|
|
68
73
|
stream: true,
|
|
69
74
|
tools: tools,
|
|
70
75
|
tool_choice: 'auto',
|
|
@@ -74,80 +79,19 @@ class OpenAiModel {
|
|
|
74
79
|
else {
|
|
75
80
|
runner = openai.beta.chat.completions.stream({
|
|
76
81
|
model: this.model,
|
|
77
|
-
messages: request.messages
|
|
82
|
+
messages: this.processMessages(request.messages),
|
|
78
83
|
stream: true,
|
|
79
84
|
...settings
|
|
80
85
|
});
|
|
81
86
|
}
|
|
82
|
-
|
|
83
|
-
runner.abort();
|
|
84
|
-
});
|
|
85
|
-
let runnerEnd = false;
|
|
86
|
-
let resolve;
|
|
87
|
-
runner.on('error', error => {
|
|
88
|
-
console.error('Error in OpenAI chat completion stream:', error);
|
|
89
|
-
runnerEnd = true;
|
|
90
|
-
resolve === null || resolve === void 0 ? void 0 : resolve({ content: error.message });
|
|
91
|
-
});
|
|
92
|
-
// we need to also listen for the emitted errors, as otherwise any error actually thrown by the API will not be caught
|
|
93
|
-
runner.emitted('error').then(error => {
|
|
94
|
-
console.error('Error in OpenAI chat completion stream:', error);
|
|
95
|
-
runnerEnd = true;
|
|
96
|
-
resolve === null || resolve === void 0 ? void 0 : resolve({ content: error.message });
|
|
97
|
-
});
|
|
98
|
-
runner.emitted('abort').then(() => {
|
|
99
|
-
// cancel async iterator
|
|
100
|
-
runnerEnd = true;
|
|
101
|
-
});
|
|
102
|
-
runner.on('message', message => {
|
|
103
|
-
if (message.role === 'tool') {
|
|
104
|
-
resolve === null || resolve === void 0 ? void 0 : resolve({ tool_calls: [{ id: message.tool_call_id, finished: true, result: this.getCompletionContent(message) }] });
|
|
105
|
-
}
|
|
106
|
-
console.debug('Received Open AI message', JSON.stringify(message));
|
|
107
|
-
});
|
|
108
|
-
runner.once('end', () => {
|
|
109
|
-
runnerEnd = true;
|
|
110
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
111
|
-
resolve === null || resolve === void 0 ? void 0 : resolve(runner.finalChatCompletion);
|
|
112
|
-
});
|
|
113
|
-
if (cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.isCancellationRequested) {
|
|
114
|
-
return { text: '' };
|
|
115
|
-
}
|
|
116
|
-
const asyncIterator = {
|
|
117
|
-
async *[Symbol.asyncIterator]() {
|
|
118
|
-
runner.on('chunk', chunk => {
|
|
119
|
-
var _a, _b;
|
|
120
|
-
if (cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.isCancellationRequested) {
|
|
121
|
-
resolve = undefined;
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
if (resolve && ((_a = chunk.choices[0]) === null || _a === void 0 ? void 0 : _a.delta)) {
|
|
125
|
-
resolve({ ...(_b = chunk.choices[0]) === null || _b === void 0 ? void 0 : _b.delta });
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
while (!runnerEnd) {
|
|
129
|
-
if (cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.isCancellationRequested) {
|
|
130
|
-
throw new Error('Iterator canceled');
|
|
131
|
-
}
|
|
132
|
-
const promise = new Promise((res, rej) => {
|
|
133
|
-
resolve = res;
|
|
134
|
-
cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.onCancellationRequested(() => {
|
|
135
|
-
rej(new Error('Canceled'));
|
|
136
|
-
runnerEnd = true; // Stop the iterator
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
yield promise;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
return { stream: asyncIterator };
|
|
87
|
+
return { stream: new openai_streaming_iterator_1.StreamingAsyncIterator(runner, cancellationToken) };
|
|
144
88
|
}
|
|
145
89
|
async handleNonStreamingRequest(openai, request) {
|
|
146
90
|
var _a;
|
|
147
91
|
const settings = this.getSettings(request);
|
|
148
92
|
const response = await openai.chat.completions.create({
|
|
149
93
|
model: this.model,
|
|
150
|
-
messages: request.messages
|
|
94
|
+
messages: this.processMessages(request.messages),
|
|
151
95
|
...settings
|
|
152
96
|
});
|
|
153
97
|
const message = response.choices[0].message;
|
|
@@ -155,40 +99,16 @@ class OpenAiModel {
|
|
|
155
99
|
text: (_a = message.content) !== null && _a !== void 0 ? _a : ''
|
|
156
100
|
};
|
|
157
101
|
}
|
|
158
|
-
toOpenAIMessage(message) {
|
|
159
|
-
return {
|
|
160
|
-
role: this.toOpenAiRole(message),
|
|
161
|
-
content: message.query || ''
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
toOpenAiRole(message) {
|
|
165
|
-
switch (message.actor) {
|
|
166
|
-
case 'system':
|
|
167
|
-
return this.supportsDeveloperMessage ? 'developer' : 'user';
|
|
168
|
-
case 'ai':
|
|
169
|
-
return 'assistant';
|
|
170
|
-
default:
|
|
171
|
-
return 'user';
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
102
|
isNonStreamingModel(_model) {
|
|
175
103
|
return !this.enableStreaming;
|
|
176
104
|
}
|
|
177
|
-
supportsStructuredOutput() {
|
|
178
|
-
// see https://platform.openai.com/docs/models/gpt-4o
|
|
179
|
-
return [
|
|
180
|
-
'gpt-4o',
|
|
181
|
-
'gpt-4o-2024-08-06',
|
|
182
|
-
'gpt-4o-mini'
|
|
183
|
-
].includes(this.model);
|
|
184
|
-
}
|
|
185
105
|
async handleStructuredOutputRequest(openai, request) {
|
|
186
106
|
var _a;
|
|
187
107
|
const settings = this.getSettings(request);
|
|
188
108
|
// TODO implement tool support for structured output (parse() seems to require different tool format)
|
|
189
109
|
const result = await openai.beta.chat.completions.parse({
|
|
190
110
|
model: this.model,
|
|
191
|
-
messages: request.messages
|
|
111
|
+
messages: this.processMessages(request.messages),
|
|
192
112
|
response_format: request.response_format,
|
|
193
113
|
...settings
|
|
194
114
|
});
|
|
@@ -201,12 +121,6 @@ class OpenAiModel {
|
|
|
201
121
|
parsed: message.parsed
|
|
202
122
|
};
|
|
203
123
|
}
|
|
204
|
-
getCompletionContent(message) {
|
|
205
|
-
if (Array.isArray(message.content)) {
|
|
206
|
-
return message.content.join('');
|
|
207
|
-
}
|
|
208
|
-
return message.content;
|
|
209
|
-
}
|
|
210
124
|
createTools(request) {
|
|
211
125
|
var _a;
|
|
212
126
|
return (_a = request.tools) === null || _a === void 0 ? void 0 : _a.map(tool => ({
|
|
@@ -234,6 +148,82 @@ class OpenAiModel {
|
|
|
234
148
|
return new openai_1.OpenAI({ apiKey: apiKey !== null && apiKey !== void 0 ? apiKey : 'no-key', baseURL: this.url });
|
|
235
149
|
}
|
|
236
150
|
}
|
|
151
|
+
processMessages(messages) {
|
|
152
|
+
return this.openAiModelUtils.processMessages(messages, this.developerMessageSettings, this.model);
|
|
153
|
+
}
|
|
237
154
|
}
|
|
238
155
|
exports.OpenAiModel = OpenAiModel;
|
|
156
|
+
/**
|
|
157
|
+
* Utility class for processing messages for the OpenAI language model.
|
|
158
|
+
*
|
|
159
|
+
* Adopters can rebind this class to implement custom message processing behavior.
|
|
160
|
+
*/
|
|
161
|
+
let OpenAiModelUtils = class OpenAiModelUtils {
|
|
162
|
+
processSystemMessages(messages, developerMessageSettings) {
|
|
163
|
+
if (developerMessageSettings === 'skip') {
|
|
164
|
+
return messages.filter(message => message.actor !== 'system');
|
|
165
|
+
}
|
|
166
|
+
else if (developerMessageSettings === 'mergeWithFollowingUserMessage') {
|
|
167
|
+
const updated = messages.slice();
|
|
168
|
+
for (let i = updated.length - 1; i >= 0; i--) {
|
|
169
|
+
if (updated[i].actor === 'system') {
|
|
170
|
+
if (i + 1 < updated.length && updated[i + 1].actor === 'user') {
|
|
171
|
+
// Merge system message with the next user message
|
|
172
|
+
updated[i + 1] = {
|
|
173
|
+
...updated[i + 1],
|
|
174
|
+
query: updated[i].query + '\n' + updated[i + 1].query
|
|
175
|
+
};
|
|
176
|
+
updated.splice(i, 1);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
// The message directly after is not a user message (or none exists), so create a new user message right after
|
|
180
|
+
updated.splice(i + 1, 0, { actor: 'user', type: 'text', query: updated[i].query });
|
|
181
|
+
updated.splice(i, 1);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return updated;
|
|
186
|
+
}
|
|
187
|
+
return messages;
|
|
188
|
+
}
|
|
189
|
+
toOpenAiRole(message, developerMessageSettings) {
|
|
190
|
+
if (message.actor === 'system') {
|
|
191
|
+
if (developerMessageSettings === 'user' || developerMessageSettings === 'system' || developerMessageSettings === 'developer') {
|
|
192
|
+
return developerMessageSettings;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
return 'developer';
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else if (message.actor === 'ai') {
|
|
199
|
+
return 'assistant';
|
|
200
|
+
}
|
|
201
|
+
return 'user';
|
|
202
|
+
}
|
|
203
|
+
toOpenAIMessage(message, developerMessageSettings) {
|
|
204
|
+
return {
|
|
205
|
+
role: this.toOpenAiRole(message, developerMessageSettings),
|
|
206
|
+
content: message.query || ''
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Processes the provided list of messages by applying system message adjustments and converting
|
|
211
|
+
* them to the format expected by the OpenAI API.
|
|
212
|
+
*
|
|
213
|
+
* Adopters can rebind this processing to implement custom behavior.
|
|
214
|
+
*
|
|
215
|
+
* @param messages the list of messages to process.
|
|
216
|
+
* @param developerMessageSettings how system and developer messages are handled during processing.
|
|
217
|
+
* @param model the OpenAI model identifier. Currently not used, but allows subclasses to implement model-specific behavior.
|
|
218
|
+
* @returns an array of messages formatted for the OpenAI API.
|
|
219
|
+
*/
|
|
220
|
+
processMessages(messages, developerMessageSettings, model) {
|
|
221
|
+
const processed = this.processSystemMessages(messages, developerMessageSettings);
|
|
222
|
+
return processed.map(m => this.toOpenAIMessage(m, developerMessageSettings));
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
exports.OpenAiModelUtils = OpenAiModelUtils;
|
|
226
|
+
exports.OpenAiModelUtils = OpenAiModelUtils = tslib_1.__decorate([
|
|
227
|
+
(0, inversify_1.injectable)()
|
|
228
|
+
], OpenAiModelUtils);
|
|
239
229
|
//# sourceMappingURL=openai-language-model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-language-model.js","sourceRoot":"","sources":["../../src/node/openai-language-model.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF
|
|
1
|
+
{"version":3,"file":"openai-language-model.js","sourceRoot":"","sources":["../../src/node/openai-language-model.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAWhF,4DAA0D;AAC1D,mCAA6C;AAI7C,2EAAqE;AAExD,QAAA,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAIrE,MAAa,WAAW;IAEpB;;;;;;;;;OASG;IACH,YACoB,EAAU,EACnB,KAAa,EACb,eAAwB,EACxB,MAAgC,EAChC,UAAoC,EACpC,wBAAiC,EACjC,GAAuB,EACvB,gBAAkC,EAClC,2BAAqD,WAAW,EAChE,sBAAmD;QAT1C,OAAE,GAAF,EAAE,CAAQ;QACnB,UAAK,GAAL,KAAK,CAAQ;QACb,oBAAe,GAAf,eAAe,CAAS;QACxB,WAAM,GAAN,MAAM,CAA0B;QAChC,eAAU,GAAV,UAAU,CAA0B;QACpC,6BAAwB,GAAxB,wBAAwB,CAAS;QACjC,QAAG,GAAH,GAAG,CAAoB;QACvB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,6BAAwB,GAAxB,wBAAwB,CAAwC;QAChE,2BAAsB,GAAtB,sBAAsB,CAA6B;IAC1D,CAAC;IAEK,WAAW,CAAC,OAA6B;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACnF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA6B,EAAE,iBAAqC;;QAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEvC,IAAI,CAAA,MAAA,OAAO,CAAC,eAAe,0CAAE,IAAI,MAAK,aAAa,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACnF,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrG,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,uBAAuB,EAAE,CAAC;YAC7C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,MAA4B,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAChD,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,MAAM;gBACnB,GAAG,QAAQ;aACd,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACzC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAChD,MAAM,EAAE,IAAI;gBACZ,GAAG,QAAQ;aACd,CAAC,CAAC;QACP,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,IAAI,kDAAsB,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC;IAC7E,CAAC;IAES,KAAK,CAAC,yBAAyB,CAAC,MAAc,EAAE,OAA6B;;QACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAClD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;YAChD,GAAG,QAAQ;SACd,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAE5C,OAAO;YACH,IAAI,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,EAAE;SAC9B,CAAC;IACN,CAAC;IAES,mBAAmB,CAAC,MAAc;QACxC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;IACjC,CAAC;IAES,KAAK,CAAC,6BAA6B,CAAC,MAAc,EAAE,OAA6B;;QACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,qGAAqG;QACrG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACpD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;YAChD,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,GAAG,QAAQ;SACd,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1C,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,OAAO;YACH,OAAO,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,EAAE;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAC;IACN,CAAC;IAES,WAAW,CAAC,OAA6B;;QAC/C,OAAO,MAAA,OAAO,CAAC,KAAK,0CAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACN,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE,CAAC,WAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;aAC/D;SACiC,CAAA,CAAC,CAAC;IAC5C,CAAC;IAES,gBAAgB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAChG,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,IAAI,UAAU,EAAE,CAAC;YACb,gIAAgI;YAChI,OAAO,IAAI,oBAAW,CAAC,EAAE,MAAM,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QACtG,CAAC;aAAM,CAAC;YACJ,gIAAgI;YAChI,OAAO,IAAI,eAAM,CAAC,EAAE,MAAM,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACzE,CAAC;IACL,CAAC;IAES,eAAe,CAAC,QAAuC;QAC7D,OAAO,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACtG,CAAC;CACJ;AA5ID,kCA4IC;AAED;;;;GAIG;AAEI,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAEf,qBAAqB,CAC3B,QAAuC,EACvC,wBAAkD;QAElD,IAAI,wBAAwB,KAAK,MAAM,EAAE,CAAC;YACtC,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,wBAAwB,KAAK,+BAA+B,EAAE,CAAC;YACtE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAChC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;wBAC5D,kDAAkD;wBAClD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG;4BACb,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;4BACjB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;yBACxD,CAAC;wBACF,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzB,CAAC;yBAAM,CAAC;wBACJ,8GAA8G;wBAC9G,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;wBACnF,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzB,CAAC;gBACL,CAAC;YACL,CAAC;YACD,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAES,YAAY,CAClB,OAAoC,EACpC,wBAAkD;QAElD,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,wBAAwB,KAAK,MAAM,IAAI,wBAAwB,KAAK,QAAQ,IAAI,wBAAwB,KAAK,WAAW,EAAE,CAAC;gBAC3H,OAAO,wBAAwB,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACJ,OAAO,WAAW,CAAC;YACvB,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAChC,OAAO,WAAW,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAES,eAAe,CACrB,OAAoC,EACpC,wBAAkD;QAElD,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,wBAAwB,CAAC;YAC1D,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;SAC/B,CAAC;IACN,CAAC;IAED;;;;;;;;;;OAUG;IACH,eAAe,CACX,QAAuC,EACvC,wBAAkD,EAClD,KAAa;QAEb,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;QACjF,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC,CAAC;IACjF,CAAC;CACJ,CAAA;AA5EY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,sBAAU,GAAE;GACA,gBAAgB,CA4E5B"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { LanguageModelRegistry } from '@theia/ai-core';
|
|
2
|
+
import { OpenAiModelUtils } from './openai-language-model';
|
|
2
3
|
import { OpenAiLanguageModelsManager, OpenAiModelDescription } from '../common';
|
|
3
4
|
export declare class OpenAiLanguageModelsManagerImpl implements OpenAiLanguageModelsManager {
|
|
5
|
+
protected readonly openAiModelUtils: OpenAiModelUtils;
|
|
4
6
|
protected _apiKey: string | undefined;
|
|
5
7
|
protected _apiVersion: string | undefined;
|
|
6
8
|
protected readonly languageModelRegistry: LanguageModelRegistry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-language-models-manager-impl.d.ts","sourceRoot":"","sources":["../../src/node/openai-language-models-manager-impl.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"openai-language-models-manager-impl.d.ts","sourceRoot":"","sources":["../../src/node/openai-language-models-manager-impl.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAe,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEhF,qBACa,+BAAgC,YAAW,2BAA2B;IAG/E,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAEtD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAG1C,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAEhE,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAIK,4BAA4B,CAAC,GAAG,iBAAiB,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDjG,oBAAoB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAIjD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAQ3C,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAOtD"}
|
|
@@ -62,12 +62,13 @@ let OpenAiLanguageModelsManagerImpl = class OpenAiLanguageModelsManagerImpl {
|
|
|
62
62
|
model.url = modelDescription.url;
|
|
63
63
|
model.apiKey = apiKeyProvider;
|
|
64
64
|
model.apiVersion = apiVersionProvider;
|
|
65
|
-
model.
|
|
65
|
+
model.developerMessageSettings = modelDescription.developerMessageSettings || 'developer';
|
|
66
|
+
model.supportsStructuredOutput = modelDescription.supportsStructuredOutput;
|
|
66
67
|
model.defaultRequestSettings = modelDescription.defaultRequestSettings;
|
|
67
68
|
}
|
|
68
69
|
else {
|
|
69
70
|
this.languageModelRegistry.addLanguageModels([
|
|
70
|
-
new openai_language_model_1.OpenAiModel(modelDescription.id, modelDescription.model, modelDescription.enableStreaming, apiKeyProvider, apiVersionProvider, modelDescription.
|
|
71
|
+
new openai_language_model_1.OpenAiModel(modelDescription.id, modelDescription.model, modelDescription.enableStreaming, apiKeyProvider, apiVersionProvider, modelDescription.supportsStructuredOutput, modelDescription.url, this.openAiModelUtils, modelDescription.developerMessageSettings, modelDescription.defaultRequestSettings)
|
|
71
72
|
]);
|
|
72
73
|
}
|
|
73
74
|
}
|
|
@@ -93,6 +94,10 @@ let OpenAiLanguageModelsManagerImpl = class OpenAiLanguageModelsManagerImpl {
|
|
|
93
94
|
}
|
|
94
95
|
};
|
|
95
96
|
exports.OpenAiLanguageModelsManagerImpl = OpenAiLanguageModelsManagerImpl;
|
|
97
|
+
tslib_1.__decorate([
|
|
98
|
+
(0, inversify_1.inject)(openai_language_model_1.OpenAiModelUtils),
|
|
99
|
+
tslib_1.__metadata("design:type", openai_language_model_1.OpenAiModelUtils)
|
|
100
|
+
], OpenAiLanguageModelsManagerImpl.prototype, "openAiModelUtils", void 0);
|
|
96
101
|
tslib_1.__decorate([
|
|
97
102
|
(0, inversify_1.inject)(ai_core_1.LanguageModelRegistry),
|
|
98
103
|
tslib_1.__metadata("design:type", Object)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-language-models-manager-impl.js","sourceRoot":"","sources":["../../src/node/openai-language-models-manager-impl.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,4CAAuD;AACvD,4DAAkE;AAClE,
|
|
1
|
+
{"version":3,"file":"openai-language-models-manager-impl.js","sourceRoot":"","sources":["../../src/node/openai-language-models-manager-impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-model-utils.spec.d.ts","sourceRoot":"","sources":["../../src/node/openai-model-utils.spec.ts"],"names":[],"mappings":"AAeA,QAAA,MAAQ,MAAM,KAAoB,CAAC;AACnC,QAAA,MAAQ,gBAAgB,KAAuC,CAAC;AAChE,QAAA,MAAM,KAAK,KAAyB,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 EclipseSource GmbH.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
const { expect } = require('chai');
|
|
17
|
+
const { OpenAiModelUtils } = require('./openai-language-model');
|
|
18
|
+
const utils = new OpenAiModelUtils();
|
|
19
|
+
describe('OpenAiModelUtils - processMessages', () => {
|
|
20
|
+
describe("when developerMessageSettings is 'skip'", () => {
|
|
21
|
+
it('should remove all system messages', () => {
|
|
22
|
+
const messages = [
|
|
23
|
+
{ actor: 'system', type: 'text', query: 'system message' },
|
|
24
|
+
{ actor: 'user', type: 'text', query: 'user message' },
|
|
25
|
+
{ actor: 'system', type: 'text', query: 'another system message' },
|
|
26
|
+
];
|
|
27
|
+
const result = utils.processMessages(messages, 'skip');
|
|
28
|
+
expect(result).to.deep.equal([
|
|
29
|
+
{ role: 'user', content: 'user message' }
|
|
30
|
+
]);
|
|
31
|
+
});
|
|
32
|
+
it('should do nothing if there is no system message', () => {
|
|
33
|
+
const messages = [
|
|
34
|
+
{ actor: 'user', type: 'text', query: 'user message' },
|
|
35
|
+
{ actor: 'user', type: 'text', query: 'another user message' },
|
|
36
|
+
{ actor: 'ai', type: 'text', query: 'ai message' }
|
|
37
|
+
];
|
|
38
|
+
const result = utils.processMessages(messages, 'skip');
|
|
39
|
+
expect(result).to.deep.equal([
|
|
40
|
+
{ role: 'user', content: 'user message' },
|
|
41
|
+
{ role: 'user', content: 'another user message' },
|
|
42
|
+
{ role: 'assistant', content: 'ai message' }
|
|
43
|
+
]);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe("when developerMessageSettings is 'mergeWithFollowingUserMessage'", () => {
|
|
47
|
+
it('should merge the system message with the next user message, assign role user, and remove the system message', () => {
|
|
48
|
+
const messages = [
|
|
49
|
+
{ actor: 'system', type: 'text', query: 'system msg' },
|
|
50
|
+
{ actor: 'user', type: 'text', query: 'user msg' },
|
|
51
|
+
{ actor: 'ai', type: 'text', query: 'ai message' }
|
|
52
|
+
];
|
|
53
|
+
const result = utils.processMessages(messages, 'mergeWithFollowingUserMessage');
|
|
54
|
+
expect(result).to.deep.equal([
|
|
55
|
+
{ role: 'user', content: 'system msg\nuser msg' },
|
|
56
|
+
{ role: 'assistant', content: 'ai message' }
|
|
57
|
+
]);
|
|
58
|
+
});
|
|
59
|
+
it('should create a new user message if no user message exists, and remove the system message', () => {
|
|
60
|
+
const messages = [
|
|
61
|
+
{ actor: 'system', type: 'text', query: 'system only msg' },
|
|
62
|
+
{ actor: 'ai', type: 'text', query: 'ai message' }
|
|
63
|
+
];
|
|
64
|
+
const result = utils.processMessages(messages, 'mergeWithFollowingUserMessage');
|
|
65
|
+
expect(result).to.deep.equal([
|
|
66
|
+
{ role: 'user', content: 'system only msg' },
|
|
67
|
+
{ role: 'assistant', content: 'ai message' }
|
|
68
|
+
]);
|
|
69
|
+
});
|
|
70
|
+
it('should create a merge multiple system message with the next user message', () => {
|
|
71
|
+
const messages = [
|
|
72
|
+
{ actor: 'user', type: 'text', query: 'user message' },
|
|
73
|
+
{ actor: 'system', type: 'text', query: 'system message' },
|
|
74
|
+
{ actor: 'system', type: 'text', query: 'system message2' },
|
|
75
|
+
{ actor: 'user', type: 'text', query: 'user message2' },
|
|
76
|
+
{ actor: 'ai', type: 'text', query: 'ai message' }
|
|
77
|
+
];
|
|
78
|
+
const result = utils.processMessages(messages, 'mergeWithFollowingUserMessage');
|
|
79
|
+
expect(result).to.deep.equal([
|
|
80
|
+
{ role: 'user', content: 'user message' },
|
|
81
|
+
{ role: 'user', content: 'system message\nsystem message2\nuser message2' },
|
|
82
|
+
{ role: 'assistant', content: 'ai message' }
|
|
83
|
+
]);
|
|
84
|
+
});
|
|
85
|
+
it('should create a new user message from several system messages if the next message is not a user message', () => {
|
|
86
|
+
const messages = [
|
|
87
|
+
{ actor: 'user', type: 'text', query: 'user message' },
|
|
88
|
+
{ actor: 'system', type: 'text', query: 'system message' },
|
|
89
|
+
{ actor: 'system', type: 'text', query: 'system message2' },
|
|
90
|
+
{ actor: 'ai', type: 'text', query: 'ai message' }
|
|
91
|
+
];
|
|
92
|
+
const result = utils.processMessages(messages, 'mergeWithFollowingUserMessage');
|
|
93
|
+
expect(result).to.deep.equal([
|
|
94
|
+
{ role: 'user', content: 'user message' },
|
|
95
|
+
{ role: 'user', content: 'system message\nsystem message2' },
|
|
96
|
+
{ role: 'assistant', content: 'ai message' }
|
|
97
|
+
]);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('when no special merging or skipping is needed', () => {
|
|
101
|
+
it('should leave messages unchanged in ordering and assign roles based on developerMessageSettings', () => {
|
|
102
|
+
const messages = [
|
|
103
|
+
{ actor: 'user', type: 'text', query: 'user message' },
|
|
104
|
+
{ actor: 'system', type: 'text', query: 'system message' },
|
|
105
|
+
{ actor: 'ai', type: 'text', query: 'ai message' }
|
|
106
|
+
];
|
|
107
|
+
// Using a developerMessageSettings that is not merge/skip, e.g., 'developer'
|
|
108
|
+
const result = utils.processMessages(messages, 'developer');
|
|
109
|
+
expect(result).to.deep.equal([
|
|
110
|
+
{ role: 'user', content: 'user message' },
|
|
111
|
+
{ role: 'developer', content: 'system message' },
|
|
112
|
+
{ role: 'assistant', content: 'ai message' }
|
|
113
|
+
]);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
describe('role assignment for system messages when developerMessageSettings is one of the role strings', () => {
|
|
117
|
+
it('should assign role as specified for a system message when developerMessageSettings is "user"', () => {
|
|
118
|
+
const messages = [
|
|
119
|
+
{ actor: 'system', type: 'text', query: 'system msg' },
|
|
120
|
+
{ actor: 'ai', type: 'text', query: 'ai msg' }
|
|
121
|
+
];
|
|
122
|
+
// Since the first message is system and developerMessageSettings is not merge/skip, ordering is not adjusted
|
|
123
|
+
const result = utils.processMessages(messages, 'user');
|
|
124
|
+
expect(result).to.deep.equal([
|
|
125
|
+
{ role: 'user', content: 'system msg' },
|
|
126
|
+
{ role: 'assistant', content: 'ai msg' }
|
|
127
|
+
]);
|
|
128
|
+
});
|
|
129
|
+
it('should assign role as specified for a system message when developerMessageSettings is "system"', () => {
|
|
130
|
+
const messages = [
|
|
131
|
+
{ actor: 'system', type: 'text', query: 'system msg' },
|
|
132
|
+
{ actor: 'ai', type: 'text', query: 'ai msg' }
|
|
133
|
+
];
|
|
134
|
+
const result = utils.processMessages(messages, 'system');
|
|
135
|
+
expect(result).to.deep.equal([
|
|
136
|
+
{ role: 'system', content: 'system msg' },
|
|
137
|
+
{ role: 'assistant', content: 'ai msg' }
|
|
138
|
+
]);
|
|
139
|
+
});
|
|
140
|
+
it('should assign role as specified for a system message when developerMessageSettings is "developer"', () => {
|
|
141
|
+
const messages = [
|
|
142
|
+
{ actor: 'system', type: 'text', query: 'system msg' },
|
|
143
|
+
{ actor: 'user', type: 'text', query: 'user msg' },
|
|
144
|
+
{ actor: 'ai', type: 'text', query: 'ai msg' }
|
|
145
|
+
];
|
|
146
|
+
const result = utils.processMessages(messages, 'developer');
|
|
147
|
+
expect(result).to.deep.equal([
|
|
148
|
+
{ role: 'developer', content: 'system msg' },
|
|
149
|
+
{ role: 'user', content: 'user msg' },
|
|
150
|
+
{ role: 'assistant', content: 'ai msg' }
|
|
151
|
+
]);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=openai-model-utils.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-model-utils.spec.js","sourceRoot":"","sources":["../../src/node/openai-model-utils.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { LanguageModelStreamResponsePart } from '@theia/ai-core';
|
|
2
|
+
import { CancellationToken, Disposable, DisposableCollection } from '@theia/core';
|
|
3
|
+
import { Deferred } from '@theia/core/lib/common/promise-util';
|
|
4
|
+
import { ChatCompletionStream, ChatCompletionStreamEvents } from 'openai/lib/ChatCompletionStream';
|
|
5
|
+
type IterResult = IteratorResult<LanguageModelStreamResponsePart>;
|
|
6
|
+
export declare class StreamingAsyncIterator implements AsyncIterableIterator<LanguageModelStreamResponsePart>, Disposable {
|
|
7
|
+
protected readonly stream: ChatCompletionStream;
|
|
8
|
+
protected readonly requestQueue: Deferred<IterResult>[];
|
|
9
|
+
protected readonly messageCache: LanguageModelStreamResponsePart[];
|
|
10
|
+
protected done: boolean;
|
|
11
|
+
protected terminalError: Error | undefined;
|
|
12
|
+
protected readonly toDispose: DisposableCollection;
|
|
13
|
+
constructor(stream: ChatCompletionStream, cancellationToken?: CancellationToken);
|
|
14
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<LanguageModelStreamResponsePart>;
|
|
15
|
+
next(): Promise<IterResult>;
|
|
16
|
+
protected handleIncoming(message: LanguageModelStreamResponsePart): void;
|
|
17
|
+
protected registerStreamListener<Event extends keyof ChatCompletionStreamEvents>(eventType: Event, handler: ChatCompletionStreamEvents[Event], once?: boolean): void;
|
|
18
|
+
dispose(): void;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=openai-streaming-iterator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-streaming-iterator.d.ts","sourceRoot":"","sources":["../../src/node/openai-streaming-iterator.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAqB,iBAAiB,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAEnG,KAAK,UAAU,GAAG,cAAc,CAAC,+BAA+B,CAAC,CAAC;AAElE,qBAAa,sBAAuB,YAAW,qBAAqB,CAAC,+BAA+B,CAAC,EAAE,UAAU;IAMjG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB;IAL3D,SAAS,CAAC,QAAQ,CAAC,YAAY,yBAAqC;IACpE,SAAS,CAAC,QAAQ,CAAC,YAAY,oCAAgD;IAC/E,SAAS,CAAC,IAAI,UAAS;IACvB,SAAS,CAAC,aAAa,EAAE,KAAK,GAAG,SAAS,CAAa;IACvD,SAAS,CAAC,QAAQ,CAAC,SAAS,uBAA8B;gBAC3B,MAAM,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,EAAE,iBAAiB;IAiClG,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,+BAA+B,CAAC;IAEhF,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAwB3B,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,+BAA+B,GAAG,IAAI;IAcxE,SAAS,CAAC,sBAAsB,CAAC,KAAK,SAAS,MAAM,0BAA0B,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IASpK,OAAO,IAAI,IAAI;CAYlB"}
|