@theia/ai-openai 1.55.1 → 1.57.0-next.112

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 (28) hide show
  1. package/README.md +56 -1
  2. package/lib/browser/openai-frontend-application-contribution.d.ts +8 -0
  3. package/lib/browser/openai-frontend-application-contribution.d.ts.map +1 -1
  4. package/lib/browser/openai-frontend-application-contribution.js +93 -39
  5. package/lib/browser/openai-frontend-application-contribution.js.map +1 -1
  6. package/lib/browser/openai-preferences.d.ts.map +1 -1
  7. package/lib/browser/openai-preferences.js +25 -1
  8. package/lib/browser/openai-preferences.js.map +1 -1
  9. package/lib/common/openai-language-models-manager.d.ts +23 -0
  10. package/lib/common/openai-language-models-manager.d.ts.map +1 -1
  11. package/lib/node/openai-backend-module.d.ts.map +1 -1
  12. package/lib/node/openai-backend-module.js +6 -1
  13. package/lib/node/openai-backend-module.js.map +1 -1
  14. package/lib/node/openai-language-model.d.ts +23 -6
  15. package/lib/node/openai-language-model.d.ts.map +1 -1
  16. package/lib/node/openai-language-model.js +83 -46
  17. package/lib/node/openai-language-model.js.map +1 -1
  18. package/lib/node/openai-language-models-manager-impl.d.ts +3 -0
  19. package/lib/node/openai-language-models-manager-impl.d.ts.map +1 -1
  20. package/lib/node/openai-language-models-manager-impl.js +31 -8
  21. package/lib/node/openai-language-models-manager-impl.js.map +1 -1
  22. package/package.json +8 -8
  23. package/src/browser/openai-frontend-application-contribution.ts +116 -43
  24. package/src/browser/openai-preferences.ts +25 -1
  25. package/src/common/openai-language-models-manager.ts +21 -0
  26. package/src/node/openai-backend-module.ts +7 -1
  27. package/src/node/openai-language-model.ts +93 -50
  28. package/src/node/openai-language-models-manager-impl.ts +43 -8
@@ -18,61 +18,66 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.OpenAiModel = exports.OpenAiModelIdentifier = void 0;
19
19
  const openai_1 = require("openai");
20
20
  exports.OpenAiModelIdentifier = Symbol('OpenAiModelIdentifier');
21
- function toOpenAIMessage(message) {
22
- return {
23
- role: toOpenAiRole(message),
24
- content: message.query || ''
25
- };
26
- }
27
- function toOpenAiRole(message) {
28
- switch (message.actor) {
29
- case 'system':
30
- return 'system';
31
- case 'ai':
32
- return 'assistant';
33
- default:
34
- return 'user';
35
- }
36
- }
37
21
  class OpenAiModel {
38
22
  /**
39
23
  * @param id the unique id for this language model. It will be used to identify the model in the UI.
40
24
  * @param model the model id as it is used by the OpenAI API
41
- * @param openAIInitializer initializer for the OpenAI client, used for each request.
25
+ * @param enableStreaming whether the streaming API shall be used
26
+ * @param apiKey a function that returns the API key to use for this model, called on each request
27
+ * @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
29
+ * @param url the OpenAI API compatible endpoint where the model is hosted. If not provided the default OpenAI endpoint will be used.
30
+ * @param defaultRequestSettings optional default settings for requests made using this model.
42
31
  */
43
- constructor(id, model, apiKey, url) {
32
+ constructor(id, model, enableStreaming, apiKey, apiVersion, supportsDeveloperMessage, supportsStructuredOutput, url, defaultRequestSettings) {
44
33
  this.id = id;
45
34
  this.model = model;
35
+ this.enableStreaming = enableStreaming;
46
36
  this.apiKey = apiKey;
37
+ this.apiVersion = apiVersion;
38
+ this.supportsDeveloperMessage = supportsDeveloperMessage;
39
+ this.supportsStructuredOutput = supportsStructuredOutput;
47
40
  this.url = url;
41
+ this.defaultRequestSettings = defaultRequestSettings;
42
+ }
43
+ getSettings(request) {
44
+ const settings = request.settings ? request.settings : this.defaultRequestSettings;
45
+ if (!settings) {
46
+ return {};
47
+ }
48
+ return settings;
48
49
  }
49
50
  async request(request, cancellationToken) {
50
51
  var _a;
52
+ const settings = this.getSettings(request);
51
53
  const openai = this.initializeOpenAi();
52
- if (this.isNonStreamingModel(this.model)) {
54
+ if (((_a = request.response_format) === null || _a === void 0 ? void 0 : _a.type) === 'json_schema' && this.supportsStructuredOutput) {
55
+ return this.handleStructuredOutputRequest(openai, request);
56
+ }
57
+ if (this.isNonStreamingModel(this.model) || (typeof settings.stream === 'boolean' && !settings.stream)) {
53
58
  return this.handleNonStreamingRequest(openai, request);
54
59
  }
55
- if (((_a = request.response_format) === null || _a === void 0 ? void 0 : _a.type) === 'json_schema' && this.supportsStructuredOutput()) {
56
- return this.handleStructuredOutputRequest(openai, request);
60
+ if (cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.isCancellationRequested) {
61
+ return { text: '' };
57
62
  }
58
63
  let runner;
59
64
  const tools = this.createTools(request);
60
65
  if (tools) {
61
66
  runner = openai.beta.chat.completions.runTools({
62
67
  model: this.model,
63
- messages: request.messages.map(toOpenAIMessage),
68
+ messages: request.messages.map(this.toOpenAIMessage.bind(this)),
64
69
  stream: true,
65
70
  tools: tools,
66
71
  tool_choice: 'auto',
67
- ...request.settings
72
+ ...settings
68
73
  });
69
74
  }
70
75
  else {
71
76
  runner = openai.beta.chat.completions.stream({
72
77
  model: this.model,
73
- messages: request.messages.map(toOpenAIMessage),
78
+ messages: request.messages.map(this.toOpenAIMessage.bind(this)),
74
79
  stream: true,
75
- ...request.settings
80
+ ...settings
76
81
  });
77
82
  }
78
83
  cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.onCancellationRequested(() => {
@@ -83,39 +88,54 @@ class OpenAiModel {
83
88
  runner.on('error', error => {
84
89
  console.error('Error in OpenAI chat completion stream:', error);
85
90
  runnerEnd = true;
86
- resolve({ content: error.message });
91
+ resolve === null || resolve === void 0 ? void 0 : resolve({ content: error.message });
87
92
  });
88
93
  // we need to also listen for the emitted errors, as otherwise any error actually thrown by the API will not be caught
89
94
  runner.emitted('error').then(error => {
90
95
  console.error('Error in OpenAI chat completion stream:', error);
91
96
  runnerEnd = true;
92
- resolve({ content: error.message });
97
+ resolve === null || resolve === void 0 ? void 0 : resolve({ content: error.message });
93
98
  });
94
99
  runner.emitted('abort').then(() => {
95
- // do nothing, as the abort event is only emitted when the runner is aborted by us
100
+ // cancel async iterator
101
+ runnerEnd = true;
96
102
  });
97
103
  runner.on('message', message => {
98
104
  if (message.role === 'tool') {
99
- resolve({ tool_calls: [{ id: message.tool_call_id, finished: true, result: this.getCompletionContent(message) }] });
105
+ resolve === null || resolve === void 0 ? void 0 : resolve({ tool_calls: [{ id: message.tool_call_id, finished: true, result: this.getCompletionContent(message) }] });
100
106
  }
101
107
  console.debug('Received Open AI message', JSON.stringify(message));
102
108
  });
103
109
  runner.once('end', () => {
104
110
  runnerEnd = true;
105
111
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
- resolve(runner.finalChatCompletion);
112
+ resolve === null || resolve === void 0 ? void 0 : resolve(runner.finalChatCompletion);
107
113
  });
114
+ if (cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.isCancellationRequested) {
115
+ return { text: '' };
116
+ }
108
117
  const asyncIterator = {
109
118
  async *[Symbol.asyncIterator]() {
110
119
  runner.on('chunk', chunk => {
111
120
  var _a, _b;
112
- if ((_a = chunk.choices[0]) === null || _a === void 0 ? void 0 : _a.delta) {
121
+ if (cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.isCancellationRequested) {
122
+ resolve = undefined;
123
+ return;
124
+ }
125
+ if (resolve && ((_a = chunk.choices[0]) === null || _a === void 0 ? void 0 : _a.delta)) {
113
126
  resolve({ ...(_b = chunk.choices[0]) === null || _b === void 0 ? void 0 : _b.delta });
114
127
  }
115
128
  });
116
129
  while (!runnerEnd) {
130
+ if (cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.isCancellationRequested) {
131
+ throw new Error('Iterator canceled');
132
+ }
117
133
  const promise = new Promise((res, rej) => {
118
134
  resolve = res;
135
+ cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.onCancellationRequested(() => {
136
+ rej(new Error('Canceled'));
137
+ runnerEnd = true; // Stop the iterator
138
+ });
119
139
  });
120
140
  yield promise;
121
141
  }
@@ -125,35 +145,45 @@ class OpenAiModel {
125
145
  }
126
146
  async handleNonStreamingRequest(openai, request) {
127
147
  var _a;
148
+ const settings = this.getSettings(request);
128
149
  const response = await openai.chat.completions.create({
129
150
  model: this.model,
130
- messages: request.messages.map(toOpenAIMessage),
131
- ...request.settings
151
+ messages: request.messages.map(this.toOpenAIMessage.bind(this)),
152
+ ...settings
132
153
  });
133
154
  const message = response.choices[0].message;
134
155
  return {
135
156
  text: (_a = message.content) !== null && _a !== void 0 ? _a : ''
136
157
  };
137
158
  }
138
- isNonStreamingModel(model) {
139
- return ['o1-preview'].includes(model);
159
+ toOpenAIMessage(message) {
160
+ return {
161
+ role: this.toOpenAiRole(message),
162
+ content: message.query || ''
163
+ };
140
164
  }
141
- supportsStructuredOutput() {
142
- // see https://platform.openai.com/docs/models/gpt-4o
143
- return [
144
- 'gpt-4o',
145
- 'gpt-4o-2024-08-06',
146
- 'gpt-4o-mini'
147
- ].includes(this.model);
165
+ toOpenAiRole(message) {
166
+ switch (message.actor) {
167
+ case 'system':
168
+ return this.supportsDeveloperMessage ? 'developer' : 'user';
169
+ case 'ai':
170
+ return 'assistant';
171
+ default:
172
+ return 'user';
173
+ }
174
+ }
175
+ isNonStreamingModel(_model) {
176
+ return !this.enableStreaming;
148
177
  }
149
178
  async handleStructuredOutputRequest(openai, request) {
150
179
  var _a;
180
+ const settings = this.getSettings(request);
151
181
  // TODO implement tool support for structured output (parse() seems to require different tool format)
152
182
  const result = await openai.beta.chat.completions.parse({
153
183
  model: this.model,
154
- messages: request.messages.map(toOpenAIMessage),
184
+ messages: request.messages.map(this.toOpenAIMessage.bind(this)),
155
185
  response_format: request.response_format,
156
- ...request.settings
186
+ ...settings
157
187
  });
158
188
  const message = result.choices[0].message;
159
189
  if (message.refusal || message.parsed === undefined) {
@@ -187,8 +217,15 @@ class OpenAiModel {
187
217
  if (!apiKey && !(this.url)) {
188
218
  throw new Error('Please provide OPENAI_API_KEY in preferences or via environment variable');
189
219
  }
190
- // We need to hand over "some" key, even if a custom url is not key protected as otherwise the OpenAI client will throw an error
191
- return new openai_1.default({ apiKey: apiKey !== null && apiKey !== void 0 ? apiKey : 'no-key', baseURL: this.url });
220
+ const apiVersion = this.apiVersion();
221
+ if (apiVersion) {
222
+ // We need to hand over "some" key, even if a custom url is not key protected as otherwise the OpenAI client will throw an error
223
+ return new openai_1.AzureOpenAI({ apiKey: apiKey !== null && apiKey !== void 0 ? apiKey : 'no-key', baseURL: this.url, apiVersion: apiVersion });
224
+ }
225
+ else {
226
+ // We need to hand over "some" key, even if a custom url is not key protected as otherwise the OpenAI client will throw an error
227
+ return new openai_1.OpenAI({ apiKey: apiKey !== null && apiKey !== void 0 ? apiKey : 'no-key', baseURL: this.url });
228
+ }
192
229
  }
193
230
  }
194
231
  exports.OpenAiModel = OpenAiModel;
@@ -1 +1 @@
1
- {"version":3,"file":"openai-language-model.js","sourceRoot":"","sources":["../../src/node/openai-language-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai-language-model.js","sourceRoot":"","sources":["../../src/node/openai-language-model.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,13 @@ import { LanguageModelRegistry } from '@theia/ai-core';
2
2
  import { OpenAiLanguageModelsManager, OpenAiModelDescription } from '../common';
3
3
  export declare class OpenAiLanguageModelsManagerImpl implements OpenAiLanguageModelsManager {
4
4
  protected _apiKey: string | undefined;
5
+ protected _apiVersion: string | undefined;
5
6
  protected readonly languageModelRegistry: LanguageModelRegistry;
6
7
  get apiKey(): string | undefined;
8
+ get apiVersion(): string | undefined;
7
9
  createOrUpdateLanguageModels(...modelDescriptions: OpenAiModelDescription[]): Promise<void>;
8
10
  removeLanguageModels(...modelIds: string[]): void;
9
11
  setApiKey(apiKey: string | undefined): void;
12
+ setApiVersion(apiVersion: string | undefined): void;
10
13
  }
11
14
  //# sourceMappingURL=openai-language-models-manager-impl.d.ts.map
@@ -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;IAGtC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAEhE,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAIK,4BAA4B,CAAC,GAAG,iBAAiB,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BjG,oBAAoB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAIjD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAO9C"}
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;IAqDjG,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"}
@@ -25,6 +25,10 @@ let OpenAiLanguageModelsManagerImpl = class OpenAiLanguageModelsManagerImpl {
25
25
  var _a;
26
26
  return (_a = this._apiKey) !== null && _a !== void 0 ? _a : process.env.OPENAI_API_KEY;
27
27
  }
28
+ get apiVersion() {
29
+ var _a;
30
+ return (_a = this._apiVersion) !== null && _a !== void 0 ? _a : process.env.OPENAI_API_VERSION;
31
+ }
28
32
  // Triggered from frontend. In case you want to use the models on the backend
29
33
  // without a frontend then call this yourself
30
34
  async createOrUpdateLanguageModels(...modelDescriptions) {
@@ -39,22 +43,33 @@ let OpenAiLanguageModelsManagerImpl = class OpenAiLanguageModelsManagerImpl {
39
43
  }
40
44
  return undefined;
41
45
  };
46
+ const apiVersionProvider = () => {
47
+ if (modelDescription.apiVersion === true) {
48
+ return this.apiVersion;
49
+ }
50
+ if (modelDescription.apiVersion) {
51
+ return modelDescription.apiVersion;
52
+ }
53
+ return undefined;
54
+ };
42
55
  if (model) {
43
56
  if (!(model instanceof openai_language_model_1.OpenAiModel)) {
44
- console.warn(`Open AI: model ${modelDescription.id} is not an OpenAI model`);
45
- continue;
46
- }
47
- if (!modelDescription.url) {
48
- // This seems to be an official model, but it was already created. This can happen during the initializing of more than one frontend.
49
- console.info(`Open AI: skip creating model ${modelDescription.id} because it already exists`);
57
+ console.warn(`OpenAI: model ${modelDescription.id} is not an OpenAI model`);
50
58
  continue;
51
59
  }
52
- model.url = modelDescription.url;
53
60
  model.model = modelDescription.model;
61
+ model.enableStreaming = modelDescription.enableStreaming;
62
+ model.url = modelDescription.url;
54
63
  model.apiKey = apiKeyProvider;
64
+ model.apiVersion = apiVersionProvider;
65
+ model.supportsDeveloperMessage = modelDescription.supportsDeveloperMessage;
66
+ model.supportsStructuredOutput = modelDescription.supportsStructuredOutput;
67
+ model.defaultRequestSettings = modelDescription.defaultRequestSettings;
55
68
  }
56
69
  else {
57
- this.languageModelRegistry.addLanguageModels([new openai_language_model_1.OpenAiModel(modelDescription.id, modelDescription.model, apiKeyProvider, modelDescription.url)]);
70
+ this.languageModelRegistry.addLanguageModels([
71
+ new openai_language_model_1.OpenAiModel(modelDescription.id, modelDescription.model, modelDescription.enableStreaming, apiKeyProvider, apiVersionProvider, modelDescription.supportsDeveloperMessage, modelDescription.supportsStructuredOutput, modelDescription.url, modelDescription.defaultRequestSettings)
72
+ ]);
58
73
  }
59
74
  }
60
75
  }
@@ -69,6 +84,14 @@ let OpenAiLanguageModelsManagerImpl = class OpenAiLanguageModelsManagerImpl {
69
84
  this._apiKey = undefined;
70
85
  }
71
86
  }
87
+ setApiVersion(apiVersion) {
88
+ if (apiVersion) {
89
+ this._apiVersion = apiVersion;
90
+ }
91
+ else {
92
+ this._apiVersion = undefined;
93
+ }
94
+ }
72
95
  };
73
96
  exports.OpenAiLanguageModelsManagerImpl = OpenAiLanguageModelsManagerImpl;
74
97
  tslib_1.__decorate([
@@ -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,mEAAsD;AAI/C,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;IAOxC,IAAI,MAAM;;QACN,OAAO,MAAA,IAAI,CAAC,OAAO,mCAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACtD,CAAC;IAED,6EAA6E;IAC7E,6CAA6C;IAC7C,KAAK,CAAC,4BAA4B,CAAC,GAAG,iBAA2C;QAC7E,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACrF,MAAM,cAAc,GAAG,GAAG,EAAE;gBACxB,IAAI,gBAAgB,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;oBACnC,OAAO,IAAI,CAAC,MAAM,CAAC;gBACvB,CAAC;gBACD,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC1B,OAAO,gBAAgB,CAAC,MAAM,CAAC;gBACnC,CAAC;gBACD,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC;YACF,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,CAAC,KAAK,YAAY,mCAAW,CAAC,EAAE,CAAC;oBAClC,OAAO,CAAC,IAAI,CAAC,kBAAkB,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,CAAC;oBAC7E,SAAS;gBACb,CAAC;gBACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC;oBACxB,qIAAqI;oBACrI,OAAO,CAAC,IAAI,CAAC,gCAAgC,gBAAgB,CAAC,EAAE,4BAA4B,CAAC,CAAC;oBAC9F,SAAS;gBACb,CAAC;gBACD,KAAK,CAAC,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC;gBACjC,KAAK,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC;gBACrC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,IAAI,mCAAW,CAAC,gBAAgB,CAAC,EAAE,EAAE,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvJ,CAAC;QACL,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,GAAG,QAAkB;QACtC,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS,CAAC,MAA0B;QAChC,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAC1B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC7B,CAAC;IACL,CAAC;CACJ,CAAA;AAvDY,0EAA+B;AAKrB;IADlB,IAAA,kBAAM,EAAC,+BAAqB,CAAC;;8EACkC;0CALvD,+BAA+B;IAD3C,IAAA,sBAAU,GAAE;GACA,+BAA+B,CAuD3C"}
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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"}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@theia/ai-openai",
3
- "version": "1.55.1",
3
+ "version": "1.57.0-next.112+f4778c273",
4
4
  "description": "Theia - OpenAI Integration",
5
5
  "dependencies": {
6
- "@theia/ai-core": "1.55.1",
7
- "@theia/core": "1.55.1",
8
- "@theia/filesystem": "1.55.1",
9
- "@theia/workspace": "1.55.1",
6
+ "@theia/ai-core": "1.57.0-next.112+f4778c273",
7
+ "@theia/core": "1.57.0-next.112+f4778c273",
8
+ "@theia/filesystem": "1.57.0-next.112+f4778c273",
9
+ "@theia/workspace": "1.57.0-next.112+f4778c273",
10
10
  "minimatch": "^5.1.0",
11
- "openai": "^4.55.7",
11
+ "openai": "^4.77.0",
12
12
  "tslib": "^2.6.2"
13
13
  },
14
14
  "publishConfig": {
@@ -45,10 +45,10 @@
45
45
  "watch": "theiaext watch"
46
46
  },
47
47
  "devDependencies": {
48
- "@theia/ext-scripts": "1.55.1"
48
+ "@theia/ext-scripts": "1.58.0"
49
49
  },
50
50
  "nyc": {
51
51
  "extends": "../../configs/nyc.json"
52
52
  },
53
- "gitHead": "be4713a778be16ba831af63a6fbd43b2301e882d"
53
+ "gitHead": "f4778c2737bb75613f0e1f99da8996bad91f6e17"
54
54
  }
@@ -18,6 +18,9 @@ import { FrontendApplicationContribution, PreferenceService } from '@theia/core/
18
18
  import { inject, injectable } from '@theia/core/shared/inversify';
19
19
  import { OpenAiLanguageModelsManager, OpenAiModelDescription } from '../common';
20
20
  import { API_KEY_PREF, CUSTOM_ENDPOINTS_PREF, MODELS_PREF } from './openai-preferences';
21
+ import { PREFERENCE_NAME_REQUEST_SETTINGS, RequestSetting } from '@theia/ai-core/lib/browser/ai-core-preferences';
22
+
23
+ const OPENAI_PROVIDER_ID = 'openai';
21
24
 
22
25
  @injectable()
23
26
  export class OpenAiFrontendApplicationContribution implements FrontendApplicationContribution {
@@ -28,7 +31,6 @@ export class OpenAiFrontendApplicationContribution implements FrontendApplicatio
28
31
  @inject(OpenAiLanguageModelsManager)
29
32
  protected manager: OpenAiLanguageModelsManager;
30
33
 
31
- // The preferenceChange.oldValue is always undefined for some reason
32
34
  protected prevModels: string[] = [];
33
35
  protected prevCustomModels: Partial<OpenAiModelDescription>[] = [];
34
36
 
@@ -38,63 +40,134 @@ export class OpenAiFrontendApplicationContribution implements FrontendApplicatio
38
40
  this.manager.setApiKey(apiKey);
39
41
 
40
42
  const models = this.preferenceService.get<string[]>(MODELS_PREF, []);
41
- this.manager.createOrUpdateLanguageModels(...models.map(createOpenAIModelDescription));
43
+ const requestSettings = this.getRequestSettingsPref();
44
+ this.manager.createOrUpdateLanguageModels(...models.map(modelId => this.createOpenAIModelDescription(modelId, requestSettings)));
42
45
  this.prevModels = [...models];
43
46
 
44
47
  const customModels = this.preferenceService.get<Partial<OpenAiModelDescription>[]>(CUSTOM_ENDPOINTS_PREF, []);
45
- this.manager.createOrUpdateLanguageModels(...createCustomModelDescriptionsFromPreferences(customModels));
48
+ this.manager.createOrUpdateLanguageModels(...this.createCustomModelDescriptionsFromPreferences(customModels, this.getRequestSettingsPref()));
46
49
  this.prevCustomModels = [...customModels];
47
50
 
48
51
  this.preferenceService.onPreferenceChanged(event => {
49
52
  if (event.preferenceName === API_KEY_PREF) {
50
53
  this.manager.setApiKey(event.newValue);
51
54
  } else if (event.preferenceName === MODELS_PREF) {
52
- const oldModels = new Set(this.prevModels);
53
- const newModels = new Set(event.newValue as string[]);
54
-
55
- const modelsToRemove = [...oldModels].filter(model => !newModels.has(model));
56
- const modelsToAdd = [...newModels].filter(model => !oldModels.has(model));
57
-
58
- this.manager.removeLanguageModels(...modelsToRemove.map(model => `openai/${model}`));
59
- this.manager.createOrUpdateLanguageModels(...modelsToAdd.map(createOpenAIModelDescription));
60
- this.prevModels = [...event.newValue];
55
+ this.handleModelChanges(event.newValue as string[]);
61
56
  } else if (event.preferenceName === CUSTOM_ENDPOINTS_PREF) {
62
- const oldModels = createCustomModelDescriptionsFromPreferences(this.prevCustomModels);
63
- const newModels = createCustomModelDescriptionsFromPreferences(event.newValue);
64
-
65
- const modelsToRemove = oldModels.filter(model => !newModels.some(newModel => newModel.id === model.id));
66
- const modelsToAddOrUpdate = newModels.filter(newModel => !oldModels.some(model =>
67
- model.id === newModel.id && model.model === newModel.model && model.url === newModel.url && model.apiKey === newModel.apiKey));
68
-
69
- this.manager.removeLanguageModels(...modelsToRemove.map(model => model.id));
70
- this.manager.createOrUpdateLanguageModels(...modelsToAddOrUpdate);
57
+ this.handleCustomModelChanges(event.newValue as Partial<OpenAiModelDescription>[]);
58
+ } else if (event.preferenceName === PREFERENCE_NAME_REQUEST_SETTINGS) {
59
+ this.handleRequestSettingsChanges(event.newValue as RequestSetting[]);
71
60
  }
72
61
  });
73
62
  });
74
63
  }
75
- }
76
64
 
77
- function createOpenAIModelDescription(modelId: string): OpenAiModelDescription {
78
- return {
79
- id: `openai/${modelId}`,
80
- model: modelId,
81
- apiKey: true
82
- };
83
- }
65
+ protected handleModelChanges(newModels: string[]): void {
66
+ const oldModels = new Set(this.prevModels);
67
+ const updatedModels = new Set(newModels);
84
68
 
85
- function createCustomModelDescriptionsFromPreferences(preferences: Partial<OpenAiModelDescription>[]): OpenAiModelDescription[] {
86
- return preferences.reduce((acc, pref) => {
87
- if (!pref.model || !pref.url || typeof pref.model !== 'string' || typeof pref.url !== 'string') {
88
- return acc;
89
- }
90
- return [
91
- ...acc,
92
- {
93
- id: pref.id && typeof pref.id === 'string' ? pref.id : pref.model,
94
- model: pref.model,
95
- url: pref.url,
96
- apiKey: typeof pref.apiKey === 'string' || pref.apiKey === true ? pref.apiKey : undefined
69
+ const modelsToRemove = [...oldModels].filter(model => !updatedModels.has(model));
70
+ const modelsToAdd = [...updatedModels].filter(model => !oldModels.has(model));
71
+
72
+ this.manager.removeLanguageModels(...modelsToRemove.map(model => `openai/${model}`));
73
+ const requestSettings = this.getRequestSettingsPref();
74
+ this.manager.createOrUpdateLanguageModels(...modelsToAdd.map(modelId => this.createOpenAIModelDescription(modelId, requestSettings)));
75
+ this.prevModels = newModels;
76
+ }
77
+
78
+ private getRequestSettingsPref(): RequestSetting[] {
79
+ return this.preferenceService.get<RequestSetting[]>(PREFERENCE_NAME_REQUEST_SETTINGS, []);
80
+ }
81
+
82
+ protected handleCustomModelChanges(newCustomModels: Partial<OpenAiModelDescription>[]): void {
83
+ const requestSettings = this.getRequestSettingsPref();
84
+ const oldModels = this.createCustomModelDescriptionsFromPreferences(this.prevCustomModels, requestSettings);
85
+ const newModels = this.createCustomModelDescriptionsFromPreferences(newCustomModels, requestSettings);
86
+
87
+ const modelsToRemove = oldModels.filter(model => !newModels.some(newModel => newModel.id === model.id));
88
+ const modelsToAddOrUpdate = newModels.filter(newModel =>
89
+ !oldModels.some(model =>
90
+ model.id === newModel.id &&
91
+ model.model === newModel.model &&
92
+ model.url === newModel.url &&
93
+ model.apiKey === newModel.apiKey &&
94
+ model.apiVersion === newModel.apiVersion &&
95
+ model.supportsDeveloperMessage === newModel.supportsDeveloperMessage &&
96
+ model.supportsStructuredOutput === newModel.supportsStructuredOutput &&
97
+ model.enableStreaming === newModel.enableStreaming));
98
+
99
+ this.manager.removeLanguageModels(...modelsToRemove.map(model => model.id));
100
+ this.manager.createOrUpdateLanguageModels(...modelsToAddOrUpdate);
101
+ this.prevCustomModels = [...newCustomModels];
102
+ }
103
+
104
+ protected handleRequestSettingsChanges(newSettings: RequestSetting[]): void {
105
+ const models = this.preferenceService.get<string[]>(MODELS_PREF, []);
106
+ this.manager.createOrUpdateLanguageModels(...models.map(modelId => this.createOpenAIModelDescription(modelId, newSettings)));
107
+
108
+ const customModels = this.preferenceService.get<Partial<OpenAiModelDescription>[]>(CUSTOM_ENDPOINTS_PREF, []);
109
+ this.manager.createOrUpdateLanguageModels(...this.createCustomModelDescriptionsFromPreferences(customModels, newSettings));
110
+ }
111
+
112
+ protected createOpenAIModelDescription(modelId: string, requestSettings: RequestSetting[]): OpenAiModelDescription {
113
+ const id = `${OPENAI_PROVIDER_ID}/${modelId}`;
114
+ const modelRequestSetting = this.getMatchingRequestSetting(modelId, OPENAI_PROVIDER_ID, requestSettings);
115
+ return {
116
+ id: id,
117
+ model: modelId,
118
+ apiKey: true,
119
+ apiVersion: true,
120
+ supportsDeveloperMessage: !openAIModelsNotSupportingDeveloperMessages.includes(modelId),
121
+ enableStreaming: !openAIModelsWithDisabledStreaming.includes(modelId),
122
+ supportsStructuredOutput: !openAIModelsWithoutStructuredOutput.includes(modelId),
123
+ defaultRequestSettings: modelRequestSetting?.requestSettings
124
+ };
125
+ }
126
+
127
+ protected createCustomModelDescriptionsFromPreferences(
128
+ preferences: Partial<OpenAiModelDescription>[],
129
+ requestSettings: RequestSetting[]
130
+ ): OpenAiModelDescription[] {
131
+ return preferences.reduce((acc, pref) => {
132
+ if (!pref.model || !pref.url || typeof pref.model !== 'string' || typeof pref.url !== 'string') {
133
+ return acc;
97
134
  }
98
- ];
99
- }, []);
135
+
136
+ const modelRequestSetting = this.getMatchingRequestSetting(pref.model, OPENAI_PROVIDER_ID, requestSettings);
137
+
138
+ return [
139
+ ...acc,
140
+ {
141
+ id: pref.id && typeof pref.id === 'string' ? pref.id : pref.model,
142
+ model: pref.model,
143
+ url: pref.url,
144
+ apiKey: typeof pref.apiKey === 'string' || pref.apiKey === true ? pref.apiKey : undefined,
145
+ apiVersion: typeof pref.apiVersion === 'string' || pref.apiVersion === true ? pref.apiVersion : undefined,
146
+ supportsDeveloperMessage: pref.supportsDeveloperMessage ?? true,
147
+ supportsStructuredOutput: pref.supportsStructuredOutput ?? true,
148
+ enableStreaming: pref.enableStreaming ?? true,
149
+ defaultRequestSettings: modelRequestSetting?.requestSettings
150
+ }
151
+ ];
152
+ }, []);
153
+ }
154
+ protected getMatchingRequestSetting(
155
+ modelId: string,
156
+ providerId: string,
157
+ requestSettings: RequestSetting[]
158
+ ): RequestSetting | undefined {
159
+ const matchingSettings = requestSettings.filter(
160
+ setting => (!setting.providerId || setting.providerId === providerId) && setting.modelId === modelId
161
+ );
162
+ if (matchingSettings.length > 1) {
163
+ console.warn(
164
+ `Multiple entries found for provider "${providerId}" and model "${modelId}". Using the first match.`
165
+ );
166
+ }
167
+ return matchingSettings[0];
168
+ }
100
169
  }
170
+
171
+ const openAIModelsWithDisabledStreaming = ['o1'];
172
+ const openAIModelsNotSupportingDeveloperMessages = ['o1-preview', 'o1-mini'];
173
+ const openAIModelsWithoutStructuredOutput = ['o1-preview', 'gpt-4-turbo', 'gpt-4', 'gpt-3.5-turbo', 'o1-mini', 'gpt-4o-2024-05-13'];