@theia/ai-openai 1.76.0-next.7 → 1.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/lib/browser/openai-frontend-application-contribution.d.ts +18 -10
  2. package/lib/browser/openai-frontend-application-contribution.d.ts.map +1 -1
  3. package/lib/browser/openai-frontend-application-contribution.js +68 -64
  4. package/lib/browser/openai-frontend-application-contribution.js.map +1 -1
  5. package/lib/common/openai-language-models-manager.d.ts +20 -1
  6. package/lib/common/openai-language-models-manager.d.ts.map +1 -1
  7. package/lib/common/openai-preferences.d.ts +2 -1
  8. package/lib/common/openai-preferences.d.ts.map +1 -1
  9. package/lib/common/openai-preferences.js +23 -13
  10. package/lib/common/openai-preferences.js.map +1 -1
  11. package/lib/node/openai-language-model.d.ts +26 -2
  12. package/lib/node/openai-language-model.d.ts.map +1 -1
  13. package/lib/node/openai-language-model.js +44 -18
  14. package/lib/node/openai-language-model.js.map +1 -1
  15. package/lib/node/openai-language-model.spec.js +55 -8
  16. package/lib/node/openai-language-model.spec.js.map +1 -1
  17. package/lib/node/openai-language-models-manager-impl.d.ts +38 -1
  18. package/lib/node/openai-language-models-manager-impl.d.ts.map +1 -1
  19. package/lib/node/openai-language-models-manager-impl.js +88 -3
  20. package/lib/node/openai-language-models-manager-impl.js.map +1 -1
  21. package/lib/node/openai-language-models-manager-impl.spec.js +171 -0
  22. package/lib/node/openai-language-models-manager-impl.spec.js.map +1 -1
  23. package/lib/node/openai-model-defaults.d.ts.map +1 -1
  24. package/lib/node/openai-model-defaults.js +7 -0
  25. package/lib/node/openai-model-defaults.js.map +1 -1
  26. package/lib/node/openai-model-defaults.spec.js +9 -0
  27. package/lib/node/openai-model-defaults.spec.js.map +1 -1
  28. package/lib/node/openai-reasoning.d.ts +1 -2
  29. package/lib/node/openai-reasoning.d.ts.map +1 -1
  30. package/lib/node/openai-reasoning.js +6 -8
  31. package/lib/node/openai-reasoning.js.map +1 -1
  32. package/lib/node/openai-response-api-utils.d.ts +25 -1
  33. package/lib/node/openai-response-api-utils.d.ts.map +1 -1
  34. package/lib/node/openai-response-api-utils.js +104 -12
  35. package/lib/node/openai-response-api-utils.js.map +1 -1
  36. package/lib/node/openai-response-api-utils.spec.js +146 -0
  37. package/lib/node/openai-response-api-utils.spec.js.map +1 -1
  38. package/package.json +7 -7
  39. package/src/browser/openai-frontend-application-contribution.ts +82 -69
  40. package/src/common/openai-language-models-manager.ts +21 -2
  41. package/src/common/openai-preferences.ts +25 -12
  42. package/src/node/openai-language-model.spec.ts +63 -9
  43. package/src/node/openai-language-model.ts +58 -20
  44. package/src/node/openai-language-models-manager-impl.spec.ts +178 -0
  45. package/src/node/openai-language-models-manager-impl.ts +106 -6
  46. package/src/node/openai-model-defaults.spec.ts +10 -0
  47. package/src/node/openai-model-defaults.ts +8 -0
  48. package/src/node/openai-reasoning.ts +6 -9
  49. package/src/node/openai-response-api-utils.spec.ts +184 -1
  50. package/src/node/openai-response-api-utils.ts +115 -13
@@ -18,10 +18,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  const chai_1 = require("chai");
19
19
  const openai_language_models_manager_impl_1 = require("./openai-language-models-manager-impl");
20
20
  const openai_server_tools_1 = require("./openai-server-tools");
21
+ const openai_1 = require("openai");
22
+ const mock_logger_1 = require("@theia/core/lib/common/test/mock-logger");
23
+ const test_model_discovery_fetcher_1 = require("@theia/ai-core/lib/node/test/test-model-discovery-fetcher");
21
24
  class TestableOpenAiLanguageModelsManagerImpl extends openai_language_models_manager_impl_1.OpenAiLanguageModelsManagerImpl {
25
+ constructor() {
26
+ super(...arguments);
27
+ this.stubbedModels = [];
28
+ this.listCalls = 0;
29
+ /** Throw {@link failWith} for the first `failTimes` list calls, then return {@link stubbedModels}. */
30
+ this.failTimes = 0;
31
+ this.failWith = new Error('boom');
32
+ /** The real discovery fetcher, snapshotting in memory and retrying without waiting. */
33
+ this.testFetcher = new test_model_discovery_fetcher_1.TestModelDiscoveryFetcher();
34
+ this.discoveryFetcher = this.testFetcher;
35
+ }
22
36
  resolveServerToolsForTest(description) {
23
37
  return this.resolveServerTools(description);
24
38
  }
39
+ /** In-memory stand-in for the on-disk snapshot. */
40
+ get snapshot() {
41
+ return this.testFetcher.snapshot;
42
+ }
43
+ set snapshot(models) {
44
+ this.testFetcher.snapshot = models;
45
+ }
46
+ async listModels(_apiKey, _proxyUrl) {
47
+ this.listCalls++;
48
+ if (this.listCalls <= this.failTimes) {
49
+ throw this.failWith;
50
+ }
51
+ return this.stubbedModels;
52
+ }
25
53
  }
26
54
  function modelDescription(overrides = {}) {
27
55
  return {
@@ -49,4 +77,147 @@ describe('OpenAiLanguageModelsManagerImpl server tools', () => {
49
77
  (0, chai_1.expect)(manager.resolveServerToolsForTest(modelDescription())).to.equal(undefined);
50
78
  });
51
79
  });
80
+ describe('OpenAiLanguageModelsManagerImpl - fetchAvailableModels', () => {
81
+ let manager;
82
+ beforeEach(() => {
83
+ manager = new TestableOpenAiLanguageModelsManagerImpl();
84
+ manager.logger = new mock_logger_1.MockLogger();
85
+ manager.setApiKey('key');
86
+ });
87
+ it('returns an empty result and skips the network when no API key is set', async () => {
88
+ const previous = process.env.OPENAI_API_KEY;
89
+ delete process.env.OPENAI_API_KEY;
90
+ try {
91
+ manager.setApiKey(undefined);
92
+ (0, chai_1.expect)(await manager.fetchAvailableModels()).to.deep.equal({ models: [], fromCache: false });
93
+ (0, chai_1.expect)(manager.listCalls).to.equal(0);
94
+ }
95
+ finally {
96
+ if (previous !== undefined) {
97
+ process.env.OPENAI_API_KEY = previous;
98
+ }
99
+ }
100
+ });
101
+ it('keeps the text-chat families and drops the other model types the endpoint lists', async () => {
102
+ manager.stubbedModels = [
103
+ { id: 'gpt-5.5' },
104
+ { id: 'chatgpt-5-latest' },
105
+ { id: 'o3-mini' },
106
+ { id: 'gpt-4o-audio-preview' },
107
+ { id: 'gpt-image-1' },
108
+ { id: 'text-embedding-3-large' },
109
+ { id: 'omni-moderation-latest' },
110
+ { id: 'whisper-1' },
111
+ { id: 'computer-use-preview' },
112
+ { id: 'gpt-4o-search-preview' },
113
+ // Multimodal, so it speaks the realtime/live API rather than chat completions.
114
+ { id: 'gpt-live-1' },
115
+ // Caught by the same `search` term, and rightly so: it speaks the responses API, not this one.
116
+ { id: 'o3-deep-research' },
117
+ { id: 'gpt-3.5-turbo-instruct' },
118
+ { id: 'gpt-5.5' }
119
+ ];
120
+ const result = await manager.fetchAvailableModels();
121
+ (0, chai_1.expect)(result.fromCache).to.equal(false);
122
+ (0, chai_1.expect)(result.models.map(model => model.id)).to.deep.equal(['gpt-5.5', 'chatgpt-5-latest', 'o3-mini']);
123
+ (0, chai_1.expect)(manager.snapshot).to.deep.equal(result.models);
124
+ });
125
+ it('recognises the legacy year-less snapshots as releases of one model', async () => {
126
+ manager.stubbedModels = [
127
+ { id: 'gpt-4-0613', created: 1_686_000_000 },
128
+ { id: 'gpt-4-0125', created: 1_706_000_000 },
129
+ { id: 'gpt-4-32k-0613', created: 1_686_000_000 }
130
+ ];
131
+ const result = await manager.fetchAvailableModels();
132
+ // Two aliases for the two models, then the snapshots they were derived from.
133
+ (0, chai_1.expect)(result.models.map(model => model.id)).to.deep.equal([
134
+ 'gpt-4',
135
+ 'gpt-4-32k',
136
+ 'gpt-4-0613',
137
+ 'gpt-4-0125',
138
+ 'gpt-4-32k-0613'
139
+ ]);
140
+ });
141
+ it('adds the undated alias of each release-pinned model, keeping the releases themselves', async () => {
142
+ manager.stubbedModels = [
143
+ { id: 'gpt-5.6-sol-2026-04-01' },
144
+ { id: 'gpt-5.6-sol-2025-11-20' },
145
+ { id: 'gpt-5.6-luna' }
146
+ ];
147
+ const result = await manager.fetchAvailableModels();
148
+ (0, chai_1.expect)(result.models.map(model => model.id)).to.deep.equal([
149
+ 'gpt-5.6-sol',
150
+ 'gpt-5.6-sol-2026-04-01',
151
+ 'gpt-5.6-sol-2025-11-20',
152
+ 'gpt-5.6-luna'
153
+ ]);
154
+ });
155
+ it('reports the creation timestamp in milliseconds', async () => {
156
+ manager.stubbedModels = [{ id: 'gpt-5.5', created: 1_700_000_000 }];
157
+ const result = await manager.fetchAvailableModels();
158
+ (0, chai_1.expect)(result.models[0].released).to.equal(1_700_000_000_000);
159
+ });
160
+ it('retries transient connection errors and then succeeds', async () => {
161
+ manager.stubbedModels = [{ id: 'gpt-5.5' }];
162
+ manager.failTimes = 2;
163
+ manager.failWith = new openai_1.APIConnectionError({ message: 'network down' });
164
+ const result = await manager.fetchAvailableModels();
165
+ (0, chai_1.expect)(result.models.map(model => model.id)).to.deep.equal(['gpt-5.5']);
166
+ (0, chai_1.expect)(manager.listCalls).to.equal(3);
167
+ });
168
+ it('falls back to the cached snapshot when the fetch keeps failing', async () => {
169
+ manager.snapshot = [{ id: 'gpt-5.5' }];
170
+ manager.failTimes = 99;
171
+ manager.failWith = new openai_1.APIConnectionError({ message: 'still down' });
172
+ const result = await manager.fetchAvailableModels();
173
+ (0, chai_1.expect)(result).to.deep.equal({ models: [{ id: 'gpt-5.5' }], fromCache: true, error: 'still down' });
174
+ (0, chai_1.expect)(manager.listCalls).to.equal(3);
175
+ });
176
+ it('does not retry auth errors and throws without a snapshot', async () => {
177
+ manager.failTimes = 99;
178
+ manager.failWith = new Error('401 unauthorized');
179
+ let threw = false;
180
+ try {
181
+ await manager.fetchAvailableModels();
182
+ }
183
+ catch (error) {
184
+ threw = true;
185
+ (0, chai_1.expect)(error.message).to.equal('401 unauthorized');
186
+ }
187
+ (0, chai_1.expect)(threw).to.be.true;
188
+ (0, chai_1.expect)(manager.listCalls).to.equal(1);
189
+ });
190
+ });
191
+ describe('OpenAiLanguageModelsManagerImpl - environment API key consent', () => {
192
+ it('leaves an environment key unused until it is allowed, wherever a key would be read', async () => {
193
+ const previous = { OPENAI_API_KEY: process.env.OPENAI_API_KEY };
194
+ delete process.env.OPENAI_API_KEY;
195
+ process.env.OPENAI_API_KEY = 'from-the-environment';
196
+ try {
197
+ const manager = new TestableOpenAiLanguageModelsManagerImpl();
198
+ // The gate sits on the key, so a custom endpoint or a configured model cannot reach past it either.
199
+ (0, chai_1.expect)(manager.apiKey).to.equal(undefined);
200
+ // Discovery still needs to know the key is there, in order to ask for it.
201
+ (0, chai_1.expect)(await manager.getApiKeySource()).to.equal('environment');
202
+ manager.setAllowEnvironmentApiKey(true);
203
+ (0, chai_1.expect)(manager.apiKey).to.equal('from-the-environment');
204
+ // Withdrawing the consent stops it being used at once.
205
+ manager.setAllowEnvironmentApiKey(false);
206
+ (0, chai_1.expect)(manager.apiKey).to.equal(undefined);
207
+ }
208
+ finally {
209
+ if (previous.OPENAI_API_KEY !== undefined) {
210
+ process.env.OPENAI_API_KEY = previous.OPENAI_API_KEY;
211
+ }
212
+ else {
213
+ delete process.env.OPENAI_API_KEY;
214
+ }
215
+ }
216
+ });
217
+ it('uses a key set in the preferences whatever the environment says', () => {
218
+ const manager = new TestableOpenAiLanguageModelsManagerImpl();
219
+ manager.setApiKey('from-the-preference');
220
+ (0, chai_1.expect)(manager.apiKey).to.equal('from-the-preference');
221
+ });
222
+ });
52
223
  //# sourceMappingURL=openai-language-models-manager-impl.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-language-models-manager-impl.spec.js","sourceRoot":"","sources":["../../src/node/openai-language-models-manager-impl.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;;AAEhF,+BAA8B;AAE9B,+FAAwF;AACxF,+DAA+E;AAE/E,MAAM,uCAAwC,SAAQ,qEAA+B;IACjF,yBAAyB,CAAC,WAAmC;QACzD,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;CACJ;AAED,SAAS,gBAAgB,CAAC,YAA6C,EAAE;IACrE,OAAO;QACH,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,CAAC;QACb,GAAG,SAAS;KACf,CAAC;AACN,CAAC;AAED,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC1D,MAAM,OAAO,GAAG,IAAI,uCAAuC,EAAE,CAAC;IAE9D,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QAClF,MAAM,WAAW,GAAG,OAAO,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClG,IAAA,aAAM,EAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,uCAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC7D,IAAA,aAAM,EAAC,OAAO,CAAC,yBAAyB,CAAC,gBAAgB,CAAC;YACtD,cAAc,EAAE,IAAI;YACpB,GAAG,EAAE,wBAAwB;SAChC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACjE,IAAA,aAAM,EAAC,OAAO,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"openai-language-models-manager-impl.spec.js","sourceRoot":"","sources":["../../src/node/openai-language-models-manager-impl.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;;AAEhF,+BAA8B;AAE9B,+FAAwF;AACxF,+DAA+E;AAC/E,mCAA4C;AAC5C,yEAAqE;AAErE,4GAAsG;AAEtG,MAAM,uCAAwC,SAAQ,qEAA+B;IAArF;;QAKW,kBAAa,GAA4C,EAAE,CAAC;QAC5D,cAAS,GAAG,CAAC,CAAC;QACrB,sGAAsG;QAC/F,cAAS,GAAG,CAAC,CAAC;QACd,aAAQ,GAAU,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,uFAAuF;QACvE,gBAAW,GAAG,IAAI,wDAAyB,EAAE,CAAC;QAClC,qBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC;IAkBpE,CAAC;IA7BG,yBAAyB,CAAC,WAAmC;QACzD,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;IAWD,mDAAmD;IACnD,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IACrC,CAAC;IAED,IAAW,QAAQ,CAAC,MAAqC;QACrD,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC;IACvC,CAAC;IAEkB,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,SAA6B;QAC9E,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,QAAQ,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;CACJ;AAED,SAAS,gBAAgB,CAAC,YAA6C,EAAE;IACrE,OAAO;QACH,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,CAAC;QACb,GAAG,SAAS;KACf,CAAC;AACN,CAAC;AAED,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC1D,MAAM,OAAO,GAAG,IAAI,uCAAuC,EAAE,CAAC;IAE9D,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QAClF,MAAM,WAAW,GAAG,OAAO,CAAC,yBAAyB,CAAC,gBAAgB,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClG,IAAA,aAAM,EAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,uCAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC7D,IAAA,aAAM,EAAC,OAAO,CAAC,yBAAyB,CAAC,gBAAgB,CAAC;YACtD,cAAc,EAAE,IAAI;YACpB,GAAG,EAAE,wBAAwB;SAChC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACjE,IAAA,aAAM,EAAC,OAAO,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wDAAwD,EAAE,GAAG,EAAE;IACpE,IAAI,OAAgD,CAAC;IAErD,UAAU,CAAC,GAAG,EAAE;QACZ,OAAO,GAAG,IAAI,uCAAuC,EAAE,CAAC;QACvD,OAA6C,CAAC,MAAM,GAAG,IAAI,wBAAU,EAAE,CAAC;QACzE,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAClC,IAAI,CAAC;YACD,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAA,aAAM,EAAC,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7F,IAAA,aAAM,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;gBAAS,CAAC;YACP,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC;YAAC,CAAC;QAC1E,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC7F,OAAO,CAAC,aAAa,GAAG;YACpB,EAAE,EAAE,EAAE,SAAS,EAAE;YACjB,EAAE,EAAE,EAAE,kBAAkB,EAAE;YAC1B,EAAE,EAAE,EAAE,SAAS,EAAE;YACjB,EAAE,EAAE,EAAE,sBAAsB,EAAE;YAC9B,EAAE,EAAE,EAAE,aAAa,EAAE;YACrB,EAAE,EAAE,EAAE,wBAAwB,EAAE;YAChC,EAAE,EAAE,EAAE,wBAAwB,EAAE;YAChC,EAAE,EAAE,EAAE,WAAW,EAAE;YACnB,EAAE,EAAE,EAAE,sBAAsB,EAAE;YAC9B,EAAE,EAAE,EAAE,uBAAuB,EAAE;YAC/B,+EAA+E;YAC/E,EAAE,EAAE,EAAE,YAAY,EAAE;YACpB,+FAA+F;YAC/F,EAAE,EAAE,EAAE,kBAAkB,EAAE;YAC1B,EAAE,EAAE,EAAE,wBAAwB,EAAE;YAChC,EAAE,EAAE,EAAE,SAAS,EAAE;SACpB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACpD,IAAA,aAAM,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC;QACvG,IAAA,aAAM,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAChF,OAAO,CAAC,aAAa,GAAG;YACpB,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE;YAC5C,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE;YAC5C,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE;SACnD,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACpD,6EAA6E;QAC7E,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACvD,OAAO;YACP,WAAW;YACX,YAAY;YACZ,YAAY;YACZ,gBAAgB;SACnB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;QAClG,OAAO,CAAC,aAAa,GAAG;YACpB,EAAE,EAAE,EAAE,wBAAwB,EAAE;YAChC,EAAE,EAAE,EAAE,wBAAwB,EAAE;YAChC,EAAE,EAAE,EAAE,cAAc,EAAE;SACzB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACpD,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACvD,aAAa;YACb,wBAAwB;YACxB,wBAAwB;YACxB,cAAc;SACjB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC5D,OAAO,CAAC,aAAa,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACpD,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACnE,OAAO,CAAC,aAAa,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,QAAQ,GAAG,IAAI,2BAAkB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACpD,IAAA,aAAM,EAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACxE,IAAA,aAAM,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC5E,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,QAAQ,GAAG,IAAI,2BAAkB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACpD,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACpG,IAAA,aAAM,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACtE,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjD,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC;YACD,MAAM,OAAO,CAAC,oBAAoB,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,KAAK,GAAG,IAAI,CAAC;YACb,IAAA,aAAM,EAAE,KAAe,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAClE,CAAC;QACD,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACzB,IAAA,aAAM,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;IAE3E,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,QAAQ,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAChE,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,sBAAsB,CAAC;QACpD,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,uCAAuC,EAAE,CAAC;YAC9D,oGAAoG;YACpG,IAAA,aAAM,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3C,0EAA0E;YAC1E,IAAA,aAAM,EAAC,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAEhE,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;YACxC,IAAA,aAAM,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAExD,uDAAuD;YACvD,OAAO,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;YACzC,IAAA,aAAM,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACP,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;YAAC,CAAC;iBAAM,CAAC;gBAAC,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAAC,CAAC;QACpJ,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACvE,MAAM,OAAO,GAAG,IAAI,uCAAuC,EAAE,CAAC;QAC9D,OAAO,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACzC,IAAA,aAAM,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai-model-defaults.d.ts","sourceRoot":"","sources":["../../src/node/openai-model-defaults.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAiDD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAEzE"}
1
+ {"version":3,"file":"openai-model-defaults.d.ts","sourceRoot":"","sources":["../../src/node/openai-model-defaults.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAyDD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAEzE"}
@@ -24,12 +24,19 @@ const O_SERIES_REASONING_SUPPORT = {
24
24
  supportedLevels: ['off', 'low', 'medium', 'high', 'auto'],
25
25
  defaultLevel: 'auto'
26
26
  };
27
+ // GPT-6 Astra reasons at every setting: it dropped the `none`/`minimal` efforts of the GPT-5 family.
28
+ // Its `xhigh`/`max` efforts have no representation in ReasoningLevel, so we expose the mappable subset.
29
+ const GPT6_REASONING_SUPPORT = {
30
+ supportedLevels: ['low', 'medium', 'high', 'auto'],
31
+ defaultLevel: 'auto'
32
+ };
27
33
  /**
28
34
  * First matching prefix wins, so more specific prefixes must come before broader ones
29
35
  * (e.g. `gpt-5.4-mini` before `gpt-5.4`). Snapshots inherit their family value
30
36
  * (e.g. `gpt-4o-2024-08-06` matches `gpt-4o`).
31
37
  */
32
38
  const OPENAI_MODEL_FAMILIES = [
39
+ ['gpt-6', { contextWindow: 1_050_000, reasoningSupport: GPT6_REASONING_SUPPORT }],
33
40
  ['gpt-5.6', { contextWindow: 1_050_000, reasoningSupport: GPT5_REASONING_SUPPORT }],
34
41
  ['gpt-5.5', { contextWindow: 1_050_000, reasoningSupport: GPT5_REASONING_SUPPORT }],
35
42
  ['gpt-5.4-mini', { contextWindow: 400_000, reasoningSupport: GPT5_REASONING_SUPPORT }],
@@ -1 +1 @@
1
- {"version":3,"file":"openai-model-defaults.js","sourceRoot":"","sources":["../../src/node/openai-model-defaults.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai-model-defaults.js","sourceRoot":"","sources":["../../src/node/openai-model-defaults.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,15 @@ describe('getOpenAiModelDefaults', () => {
21
21
  it('returns empty defaults for unknown models', () => {
22
22
  (0, chai_1.expect)((0, openai_model_defaults_1.getOpenAiModelDefaults)('totally-made-up-model')).to.deep.equal({});
23
23
  });
24
+ describe('GPT-6 Astra', () => {
25
+ it('matches gpt-6-astra at 1,050,000 with reasoning that drops `minimal`', () => {
26
+ const d = (0, openai_model_defaults_1.getOpenAiModelDefaults)('gpt-6-astra');
27
+ (0, chai_1.expect)(d.contextWindow).to.equal(1_050_000);
28
+ (0, chai_1.expect)(d.reasoningSupport?.supportedLevels).to.not.include('minimal');
29
+ (0, chai_1.expect)(d.reasoningSupport?.supportedLevels).to.include('high');
30
+ (0, chai_1.expect)(d.reasoningSupport?.defaultLevel).to.equal('auto');
31
+ });
32
+ });
24
33
  describe('GPT-5.6', () => {
25
34
  it('matches the sol, terra, and luna tiers at 1,050,000 with GPT-5 reasoning', () => {
26
35
  for (const id of ['gpt-5.6-sol', 'gpt-5.6-terra', 'gpt-5.6-luna']) {
@@ -1 +1 @@
1
- {"version":3,"file":"openai-model-defaults.spec.js","sourceRoot":"","sources":["../../src/node/openai-model-defaults.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai-model-defaults.spec.js","sourceRoot":"","sources":["../../src/node/openai-model-defaults.spec.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,7 @@ import { ReasoningLevel } from '@theia/ai-core';
4
4
  * Returns `{}` when reasoning is not requested, unsupported, or disabled — so the caller
5
5
  * can spread it unconditionally.
6
6
  *
7
- * @param forResponseApi `true` for the Responses API (`reasoning: { effort }`, supports `minimal`);
8
- * `false` for Chat Completions (`reasoning_effort`, `low`|`medium`|`high` only).
7
+ * @param forResponseApi `true` for the Responses API (`reasoning: { effort, summary }`), `false` for Chat Completions (`reasoning_effort`).
9
8
  * @param supportsReasoning `false` for models without reasoning support — returns `{}`.
10
9
  */
11
10
  export declare function openAiReasoningFor(level: ReasoningLevel | undefined, forResponseApi: boolean, supportsReasoning: boolean): Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"openai-reasoning.d.ts","sourceRoot":"","sources":["../../src/node/openai-reasoning.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,cAAc,GAAG,SAAS,EACjC,cAAc,EAAE,OAAO,EACvB,iBAAiB,EAAE,OAAO,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB"}
1
+ {"version":3,"file":"openai-reasoning.d.ts","sourceRoot":"","sources":["../../src/node/openai-reasoning.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,cAAc,GAAG,SAAS,EACjC,cAAc,EAAE,OAAO,EACvB,iBAAiB,EAAE,OAAO,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}
@@ -21,8 +21,7 @@ exports.openAiReasoningFor = openAiReasoningFor;
21
21
  * Returns `{}` when reasoning is not requested, unsupported, or disabled — so the caller
22
22
  * can spread it unconditionally.
23
23
  *
24
- * @param forResponseApi `true` for the Responses API (`reasoning: { effort }`, supports `minimal`);
25
- * `false` for Chat Completions (`reasoning_effort`, `low`|`medium`|`high` only).
24
+ * @param forResponseApi `true` for the Responses API (`reasoning: { effort, summary }`), `false` for Chat Completions (`reasoning_effort`).
26
25
  * @param supportsReasoning `false` for models without reasoning support — returns `{}`.
27
26
  */
28
27
  function openAiReasoningFor(level, forResponseApi, supportsReasoning) {
@@ -35,13 +34,12 @@ function openAiReasoningFor(level, forResponseApi, supportsReasoning) {
35
34
  level === 'medium' ? 'medium' :
36
35
  level === 'high' ? 'high' :
37
36
  undefined;
38
- return responsesEffort ? { reasoning: { effort: responsesEffort } } : {};
37
+ // Summaries are opt-in on the Responses API: without `summary` the model still reasons, but nothing is streamed to show.
38
+ return { reasoning: { ...(responsesEffort ? { effort: responsesEffort } : {}), summary: 'auto' } };
39
39
  }
40
- // Chat Completions has no 'minimal' — map it down to 'low'.
41
- const chatEffort = level === 'minimal' || level === 'low' ? 'low' :
42
- level === 'medium' ? 'medium' :
43
- level === 'high' ? 'high' :
44
- undefined;
40
+ // Chat Completions takes the same effort values, `minimal` included. Models that reject it (e.g. o-series)
41
+ // leave it out of their `supportedLevels`, and the level is clamped to those before it gets here.
42
+ const chatEffort = level === 'minimal' || level === 'low' || level === 'medium' || level === 'high' ? level : undefined;
45
43
  return chatEffort ? { reasoning_effort: chatEffort } : {};
46
44
  }
47
45
  //# sourceMappingURL=openai-reasoning.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-reasoning.js","sourceRoot":"","sources":["../../src/node/openai-reasoning.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;;AAahF,gDAwBC;AAjCD;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAC9B,KAAiC,EACjC,cAAuB,EACvB,iBAA0B;IAE1B,IAAI,CAAC,KAAK,IAAI,CAAC,iBAAiB,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI,cAAc,EAAE,CAAC;QACjB,MAAM,eAAe,GACjB,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC7B,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACrB,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAC3B,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBACvB,SAAS,CAAC;QAC9B,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,CAAC;IACD,4DAA4D;IAC5D,MAAM,UAAU,GACZ,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC3B,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACvB,SAAS,CAAC;IAC1B,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"openai-reasoning.js","sourceRoot":"","sources":["../../src/node/openai-reasoning.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,gDAsBC;AA9BD;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAC9B,KAAiC,EACjC,cAAuB,EACvB,iBAA0B;IAE1B,IAAI,CAAC,KAAK,IAAI,CAAC,iBAAiB,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI,cAAc,EAAE,CAAC;QACjB,MAAM,eAAe,GACjB,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC7B,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACrB,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAC3B,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBACvB,SAAS,CAAC;QAC9B,yHAAyH;QACzH,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;IACvG,CAAC;IACD,2GAA2G;IAC3G,kGAAkG;IAClG,MAAM,UAAU,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACxH,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC"}
@@ -1,4 +1,4 @@
1
- import { LanguageModelMessage, LanguageModelResponse, LanguageModelStreamResponsePart, ToolRequest, UserRequest } from '@theia/ai-core';
1
+ import { LanguageModelMessage, LanguageModelResponse, LanguageModelStreamResponsePart, ThinkingResponsePart, ToolRequest, UserRequest } from '@theia/ai-core';
2
2
  import { CancellationToken, ILogger } from '@theia/core';
3
3
  import { OpenAI } from 'openai';
4
4
  import type { RunnerOptions } from 'openai/lib/AbstractChatCompletionRunner';
@@ -27,6 +27,30 @@ export declare class OpenAiResponseApiUtils {
27
27
  * Converts ToolRequest objects to the format expected by the Response API.
28
28
  */
29
29
  convertToolsForResponseApi(tools?: ToolRequest[], deferredToolIds?: string[], serverTools?: string[]): Tool[] | undefined;
30
+ /**
31
+ * Maps a reasoning-summary stream event to a thinking part. With `reasoning.summary` set, the Responses API streams
32
+ * one or more `summary_text` parts per reasoning item; parts after the first are separated by a blank line.
33
+ */
34
+ reasoningSummaryThought(event: ResponseStreamEvent): ThinkingResponsePart | undefined;
35
+ /**
36
+ * Model ids whose organization rejected `reasoning.summary` (OpenAI requires a verified organization for summaries).
37
+ * Later requests to these models omit the field.
38
+ */
39
+ protected readonly reasoningSummaryRejectedModels: Set<string>;
40
+ protected withoutRejectedReasoningSummary(settings: Record<string, unknown>, modelId: string): Record<string, unknown>;
41
+ /**
42
+ * Returns `true` and remembers the rejection when `error` is the 400 an unverified organization gets for `reasoning.summary`,
43
+ * so the request can be sent once more without it.
44
+ */
45
+ protected handleReasoningSummaryRejection(error: unknown, sentSettings: Record<string, unknown>, modelId: string): boolean;
46
+ /**
47
+ * Sends a Responses API request, retrying once without `reasoning.summary` if the organization is not allowed to request it.
48
+ */
49
+ sendWithReasoningSummaryFallback<T>(settings: Record<string, unknown>, modelId: string, send: (settings: Record<string, unknown>) => Promise<T>): Promise<T>;
50
+ /**
51
+ * Streaming counterpart of {@link sendWithReasoningSummaryFallback}. The rejection arrives before any event, so nothing is emitted twice.
52
+ */
53
+ streamWithReasoningSummaryFallback(settings: Record<string, unknown>, modelId: string, open: (settings: Record<string, unknown>) => AsyncIterable<ResponseStreamEvent>): AsyncIterable<ResponseStreamEvent>;
30
54
  protected createSimpleResponseApiStreamIterator(stream: AsyncIterable<ResponseStreamEvent>, cancellationToken?: CancellationToken): AsyncIterable<LanguageModelStreamResponsePart>;
31
55
  /**
32
56
  * Processes the provided list of messages by applying system message adjustments and converting
@@ -1 +1 @@
1
- {"version":3,"file":"openai-response-api-utils.d.ts","sourceRoot":"","sources":["../../src/node/openai-response-api-utils.ts"],"names":[],"mappings":"AAgBA,OAAO,EAGH,oBAAoB,EACpB,qBAAqB,EACrB,+BAA+B,EAI/B,WAAW,EACX,WAAW,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAoB,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3E,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAER,IAAI,EAKJ,iBAAiB,EACjB,mBAAmB,EAGtB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGrF,eAAO,MAAM,uCAAuC,gCAAgC,CAAC;AAErF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAmBhD;;;;;GAKG;AACH,qBACa,sBAAsB;IAG/B,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEnC;;;OAGG;IACG,aAAa,CACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,gBAAgB,EAC5B,wBAAwB,EAAE,wBAAwB,EAClD,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,OAAO,EACpB,iBAAiB,CAAC,EAAE,iBAAiB,GACtC,OAAO,CAAC,qBAAqB,CAAC;IA6DjC;;OAEG;IACH,0BAA0B,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS;IA0BzH,SAAS,CAAC,qCAAqC,CAC3C,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAC1C,iBAAiB,CAAC,EAAE,iBAAiB,GACtC,aAAa,CAAC,+BAA+B,CAAC;IAyDjD;;;;;;;;;;OAUG;IACH,eAAe,CACX,QAAQ,EAAE,oBAAoB,EAAE,EAChC,wBAAwB,EAAE,wBAAwB,EAClD,KAAK,EAAE,MAAM,GACd;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,iBAAiB,EAAE,CAAA;KAAE;IAkHxD,SAAS,CAAC,qBAAqB,CAC3B,QAAQ,EAAE,oBAAoB,EAAE,EAChC,wBAAwB,EAAE,wBAAwB,GACnD,oBAAoB,EAAE;CAG5B;AA6fD,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,oBAAoB,EAAE,EAChC,wBAAwB,EAAE,wBAAwB,GACnD,oBAAoB,EAAE,CA0BxB"}
1
+ {"version":3,"file":"openai-response-api-utils.d.ts","sourceRoot":"","sources":["../../src/node/openai-response-api-utils.ts"],"names":[],"mappings":"AAgBA,OAAO,EAGH,oBAAoB,EACpB,qBAAqB,EACrB,+BAA+B,EAE/B,oBAAoB,EAGpB,WAAW,EACX,WAAW,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAA8B,OAAO,EAAE,MAAM,aAAa,CAAC;AAGrF,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAER,IAAI,EAKJ,iBAAiB,EACjB,mBAAmB,EAGtB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGrF,eAAO,MAAM,uCAAuC,gCAAgC,CAAC;AAErF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAmBhD;;;;;GAKG;AACH,qBACa,sBAAsB;IAG/B,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEnC;;;OAGG;IACG,aAAa,CACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,gBAAgB,EAC5B,wBAAwB,EAAE,wBAAwB,EAClD,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,OAAO,EACpB,iBAAiB,CAAC,EAAE,iBAAiB,GACtC,OAAO,CAAC,qBAAqB,CAAC;IA6DjC;;OAEG;IACH,0BAA0B,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,SAAS;IA0BzH;;;OAGG;IACH,uBAAuB,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,GAAG,SAAS;IAUrF;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,8BAA8B,cAAqB;IAEtE,SAAS,CAAC,+BAA+B,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUtH;;;OAGG;IACH,SAAS,CAAC,+BAA+B,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAU1H;;OAEG;IACG,gCAAgC,CAAC,CAAC,EACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,CAAC,CAAC;IAYb;;OAEG;IACI,kCAAkC,CACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,aAAa,CAAC,mBAAmB,CAAC,GAChF,aAAa,CAAC,mBAAmB,CAAC;IAgBrC,SAAS,CAAC,qCAAqC,CAC3C,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAC1C,iBAAiB,CAAC,EAAE,iBAAiB,GACtC,aAAa,CAAC,+BAA+B,CAAC;IA+DjD;;;;;;;;;;OAUG;IACH,eAAe,CACX,QAAQ,EAAE,oBAAoB,EAAE,EAChC,wBAAwB,EAAE,wBAAwB,EAClD,KAAK,EAAE,MAAM,GACd;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,iBAAiB,EAAE,CAAA;KAAE;IAkHxD,SAAS,CAAC,qBAAqB,CAC3B,QAAQ,EAAE,oBAAoB,EAAE,EAChC,wBAAwB,EAAE,wBAAwB,GACnD,oBAAoB,EAAE;CAG5B;AAsgBD,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,oBAAoB,EAAE,EAChC,wBAAwB,EAAE,wBAAwB,GACnD,oBAAoB,EAAE,CA0BxB"}
@@ -22,6 +22,7 @@ const ai_core_1 = require("@theia/ai-core");
22
22
  const core_1 = require("@theia/core");
23
23
  const promise_util_1 = require("@theia/core/lib/common/promise-util");
24
24
  const inversify_1 = require("@theia/core/shared/inversify");
25
+ const openai_1 = require("openai");
25
26
  const openai_server_tools_1 = require("./openai-server-tools");
26
27
  exports.OPENAI_FUNCTION_CALL_REASONING_DATA_KEY = 'openAiFunctionCallReasoning';
27
28
  /**
@@ -41,6 +42,13 @@ function openAiToolSearchFoundText(found) {
41
42
  * patterns for tool calling, keeping the main language model class clean and focused.
42
43
  */
43
44
  let OpenAiResponseApiUtils = class OpenAiResponseApiUtils {
45
+ constructor() {
46
+ /**
47
+ * Model ids whose organization rejected `reasoning.summary` (OpenAI requires a verified organization for summaries).
48
+ * Later requests to these models omit the field.
49
+ */
50
+ this.reasoningSummaryRejectedModels = new Set();
51
+ }
44
52
  /**
45
53
  * Handles Response API requests with proper tool calling cycles.
46
54
  * Works for both streaming and non-streaming cases.
@@ -60,21 +68,21 @@ let OpenAiResponseApiUtils = class OpenAiResponseApiUtils {
60
68
  // If no tools are provided, use simple response handling
61
69
  if (!tools || tools.length === 0) {
62
70
  if (isStreaming) {
63
- const stream = openai.responses.stream({
71
+ const stream = this.streamWithReasoningSummaryFallback(effectiveSettings, modelId, sentSettings => openai.responses.stream({
64
72
  model: model,
65
73
  instructions,
66
74
  input,
67
- ...effectiveSettings
68
- });
75
+ ...sentSettings
76
+ }));
69
77
  return { stream: this.createSimpleResponseApiStreamIterator(stream, cancellationToken) };
70
78
  }
71
79
  else {
72
- const response = await openai.responses.create({
80
+ const response = await this.sendWithReasoningSummaryFallback(effectiveSettings, modelId, sentSettings => openai.responses.create({
73
81
  model: model,
74
82
  instructions,
75
83
  input,
76
- ...effectiveSettings
77
- });
84
+ ...sentSettings
85
+ }));
78
86
  return {
79
87
  text: response.output_text || '',
80
88
  usage: response.usage ? {
@@ -116,8 +124,78 @@ let OpenAiResponseApiUtils = class OpenAiResponseApiUtils {
116
124
  this.logger.debug(`Converted ${(tools ?? []).length} tools for Response API:`, converted.map(t => t.type === 'function' ? t.name : t.type));
117
125
  return converted;
118
126
  }
127
+ /**
128
+ * Maps a reasoning-summary stream event to a thinking part. With `reasoning.summary` set, the Responses API streams
129
+ * one or more `summary_text` parts per reasoning item; parts after the first are separated by a blank line.
130
+ */
131
+ reasoningSummaryThought(event) {
132
+ if (event.type === 'response.reasoning_summary_part.added') {
133
+ return event.summary_index > 0 ? { thought: '\n\n', signature: '' } : undefined;
134
+ }
135
+ if (event.type === 'response.reasoning_summary_text.delta') {
136
+ return { thought: event.delta, signature: '' };
137
+ }
138
+ return undefined;
139
+ }
140
+ withoutRejectedReasoningSummary(settings, modelId) {
141
+ const reasoning = settings.reasoning;
142
+ if (!this.reasoningSummaryRejectedModels.has(modelId) || !(0, core_1.isObject)(reasoning) || !('summary' in reasoning)) {
143
+ return settings;
144
+ }
145
+ const withoutSummary = { ...reasoning };
146
+ delete withoutSummary.summary;
147
+ return { ...settings, reasoning: withoutSummary };
148
+ }
149
+ /**
150
+ * Returns `true` and remembers the rejection when `error` is the 400 an unverified organization gets for `reasoning.summary`,
151
+ * so the request can be sent once more without it.
152
+ */
153
+ handleReasoningSummaryRejection(error, sentSettings, modelId) {
154
+ const reasoning = sentSettings.reasoning;
155
+ if (!(error instanceof openai_1.OpenAI.BadRequestError) || error.param !== 'reasoning.summary' || !(0, core_1.isObject)(reasoning) || !('summary' in reasoning)) {
156
+ return false;
157
+ }
158
+ this.logger.warn(`Model ${modelId} rejected reasoning summaries (${error.message}); continuing without them.`);
159
+ this.reasoningSummaryRejectedModels.add(modelId);
160
+ return true;
161
+ }
162
+ /**
163
+ * Sends a Responses API request, retrying once without `reasoning.summary` if the organization is not allowed to request it.
164
+ */
165
+ async sendWithReasoningSummaryFallback(settings, modelId, send) {
166
+ const sentSettings = this.withoutRejectedReasoningSummary(settings, modelId);
167
+ try {
168
+ return await send(sentSettings);
169
+ }
170
+ catch (error) {
171
+ if (!this.handleReasoningSummaryRejection(error, sentSettings, modelId)) {
172
+ throw error;
173
+ }
174
+ return send(this.withoutRejectedReasoningSummary(settings, modelId));
175
+ }
176
+ }
177
+ /**
178
+ * Streaming counterpart of {@link sendWithReasoningSummaryFallback}. The rejection arrives before any event, so nothing is emitted twice.
179
+ */
180
+ async *streamWithReasoningSummaryFallback(settings, modelId, open) {
181
+ const sentSettings = this.withoutRejectedReasoningSummary(settings, modelId);
182
+ let received = false;
183
+ try {
184
+ for await (const event of open(sentSettings)) {
185
+ received = true;
186
+ yield event;
187
+ }
188
+ }
189
+ catch (error) {
190
+ if (received || !this.handleReasoningSummaryRejection(error, sentSettings, modelId)) {
191
+ throw error;
192
+ }
193
+ yield* open(this.withoutRejectedReasoningSummary(settings, modelId));
194
+ }
195
+ }
119
196
  createSimpleResponseApiStreamIterator(stream, cancellationToken) {
120
197
  const logger = this.logger;
198
+ const reasoningSummaryThought = (event) => this.reasoningSummaryThought(event);
121
199
  return {
122
200
  async *[Symbol.asyncIterator]() {
123
201
  let lastUsage;
@@ -132,6 +210,12 @@ let OpenAiResponseApiUtils = class OpenAiResponseApiUtils {
132
210
  content: event.delta
133
211
  };
134
212
  }
213
+ else if (event.type === 'response.reasoning_summary_part.added' || event.type === 'response.reasoning_summary_text.delta') {
214
+ const thought = reasoningSummaryThought(event);
215
+ if (thought) {
216
+ yield thought;
217
+ }
218
+ }
135
219
  else if (event.type === 'response.output_item.done' && event.item?.type === 'compaction') {
136
220
  yield {
137
221
  compaction: {
@@ -412,13 +496,13 @@ class ResponseApiToolCallIterator {
412
496
  this.currentWebSearchReplayItems = [];
413
497
  if (this.isStreaming) {
414
498
  // Use streaming API
415
- const stream = this.openai.responses.stream({
499
+ const stream = this.utils.streamWithReasoningSummaryFallback(this.settings, this.modelId, settings => this.openai.responses.stream({
416
500
  model: this.model,
417
501
  instructions: this.instructions,
418
502
  input: this.currentInput,
419
503
  tools: this.tools,
420
- ...this.settings
421
- });
504
+ ...settings
505
+ }));
422
506
  for await (const event of stream) {
423
507
  if (this.cancellationToken?.isCancellationRequested) {
424
508
  break;
@@ -432,13 +516,13 @@ class ResponseApiToolCallIterator {
432
516
  }
433
517
  }
434
518
  async processNonStreamingResponse() {
435
- const response = await this.openai.responses.create({
519
+ const response = await this.utils.sendWithReasoningSummaryFallback(this.settings, this.modelId, settings => this.openai.responses.create({
436
520
  model: this.model,
437
521
  instructions: this.instructions,
438
522
  input: this.currentInput,
439
523
  tools: this.tools,
440
- ...this.settings
441
- });
524
+ ...settings
525
+ }));
442
526
  // Record token usage
443
527
  if (response.usage) {
444
528
  this.handleIncoming({
@@ -527,6 +611,14 @@ class ResponseApiToolCallIterator {
527
611
  this.pendingReasoningItems = [];
528
612
  }
529
613
  break;
614
+ case 'response.reasoning_summary_part.added':
615
+ case 'response.reasoning_summary_text.delta': {
616
+ const thought = this.utils.reasoningSummaryThought(event);
617
+ if (thought) {
618
+ this.handleIncoming(thought);
619
+ }
620
+ break;
621
+ }
530
622
  case 'response.completed':
531
623
  if (event.response?.usage) {
532
624
  this.handleIncoming({