@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.
Files changed (47) hide show
  1. package/README.md +11 -9
  2. package/lib/browser/openai-frontend-application-contribution.d.ts.map +1 -1
  3. package/lib/browser/openai-frontend-application-contribution.js +11 -7
  4. package/lib/browser/openai-frontend-application-contribution.js.map +1 -1
  5. package/lib/browser/openai-preferences.d.ts.map +1 -1
  6. package/lib/browser/openai-preferences.js +29 -15
  7. package/lib/browser/openai-preferences.js.map +1 -1
  8. package/lib/common/openai-language-models-manager.d.ts +9 -2
  9. package/lib/common/openai-language-models-manager.d.ts.map +1 -1
  10. package/lib/node/openai-backend-module.d.ts.map +1 -1
  11. package/lib/node/openai-backend-module.js +2 -0
  12. package/lib/node/openai-backend-module.js.map +1 -1
  13. package/lib/node/openai-language-model.d.ts +29 -7
  14. package/lib/node/openai-language-model.d.ts.map +1 -1
  15. package/lib/node/openai-language-model.js +93 -103
  16. package/lib/node/openai-language-model.js.map +1 -1
  17. package/lib/node/openai-language-models-manager-impl.d.ts +2 -0
  18. package/lib/node/openai-language-models-manager-impl.d.ts.map +1 -1
  19. package/lib/node/openai-language-models-manager-impl.js +7 -2
  20. package/lib/node/openai-language-models-manager-impl.js.map +1 -1
  21. package/lib/node/openai-model-utils.spec.d.ts +4 -0
  22. package/lib/node/openai-model-utils.spec.d.ts.map +1 -0
  23. package/lib/node/openai-model-utils.spec.js +155 -0
  24. package/lib/node/openai-model-utils.spec.js.map +1 -0
  25. package/lib/node/openai-streaming-iterator.d.ts +21 -0
  26. package/lib/node/openai-streaming-iterator.d.ts.map +1 -0
  27. package/lib/node/openai-streaming-iterator.js +126 -0
  28. package/lib/node/openai-streaming-iterator.js.map +1 -0
  29. package/lib/node/openai-streaming-iterator.spec.d.ts +2 -0
  30. package/lib/node/openai-streaming-iterator.spec.d.ts.map +1 -0
  31. package/lib/node/openai-streaming-iterator.spec.js +208 -0
  32. package/lib/node/openai-streaming-iterator.spec.js.map +1 -0
  33. package/package.json +7 -7
  34. package/src/browser/openai-frontend-application-contribution.ts +9 -5
  35. package/src/browser/openai-preferences.ts +36 -15
  36. package/src/common/openai-language-models-manager.ts +10 -2
  37. package/src/node/openai-backend-module.ts +2 -0
  38. package/src/node/openai-language-model.ts +106 -108
  39. package/src/node/openai-language-models-manager-impl.ts +9 -3
  40. package/src/node/openai-model-utils.spec.ts +164 -0
  41. package/src/node/openai-streaming-iterator.spec.ts +254 -0
  42. package/src/node/openai-streaming-iterator.ts +124 -0
  43. package/lib/package.spec.d.ts +0 -1
  44. package/lib/package.spec.d.ts.map +0 -1
  45. package/lib/package.spec.js +0 -26
  46. package/lib/package.spec.js.map +0 -1
  47. 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 supportsDeveloperMessage whether the model supports the `developer` role
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, supportsDeveloperMessage, url, defaultRequestSettings) {
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.supportsDeveloperMessage = supportsDeveloperMessage;
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.map(this.toOpenAIMessage.bind(this)),
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.map(this.toOpenAIMessage.bind(this)),
82
+ messages: this.processMessages(request.messages),
78
83
  stream: true,
79
84
  ...settings
80
85
  });
81
86
  }
82
- cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.onCancellationRequested(() => {
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.map(this.toOpenAIMessage.bind(this)),
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.map(this.toOpenAIMessage.bind(this)),
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;;;AAYhF,mCAA6C;AAKhC,QAAA,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAErE,MAAa,WAAW;IAEpB;;;;;;;;;OASG;IACH,YACoB,EAAU,EACnB,KAAa,EACb,eAAwB,EACxB,MAAgC,EAChC,UAAoC,EACpC,wBAAiC,EACjC,GAAuB,EACvB,sBAAmD;QAP1C,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,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,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,CAAA,MAAA,OAAO,CAAC,eAAe,0CAAE,IAAI,MAAK,aAAa,IAAI,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC;YACrF,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,uBAAuB,EAAE,CAAC;YAC7C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC;QAED,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,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/D,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,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/D,MAAM,EAAE,IAAI;gBACZ,GAAG,QAAQ;aACd,CAAC,CAAC;QACP,CAAC;QACD,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,uBAAuB,CAAC,GAAG,EAAE;YAC5C,MAAM,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,OAAsE,CAAC;QAC3E,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACvB,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAChE,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,sHAAsH;QACtH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACjC,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAChE,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAC9B,wBAAwB;YACxB,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;YAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1H,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;YACpB,SAAS,GAAG,IAAI,CAAC;YACjB,8DAA8D;YAC9D,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,MAAM,CAAC,mBAA0B,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,IAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,uBAAuB,EAAE,CAAC;YAC7C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC;QACD,MAAM,aAAa,GAAG;YAClB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;gBACzB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;;oBACvB,IAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,uBAAuB,EAAE,CAAC;wBAC7C,OAAO,GAAG,SAAS,CAAC;wBACpB,OAAO;oBACX,CAAC;oBACD,IAAI,OAAO,KAAI,MAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAA,EAAE,CAAC;wBACrC,OAAO,CAAC,EAAE,GAAG,MAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0CAAE,KAAK,EAAE,CAAC,CAAC;oBAC5C,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,SAAS,EAAE,CAAC;oBAChB,IAAI,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,uBAAuB,EAAE,CAAC;wBAC7C,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;oBACzC,CAAC;oBACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAkC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;wBACtE,OAAO,GAAG,GAAG,CAAC;wBACd,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,uBAAuB,CAAC,GAAG,EAAE;4BAC5C,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;4BAC3B,SAAS,GAAG,IAAI,CAAC,CAAC,oBAAoB;wBAC1C,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;oBACH,MAAM,OAAO,CAAC;gBAClB,CAAC;YACL,CAAC;SACJ,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACrC,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,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,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,eAAe,CAAC,OAAoC;QAC1D,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAChC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;SAC/B,CAAC;IACN,CAAC;IAES,YAAY,CAAC,OAAoC;QACvD,QAAQ,OAAO,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,QAAQ;gBACT,OAAO,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;YAChE,KAAK,IAAI;gBACL,OAAO,WAAW,CAAC;YACvB;gBACI,OAAO,MAAM,CAAC;QACtB,CAAC;IACL,CAAC;IAES,mBAAmB,CAAC,MAAc;QACxC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;IACjC,CAAC;IAES,wBAAwB;QAC9B,qDAAqD;QACrD,OAAO;YACH,QAAQ;YACR,mBAAmB;YACnB,aAAa;SAChB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,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,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,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;IAEO,oBAAoB,CAAC,OAA+D;QACxF,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC;IAC3B,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;CACJ;AArOD,kCAqOC"}
1
+ {"version":3,"file":"openai-language-model.js","sourceRoot":"","sources":["../../src/node/openai-language-model.ts"],"names":[],"mappings":"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"}
@@ -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;AAGvD,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEhF,qBACa,+BAAgC,YAAW,2BAA2B;IAE/E,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;IAmDjG,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"}
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.supportsDeveloperMessage = modelDescription.supportsDeveloperMessage;
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.supportsDeveloperMessage, modelDescription.url, modelDescription.defaultRequestSettings)
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":"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"}
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,4 @@
1
+ declare const expect: any;
2
+ declare const OpenAiModelUtils: any;
3
+ declare const utils: any;
4
+ //# sourceMappingURL=openai-model-utils.spec.d.ts.map
@@ -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":"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;AAChF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACnC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAChE,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAErC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAChD,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACrD,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YACzC,MAAM,QAAQ,GAAG;gBACb,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE;gBAC1D,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE;gBACtD,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE;aACrE,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;aAC5C,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACvD,MAAM,QAAQ,GAAG;gBACb,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE;gBACtD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE;gBAC9D,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;aACrD,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE;gBACjD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE;aAC/C,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC9E,EAAE,CAAC,6GAA6G,EAAE,GAAG,EAAE;YACnH,MAAM,QAAQ,GAAG;gBACb,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;gBACtD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;gBAClD,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;aACrD,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;YAChF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE;gBACjD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE;aAC/C,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2FAA2F,EAAE,GAAG,EAAE;YACjG,MAAM,QAAQ,GAAG;gBACb,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE;gBAC3D,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;aACrD,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;YAChF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE;gBAC5C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE;aAC/C,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;YAChF,MAAM,QAAQ,GAAG;gBACb,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE;gBACtD,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE;gBAC1D,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE;gBAC3D,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE;gBACvD,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;aACrD,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;YAChF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gDAAgD,EAAE;gBAC3E,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE;aAC/C,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yGAAyG,EAAE,GAAG,EAAE;YAC/G,MAAM,QAAQ,GAAG;gBACb,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE;gBACtD,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE;gBAC1D,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE;gBAC3D,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;aACrD,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;YAChF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iCAAiC,EAAE;gBAC5D,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE;aAC/C,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;QAC3D,EAAE,CAAC,gGAAgG,EAAE,GAAG,EAAE;YACtG,MAAM,QAAQ,GAAG;gBACb,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE;gBACtD,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE;gBAC1D,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;aACrD,CAAC;YACF,6EAA6E;YAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE;gBACzC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE;gBAChD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE;aAC/C,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8FAA8F,EAAE,GAAG,EAAE;QAC1G,EAAE,CAAC,8FAA8F,EAAE,GAAG,EAAE;YACpG,MAAM,QAAQ,GAAG;gBACb,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;gBACtD,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE;aACjD,CAAC;YACF,6GAA6G;YAC7G,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE;gBACvC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;aAC3C,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gGAAgG,EAAE,GAAG,EAAE;YACtG,MAAM,QAAQ,GAAG;gBACb,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;gBACtD,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE;aACjD,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;gBACzC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;aAC3C,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mGAAmG,EAAE,GAAG,EAAE;YACzG,MAAM,QAAQ,GAAG;gBACb,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;gBACtD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;gBAClD,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE;aACjD,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE;gBAC5C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;gBACrC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;aAC3C,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -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"}