zelari-code 1.37.0 → 1.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/chatgptOAuth.js +142 -43
- package/dist/cli/chatgptOAuth.js.map +1 -1
- package/dist/cli/desktopConfig.js +8 -2
- package/dist/cli/desktopConfig.js.map +1 -1
- package/dist/cli/main.bundled.js +384 -124
- package/dist/cli/main.bundled.js.map +4 -4
- package/dist/cli/modelDiscovery.js +22 -33
- package/dist/cli/modelDiscovery.js.map +1 -1
- package/dist/cli/oauthDesktop.js +3 -3
- package/dist/cli/provider/anthropic.js +1 -1
- package/dist/cli/provider/anthropic.js.map +1 -1
- package/dist/cli/provider/chatgpt.js +1 -1
- package/dist/cli/provider/chatgpt.js.map +1 -1
- package/dist/cli/provider/openai-compatible.js +1 -1
- package/dist/cli/provider/openai-compatible.js.map +1 -1
- package/dist/cli/providerConfig.js +5 -5
- package/dist/cli/providerConfig.js.map +1 -1
- package/dist/cli/slashHandlers/provider.js +3 -3
- package/dist/cli/slashHandlers/provider.js.map +1 -1
- package/dist/cli/thinking.js +102 -43
- package/dist/cli/thinking.js.map +1 -1
- package/dist/cli/thinking.test.js +125 -4
- package/dist/cli/thinking.test.js.map +1 -1
- package/dist/cli/thinkingCapability.js +160 -0
- package/dist/cli/thinkingCapability.js.map +1 -0
- package/package.json +2 -2
package/dist/cli/thinking.js
CHANGED
|
@@ -1,37 +1,77 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* thinking — unified "thinking effort" selection for all providers.
|
|
3
3
|
*
|
|
4
|
-
* ADR-0017. A single `ThinkingSpec` abstraction is translated, per provider
|
|
5
|
-
* into the vendor-specific request parameters
|
|
6
|
-
* reasons before answering:
|
|
4
|
+
* ADR-0017. A single `ThinkingSpec` abstraction is translated, per provider
|
|
5
|
+
* (and, when known, per model), into the vendor-specific request parameters
|
|
6
|
+
* that control how much the model reasons before answering:
|
|
7
7
|
*
|
|
8
|
-
* - OpenAI / xAI → `reasoning_effort` enum (low/medium/high).
|
|
9
|
-
* -
|
|
8
|
+
* - OpenAI / xAI → `reasoning_effort` enum (low/medium/high/xhigh).
|
|
9
|
+
* - ChatGPT Responses → `reasoning.effort` (low/medium/high/xhigh/max).
|
|
10
|
+
* - Anthropic → `thinking` budget block, or `output_config.effort` on 4.6+.
|
|
11
|
+
* - GLM-4.x → `thinking` budget block; GLM-5.x → `reasoning_effort` + toggle.
|
|
10
12
|
* - DeepSeek → `thinking` toggle + `reasoning_effort` (high/max).
|
|
11
|
-
* - OpenAI Responses (ChatGPT) → `reasoning.effort`.
|
|
12
13
|
*
|
|
13
14
|
* Any unsupported combination degrades to `'auto'` (no parameter sent → the
|
|
14
15
|
* provider default) with a `degraded: true` flag + a human-readable `note`,
|
|
15
|
-
* never an error.
|
|
16
|
-
*
|
|
16
|
+
* never an error. Levels that exist on the family but not on this model are
|
|
17
|
+
* *clamped* to the nearest native value (still sent) instead of dropped.
|
|
17
18
|
*/
|
|
19
|
+
import { THINKING_EFFORTS, thinkingCapabilityFor, effortLevelsFor, grokHasXhigh, gptHasXhigh, gptHasMax, claudeHasMax, claudeHasXhigh, glmHasEffortScale, thinkingSelectOptions, } from './thinkingCapability.js';
|
|
20
|
+
export { THINKING_EFFORTS, thinkingCapabilityFor, effortLevelsFor, grokHasXhigh, gptHasXhigh, gptHasMax, claudeHasMax, claudeHasXhigh, glmHasEffortScale, thinkingSelectOptions, };
|
|
18
21
|
/**
|
|
19
22
|
* Capability table (per ADR-0017). Effort = reasoning_effort enum; budget =
|
|
20
|
-
* budget_tokens block.
|
|
21
|
-
*
|
|
23
|
+
* budget_tokens block. Extra native levels (xhigh/max) are model-gated via
|
|
24
|
+
* `effortLevelsFor`.
|
|
22
25
|
*/
|
|
23
26
|
export const PROVIDER_THINKING_CAPABILITY = {
|
|
24
27
|
'openai-compatible': { effort: true },
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
grok: { effort: true },
|
|
29
|
+
chatgpt: { effort: true },
|
|
30
|
+
anthropic: { budget: true },
|
|
31
|
+
glm: { budget: true },
|
|
32
|
+
deepseek: { effort: true },
|
|
33
|
+
minimax: { effort: true },
|
|
34
|
+
custom: { effort: true },
|
|
32
35
|
};
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
const EFFORT_RANK = {
|
|
37
|
+
low: 1,
|
|
38
|
+
medium: 2,
|
|
39
|
+
high: 3,
|
|
40
|
+
xhigh: 4,
|
|
41
|
+
max: 5,
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Clamp a requested effort to the nearest native level for this model.
|
|
45
|
+
* Returns the original value when it is already native.
|
|
46
|
+
*/
|
|
47
|
+
export function clampEffort(id, model, requested) {
|
|
48
|
+
const native = effortLevelsFor(id, model);
|
|
49
|
+
if (native.includes(requested)) {
|
|
50
|
+
return { effort: requested, clamped: false };
|
|
51
|
+
}
|
|
52
|
+
if (native.length === 0) {
|
|
53
|
+
return {
|
|
54
|
+
effort: requested,
|
|
55
|
+
clamped: true,
|
|
56
|
+
note: `thinking '${requested}' is not supported for provider "${id}"`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const want = EFFORT_RANK[requested];
|
|
60
|
+
let best = native[0];
|
|
61
|
+
let bestDist = Math.abs(EFFORT_RANK[best] - want);
|
|
62
|
+
for (const level of native) {
|
|
63
|
+
const dist = Math.abs(EFFORT_RANK[level] - want);
|
|
64
|
+
if (dist < bestDist || (dist === bestDist && EFFORT_RANK[level] > EFFORT_RANK[best])) {
|
|
65
|
+
best = level;
|
|
66
|
+
bestDist = dist;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const label = model ? `${id}/${model}` : id;
|
|
70
|
+
return {
|
|
71
|
+
effort: best,
|
|
72
|
+
clamped: true,
|
|
73
|
+
note: `'${requested}' is not native on ${label} — using '${best}'`,
|
|
74
|
+
};
|
|
35
75
|
}
|
|
36
76
|
/** Canonical string form used for persistence + CLI/slash surfaces. */
|
|
37
77
|
export function stringifyThinkingSpec(spec) {
|
|
@@ -50,8 +90,9 @@ export function parseThinkingSpec(raw) {
|
|
|
50
90
|
return 'auto';
|
|
51
91
|
if (s === 'off')
|
|
52
92
|
return { kind: 'off' };
|
|
53
|
-
if (s
|
|
93
|
+
if (THINKING_EFFORTS.includes(s)) {
|
|
54
94
|
return { kind: 'effort', effort: s };
|
|
95
|
+
}
|
|
55
96
|
const m = /^budget:(\d+)$/.exec(s);
|
|
56
97
|
if (m) {
|
|
57
98
|
const n = Number.parseInt(m[1], 10);
|
|
@@ -63,47 +104,57 @@ export function parseThinkingSpec(raw) {
|
|
|
63
104
|
/** Strict validity check for interactive surfaces (distinguishes 'auto' from garbage). */
|
|
64
105
|
export function isValidThinkingInput(raw) {
|
|
65
106
|
const s = raw.trim().toLowerCase();
|
|
66
|
-
if (s === 'auto' || s === 'off'
|
|
107
|
+
if (s === 'auto' || s === 'off')
|
|
108
|
+
return true;
|
|
109
|
+
if (THINKING_EFFORTS.includes(s))
|
|
67
110
|
return true;
|
|
68
111
|
return /^budget:\d+$/.test(s) && Number.parseInt(s.slice(7), 10) > 0;
|
|
69
112
|
}
|
|
70
113
|
function degrade(note) {
|
|
71
114
|
return { patch: {}, degraded: true, note };
|
|
72
115
|
}
|
|
116
|
+
function withClampNote(patch, clamped, note) {
|
|
117
|
+
return { patch, degraded: false, note: clamped ? note : undefined };
|
|
118
|
+
}
|
|
73
119
|
/**
|
|
74
120
|
* OpenAI chat.completions adapter (grok, glm, minimax, deepseek,
|
|
75
121
|
* openai-compatible, custom). Maps a ThinkingSpec to the fields the
|
|
76
122
|
* chat.completions body accepts.
|
|
77
123
|
*/
|
|
78
|
-
export function translateOpenAiCompatibleThinking(providerId, spec) {
|
|
124
|
+
export function translateOpenAiCompatibleThinking(providerId, spec, model) {
|
|
79
125
|
if (spec === 'auto')
|
|
80
126
|
return { patch: {}, degraded: false };
|
|
81
|
-
const cap = thinkingCapabilityFor(providerId);
|
|
127
|
+
const cap = thinkingCapabilityFor(providerId, model);
|
|
82
128
|
switch (spec.kind) {
|
|
83
129
|
case 'off':
|
|
84
|
-
// Providers with a thinking toggle disable it; effort-enum providers
|
|
85
|
-
// have no true "off" — degrade to the cheapest effort instead.
|
|
86
130
|
if (providerId === 'deepseek' || providerId === 'glm') {
|
|
87
131
|
return { patch: { thinking: { type: 'disabled' } }, degraded: false };
|
|
88
132
|
}
|
|
89
133
|
if (cap.effort)
|
|
90
134
|
return { patch: { reasoning_effort: 'low' }, degraded: false };
|
|
91
135
|
return degrade(`thinking 'off' is not supported for provider "${providerId}"`);
|
|
92
|
-
case 'effort':
|
|
93
|
-
if (!cap.effort) {
|
|
136
|
+
case 'effort': {
|
|
137
|
+
if (!cap.effort && !cap.efforts?.length) {
|
|
94
138
|
return degrade(`thinking 'effort' is not supported for provider "${providerId}"`);
|
|
95
139
|
}
|
|
140
|
+
const resolved = clampEffort(providerId, model, spec.effort);
|
|
96
141
|
if (providerId === 'deepseek') {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
reasoning_effort: spec.effort === 'high' ? 'max' : 'high',
|
|
102
|
-
},
|
|
103
|
-
degraded: false,
|
|
104
|
-
};
|
|
142
|
+
return withClampNote({
|
|
143
|
+
thinking: { type: 'enabled' },
|
|
144
|
+
reasoning_effort: resolved.effort === 'max' ? 'max' : 'high',
|
|
145
|
+
}, resolved.clamped, resolved.note);
|
|
105
146
|
}
|
|
106
|
-
|
|
147
|
+
if (providerId === 'glm') {
|
|
148
|
+
if (!glmHasEffortScale(model)) {
|
|
149
|
+
return degrade(`thinking 'effort' is not supported for GLM ${model || '4.x'} — use budget:N`);
|
|
150
|
+
}
|
|
151
|
+
return withClampNote({
|
|
152
|
+
thinking: { type: 'enabled' },
|
|
153
|
+
reasoning_effort: resolved.effort,
|
|
154
|
+
}, resolved.clamped, resolved.note);
|
|
155
|
+
}
|
|
156
|
+
return withClampNote({ reasoning_effort: resolved.effort }, resolved.clamped, resolved.note);
|
|
157
|
+
}
|
|
107
158
|
case 'budget':
|
|
108
159
|
if (!cap.budget) {
|
|
109
160
|
return degrade(`thinking 'budget' is not supported for provider "${providerId}"`);
|
|
@@ -115,21 +166,23 @@ export function translateOpenAiCompatibleThinking(providerId, spec) {
|
|
|
115
166
|
}
|
|
116
167
|
}
|
|
117
168
|
/** OpenAI Responses adapter (chatgpt). */
|
|
118
|
-
export function translateResponsesThinking(spec) {
|
|
169
|
+
export function translateResponsesThinking(spec, model) {
|
|
119
170
|
if (spec === 'auto')
|
|
120
171
|
return { patch: {}, degraded: false };
|
|
121
172
|
switch (spec.kind) {
|
|
122
173
|
case 'off':
|
|
123
174
|
// Responses API has no hard off; 'minimal' is the cheapest effort.
|
|
124
175
|
return { patch: { reasoning: { effort: 'minimal' } }, degraded: false };
|
|
125
|
-
case 'effort':
|
|
126
|
-
|
|
176
|
+
case 'effort': {
|
|
177
|
+
const resolved = clampEffort('chatgpt', model, spec.effort);
|
|
178
|
+
return withClampNote({ reasoning: { effort: resolved.effort } }, resolved.clamped, resolved.note);
|
|
179
|
+
}
|
|
127
180
|
case 'budget':
|
|
128
|
-
return degrade('thinking "budget" is not supported for chatgpt — use low/medium/high');
|
|
181
|
+
return degrade('thinking "budget" is not supported for chatgpt — use low/medium/high/xhigh/max');
|
|
129
182
|
}
|
|
130
183
|
}
|
|
131
184
|
/** Anthropic Messages adapter. */
|
|
132
|
-
export function translateAnthropicThinking(spec) {
|
|
185
|
+
export function translateAnthropicThinking(spec, model) {
|
|
133
186
|
if (spec === 'auto')
|
|
134
187
|
return { patch: {}, degraded: false };
|
|
135
188
|
switch (spec.kind) {
|
|
@@ -140,8 +193,14 @@ export function translateAnthropicThinking(spec) {
|
|
|
140
193
|
patch: { thinking: { type: 'enabled', budget_tokens: spec.budgetTokens } },
|
|
141
194
|
degraded: false,
|
|
142
195
|
};
|
|
143
|
-
case 'effort':
|
|
144
|
-
|
|
196
|
+
case 'effort': {
|
|
197
|
+
const levels = effortLevelsFor('anthropic', model);
|
|
198
|
+
if (levels.length === 0) {
|
|
199
|
+
return degrade('thinking "effort" is not supported for this Claude model — use budget:N');
|
|
200
|
+
}
|
|
201
|
+
const resolved = clampEffort('anthropic', model, spec.effort);
|
|
202
|
+
return withClampNote({ output_config: { effort: resolved.effort } }, resolved.clamped, resolved.note);
|
|
203
|
+
}
|
|
145
204
|
}
|
|
146
205
|
}
|
|
147
206
|
//# sourceMappingURL=thinking.js.map
|
package/dist/cli/thinking.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thinking.js","sourceRoot":"","sources":["../../src/cli/thinking.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"thinking.js","sourceRoot":"","sources":["../../src/cli/thinking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAGL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,SAAS,EACT,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,SAAS,EACT,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,qBAAqB,GACtB,CAAC;AAQF;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAA6C;IACpF,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IACrC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IACtB,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IACzB,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IAC3B,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IACrB,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IAC1B,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IACzB,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;CACzB,CAAC;AAEF,MAAM,WAAW,GAAmC;IAClD,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,GAAG,EAAE,CAAC;CACP,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,EAAgB,EAChB,KAAyB,EACzB,SAAyB;IAEzB,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,aAAa,SAAS,oCAAoC,EAAE,GAAG;SACtE,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACjD,IAAI,IAAI,GAAG,QAAQ,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACrF,IAAI,GAAG,KAAK,CAAC;YACb,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,IAAI,SAAS,sBAAsB,KAAK,aAAa,IAAI,GAAG;KACnE,CAAC;AACJ,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,qBAAqB,CAAC,IAAkB;IACtD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IAC/C,OAAO,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;AACvC,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,iBAAiB,CAAC,GAA8B;IAC9D,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACtC,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxC,IAAK,gBAAsC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAmB,EAAE,CAAC;IACzD,CAAC;IACD,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC;QACN,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAK,gBAAsC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACrE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC;AAWD,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CACpB,KAA8B,EAC9B,OAAgB,EAChB,IAAa;IAEb,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iCAAiC,CAC/C,UAAwB,EACxB,IAAkB,EAClB,KAAc;IAEd,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3D,MAAM,GAAG,GAAG,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACrD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,IAAI,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;gBACtD,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACxE,CAAC;YACD,IAAI,GAAG,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC/E,OAAO,OAAO,CAAC,iDAAiD,UAAU,GAAG,CAAC,CAAC;QACjF,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;gBACxC,OAAO,OAAO,CAAC,oDAAoD,UAAU,GAAG,CAAC,CAAC;YACpF,CAAC;YACD,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7D,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC9B,OAAO,aAAa,CAClB;oBACE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC7B,gBAAgB,EAAE,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;iBAC7D,EACD,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,IAAI,CACd,CAAC;YACJ,CAAC;YACD,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,OAAO,OAAO,CAAC,8CAA8C,KAAK,IAAI,KAAK,iBAAiB,CAAC,CAAC;gBAChG,CAAC;gBACD,OAAO,aAAa,CAClB;oBACE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC7B,gBAAgB,EAAE,QAAQ,CAAC,MAAM;iBAClC,EACD,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,IAAI,CACd,CAAC;YACJ,CAAC;YACD,OAAO,aAAa,CAClB,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,EAAE,EACrC,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,IAAI,CACd,CAAC;QACJ,CAAC;QACD,KAAK,QAAQ;YACX,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,OAAO,CAAC,oDAAoD,UAAU,GAAG,CAAC,CAAC;YACpF,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE;gBAC1E,QAAQ,EAAE,KAAK;aAChB,CAAC;IACN,CAAC;AACH,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,0BAA0B,CACxC,IAAkB,EAClB,KAAc;IAEd,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,mEAAmE;YACnE,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC1E,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5D,OAAO,aAAa,CAClB,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,EAC1C,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,IAAI,CACd,CAAC;QACJ,CAAC;QACD,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,gFAAgF,CAAC,CAAC;IACrG,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,0BAA0B,CACxC,IAAkB,EAClB,KAAc;IAEd,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,KAAK;YACR,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACxE,KAAK,QAAQ;YACX,OAAO;gBACL,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE;gBAC1E,QAAQ,EAAE,KAAK;aAChB,CAAC;QACJ,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,OAAO,CAAC,yEAAyE,CAAC,CAAC;YAC5F,CAAC;YACD,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9D,OAAO,aAAa,CAClB,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,EAC9C,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,IAAI,CACd,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { parseThinkingSpec, stringifyThinkingSpec, isValidThinkingInput, thinkingCapabilityFor, translateOpenAiCompatibleThinking, translateResponsesThinking, translateAnthropicThinking, } from './thinking.js';
|
|
2
|
+
import { parseThinkingSpec, stringifyThinkingSpec, isValidThinkingInput, thinkingCapabilityFor, effortLevelsFor, thinkingSelectOptions, clampEffort, translateOpenAiCompatibleThinking, translateResponsesThinking, translateAnthropicThinking, } from './thinking.js';
|
|
3
3
|
describe('parseThinkingSpec', () => {
|
|
4
4
|
it('maps canonical strings', () => {
|
|
5
5
|
expect(parseThinkingSpec('auto')).toBe('auto');
|
|
@@ -7,6 +7,8 @@ describe('parseThinkingSpec', () => {
|
|
|
7
7
|
expect(parseThinkingSpec('off')).toEqual({ kind: 'off' });
|
|
8
8
|
expect(parseThinkingSpec('low')).toEqual({ kind: 'effort', effort: 'low' });
|
|
9
9
|
expect(parseThinkingSpec('high')).toEqual({ kind: 'effort', effort: 'high' });
|
|
10
|
+
expect(parseThinkingSpec('xhigh')).toEqual({ kind: 'effort', effort: 'xhigh' });
|
|
11
|
+
expect(parseThinkingSpec('max')).toEqual({ kind: 'effort', effort: 'max' });
|
|
10
12
|
expect(parseThinkingSpec('budget:16000')).toEqual({ kind: 'budget', budgetTokens: 16000 });
|
|
11
13
|
});
|
|
12
14
|
it('degrades unknown input to auto (never throws)', () => {
|
|
@@ -18,6 +20,8 @@ describe('parseThinkingSpec', () => {
|
|
|
18
20
|
describe('stringifyThinkingSpec / isValidThinkingInput', () => {
|
|
19
21
|
it('round-trips', () => {
|
|
20
22
|
expect(stringifyThinkingSpec(parseThinkingSpec('high'))).toBe('high');
|
|
23
|
+
expect(stringifyThinkingSpec(parseThinkingSpec('xhigh'))).toBe('xhigh');
|
|
24
|
+
expect(stringifyThinkingSpec(parseThinkingSpec('max'))).toBe('max');
|
|
21
25
|
expect(stringifyThinkingSpec(parseThinkingSpec('budget:16000'))).toBe('budget:16000');
|
|
22
26
|
expect(stringifyThinkingSpec('auto')).toBe('auto');
|
|
23
27
|
});
|
|
@@ -25,18 +29,84 @@ describe('stringifyThinkingSpec / isValidThinkingInput', () => {
|
|
|
25
29
|
expect(isValidThinkingInput('auto')).toBe(true);
|
|
26
30
|
expect(isValidThinkingInput('off')).toBe(true);
|
|
27
31
|
expect(isValidThinkingInput('medium')).toBe(true);
|
|
32
|
+
expect(isValidThinkingInput('xhigh')).toBe(true);
|
|
33
|
+
expect(isValidThinkingInput('max')).toBe(true);
|
|
28
34
|
expect(isValidThinkingInput('budget:16000')).toBe(true);
|
|
29
35
|
expect(isValidThinkingInput('garbage')).toBe(false);
|
|
30
36
|
expect(isValidThinkingInput('budget:0')).toBe(false);
|
|
31
37
|
});
|
|
32
38
|
});
|
|
33
|
-
describe('thinkingCapabilityFor', () => {
|
|
39
|
+
describe('thinkingCapabilityFor / effortLevelsFor', () => {
|
|
34
40
|
it('flags effort vs budget providers', () => {
|
|
35
41
|
expect(thinkingCapabilityFor('grok').effort).toBe(true);
|
|
36
42
|
expect(thinkingCapabilityFor('anthropic').budget).toBe(true);
|
|
37
43
|
expect(thinkingCapabilityFor('glm').budget).toBe(true);
|
|
38
44
|
expect(thinkingCapabilityFor('deepseek').effort).toBe(true);
|
|
39
45
|
});
|
|
46
|
+
it('gates xhigh/max on the model family', () => {
|
|
47
|
+
expect(effortLevelsFor('grok', 'grok-4.5')).toEqual(['low', 'medium', 'high']);
|
|
48
|
+
expect(effortLevelsFor('grok', 'grok-4.6')).toEqual(['low', 'medium', 'high', 'xhigh']);
|
|
49
|
+
expect(effortLevelsFor('chatgpt', 'gpt-5.2-codex')).toEqual(['low', 'medium', 'high']);
|
|
50
|
+
expect(effortLevelsFor('chatgpt', 'gpt-5.4')).toEqual(['low', 'medium', 'high', 'xhigh']);
|
|
51
|
+
expect(effortLevelsFor('chatgpt', 'gpt-5.6-codex')).toEqual(['low', 'medium', 'high', 'xhigh', 'max']);
|
|
52
|
+
expect(effortLevelsFor('deepseek', 'deepseek-v4-pro')).toEqual(['high', 'max']);
|
|
53
|
+
expect(effortLevelsFor('anthropic', 'claude-sonnet-4-5')).toEqual([]);
|
|
54
|
+
expect(effortLevelsFor('anthropic', 'claude-sonnet-4-6')).toEqual(['high', 'max']);
|
|
55
|
+
expect(effortLevelsFor('anthropic', 'claude-opus-4-7')).toEqual(['high', 'xhigh', 'max']);
|
|
56
|
+
expect(effortLevelsFor('glm', 'glm-4.6')).toEqual([]);
|
|
57
|
+
expect(effortLevelsFor('glm', 'glm-5.3')).toEqual(['low', 'high', 'max']);
|
|
58
|
+
expect(effortLevelsFor('minimax', 'MiniMax-M2.5')).toEqual(['low', 'medium', 'high']);
|
|
59
|
+
});
|
|
60
|
+
it('exposes native efforts on the capability snapshot', () => {
|
|
61
|
+
expect(thinkingCapabilityFor('grok', 'grok-4.6').efforts).toContain('xhigh');
|
|
62
|
+
expect(thinkingCapabilityFor('chatgpt', 'gpt-5.6').efforts).toContain('max');
|
|
63
|
+
expect(thinkingCapabilityFor('anthropic', 'claude-sonnet-4-6').effort).toBe(true);
|
|
64
|
+
expect(thinkingCapabilityFor('anthropic', 'claude-sonnet-4-6').budget).toBe(true);
|
|
65
|
+
expect(thinkingCapabilityFor('glm', 'glm-5.3').budget).toBe(false);
|
|
66
|
+
expect(thinkingCapabilityFor('glm', 'glm-5.3').effort).toBe(true);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('thinkingSelectOptions', () => {
|
|
70
|
+
it('shows xHigh for grok-4.6 and not grok-4.5', () => {
|
|
71
|
+
const v46 = thinkingSelectOptions('grok', 'grok-4.6').map((o) => o.value);
|
|
72
|
+
const v45 = thinkingSelectOptions('grok', 'grok-4.5').map((o) => o.value);
|
|
73
|
+
expect(v46).toEqual(['auto', 'off', 'low', 'medium', 'high', 'xhigh']);
|
|
74
|
+
expect(v45).toEqual(['auto', 'off', 'low', 'medium', 'high']);
|
|
75
|
+
});
|
|
76
|
+
it('shows Max (not Low/Medium) for DeepSeek regardless of model id', () => {
|
|
77
|
+
const v = thinkingSelectOptions('deepseek', 'deepseek-v4-flash').map((o) => o.value);
|
|
78
|
+
expect(v).toEqual(['auto', 'off', 'high', 'max']);
|
|
79
|
+
expect(v).not.toContain('low');
|
|
80
|
+
expect(v).not.toContain('medium');
|
|
81
|
+
});
|
|
82
|
+
it('shows xHigh+Max for gpt-5.6-codex', () => {
|
|
83
|
+
const v = thinkingSelectOptions('chatgpt', 'gpt-5.6-codex').map((o) => o.value);
|
|
84
|
+
expect(v).toContain('xhigh');
|
|
85
|
+
expect(v).toContain('max');
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('clampEffort', () => {
|
|
89
|
+
it('keeps native levels', () => {
|
|
90
|
+
expect(clampEffort('grok', 'grok-4.6', 'xhigh')).toEqual({
|
|
91
|
+
effort: 'xhigh',
|
|
92
|
+
clamped: false,
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
it('clamps xhigh on grok-4.5 to high', () => {
|
|
96
|
+
const r = clampEffort('grok', 'grok-4.5', 'xhigh');
|
|
97
|
+
expect(r.effort).toBe('high');
|
|
98
|
+
expect(r.clamped).toBe(true);
|
|
99
|
+
});
|
|
100
|
+
it('clamps xhigh on glm-5.3 to max', () => {
|
|
101
|
+
const r = clampEffort('glm', 'glm-5.3', 'xhigh');
|
|
102
|
+
expect(r.effort).toBe('max');
|
|
103
|
+
expect(r.clamped).toBe(true);
|
|
104
|
+
});
|
|
105
|
+
it('clamps low on deepseek to high', () => {
|
|
106
|
+
const r = clampEffort('deepseek', 'deepseek-v4-pro', 'low');
|
|
107
|
+
expect(r.effort).toBe('high');
|
|
108
|
+
expect(r.clamped).toBe(true);
|
|
109
|
+
});
|
|
40
110
|
});
|
|
41
111
|
describe('translateOpenAiCompatibleThinking', () => {
|
|
42
112
|
it('auto → empty patch', () => {
|
|
@@ -50,6 +120,37 @@ describe('translateOpenAiCompatibleThinking', () => {
|
|
|
50
120
|
expect(translateOpenAiCompatibleThinking('grok', { kind: 'effort', effort: 'high' }))
|
|
51
121
|
.toEqual({ patch: { reasoning_effort: 'high' }, degraded: false });
|
|
52
122
|
});
|
|
123
|
+
it('xhigh on grok-4.6 is sent native', () => {
|
|
124
|
+
expect(translateOpenAiCompatibleThinking('grok', { kind: 'effort', effort: 'xhigh' }, 'grok-4.6'))
|
|
125
|
+
.toEqual({ patch: { reasoning_effort: 'xhigh' }, degraded: false });
|
|
126
|
+
});
|
|
127
|
+
it('xhigh on grok-4.5 clamps to high (still sent)', () => {
|
|
128
|
+
const r = translateOpenAiCompatibleThinking('grok', { kind: 'effort', effort: 'xhigh' }, 'grok-4.5');
|
|
129
|
+
expect(r.patch).toEqual({ reasoning_effort: 'high' });
|
|
130
|
+
expect(r.degraded).toBe(false);
|
|
131
|
+
expect(r.note).toMatch(/xhigh/);
|
|
132
|
+
});
|
|
133
|
+
it('max on deepseek is sent native', () => {
|
|
134
|
+
expect(translateOpenAiCompatibleThinking('deepseek', { kind: 'effort', effort: 'max' }, 'deepseek-v4-pro'))
|
|
135
|
+
.toEqual({
|
|
136
|
+
patch: { thinking: { type: 'enabled' }, reasoning_effort: 'max' },
|
|
137
|
+
degraded: false,
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
it('high on deepseek stays high (max is a separate level)', () => {
|
|
141
|
+
expect(translateOpenAiCompatibleThinking('deepseek', { kind: 'effort', effort: 'high' }))
|
|
142
|
+
.toEqual({
|
|
143
|
+
patch: { thinking: { type: 'enabled' }, reasoning_effort: 'high' },
|
|
144
|
+
degraded: false,
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
it('glm-5.3 effort uses reasoning_effort + thinking toggle', () => {
|
|
148
|
+
expect(translateOpenAiCompatibleThinking('glm', { kind: 'effort', effort: 'max' }, 'glm-5.3'))
|
|
149
|
+
.toEqual({
|
|
150
|
+
patch: { thinking: { type: 'enabled' }, reasoning_effort: 'max' },
|
|
151
|
+
degraded: false,
|
|
152
|
+
});
|
|
153
|
+
});
|
|
53
154
|
it('budget on effort-only providers degrades to auto', () => {
|
|
54
155
|
const r = translateOpenAiCompatibleThinking('grok', { kind: 'budget', budgetTokens: 1000 });
|
|
55
156
|
expect(r.degraded).toBe(true);
|
|
@@ -73,6 +174,18 @@ describe('translateResponsesThinking', () => {
|
|
|
73
174
|
expect(translateResponsesThinking({ kind: 'effort', effort: 'high' }))
|
|
74
175
|
.toEqual({ patch: { reasoning: { effort: 'high' } }, degraded: false });
|
|
75
176
|
});
|
|
177
|
+
it('xhigh/max on gpt-5.6 are sent native', () => {
|
|
178
|
+
expect(translateResponsesThinking({ kind: 'effort', effort: 'xhigh' }, 'gpt-5.6'))
|
|
179
|
+
.toEqual({ patch: { reasoning: { effort: 'xhigh' } }, degraded: false });
|
|
180
|
+
expect(translateResponsesThinking({ kind: 'effort', effort: 'max' }, 'gpt-5.6-codex'))
|
|
181
|
+
.toEqual({ patch: { reasoning: { effort: 'max' } }, degraded: false });
|
|
182
|
+
});
|
|
183
|
+
it('max on gpt-5.2 clamps to high', () => {
|
|
184
|
+
const r = translateResponsesThinking({ kind: 'effort', effort: 'max' }, 'gpt-5.2-codex');
|
|
185
|
+
expect(r.patch).toEqual({ reasoning: { effort: 'high' } });
|
|
186
|
+
expect(r.degraded).toBe(false);
|
|
187
|
+
expect(r.note).toMatch(/max/);
|
|
188
|
+
});
|
|
76
189
|
it('budget → degraded', () => {
|
|
77
190
|
expect(translateResponsesThinking({ kind: 'budget', budgetTokens: 1000 }).degraded).toBe(true);
|
|
78
191
|
});
|
|
@@ -86,8 +199,16 @@ describe('translateAnthropicThinking', () => {
|
|
|
86
199
|
expect(translateAnthropicThinking({ kind: 'budget', budgetTokens: 32000 }))
|
|
87
200
|
.toEqual({ patch: { thinking: { type: 'enabled', budget_tokens: 32000 } }, degraded: false });
|
|
88
201
|
});
|
|
89
|
-
it('effort → degraded', () => {
|
|
90
|
-
expect(translateAnthropicThinking({ kind: 'effort', effort: 'high' }).degraded).toBe(true);
|
|
202
|
+
it('effort on sonnet 4.5 → degraded', () => {
|
|
203
|
+
expect(translateAnthropicThinking({ kind: 'effort', effort: 'high' }, 'claude-sonnet-4-5').degraded).toBe(true);
|
|
204
|
+
});
|
|
205
|
+
it('effort on sonnet 4.6 → output_config.effort', () => {
|
|
206
|
+
expect(translateAnthropicThinking({ kind: 'effort', effort: 'max' }, 'claude-sonnet-4-6'))
|
|
207
|
+
.toEqual({ patch: { output_config: { effort: 'max' } }, degraded: false });
|
|
208
|
+
});
|
|
209
|
+
it('xhigh on opus 4.7 is native', () => {
|
|
210
|
+
expect(translateAnthropicThinking({ kind: 'effort', effort: 'xhigh' }, 'claude-opus-4-7'))
|
|
211
|
+
.toEqual({ patch: { output_config: { effort: 'xhigh' } }, degraded: false });
|
|
91
212
|
});
|
|
92
213
|
});
|
|
93
214
|
//# sourceMappingURL=thinking.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thinking.test.js","sourceRoot":"","sources":["../../src/cli/thinking.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"thinking.test.js","sourceRoot":"","sources":["../../src/cli/thinking.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* thinkingCapability — browser-safe table of native thinking levels.
|
|
3
|
+
*
|
|
4
|
+
* Kept free of Node / keyStore so Desktop can import it and compute the
|
|
5
|
+
* Thinking dropdown from the *selected* model, not the snapshot default.
|
|
6
|
+
*/
|
|
7
|
+
export const THINKING_EFFORTS = [
|
|
8
|
+
'low',
|
|
9
|
+
'medium',
|
|
10
|
+
'high',
|
|
11
|
+
'xhigh',
|
|
12
|
+
'max',
|
|
13
|
+
];
|
|
14
|
+
const BASE_EFFORTS = ['low', 'medium', 'high'];
|
|
15
|
+
const PROVIDER_THINKING_CAPABILITY = {
|
|
16
|
+
'openai-compatible': { effort: true },
|
|
17
|
+
grok: { effort: true },
|
|
18
|
+
chatgpt: { effort: true },
|
|
19
|
+
anthropic: { budget: true },
|
|
20
|
+
glm: { budget: true },
|
|
21
|
+
deepseek: { effort: true },
|
|
22
|
+
minimax: { effort: true },
|
|
23
|
+
custom: { effort: true },
|
|
24
|
+
};
|
|
25
|
+
export function thinkingCapabilityFor(id, model) {
|
|
26
|
+
const base = PROVIDER_THINKING_CAPABILITY[id] ?? {};
|
|
27
|
+
const efforts = effortLevelsFor(id, model);
|
|
28
|
+
const budget = supportsBudget(id, model);
|
|
29
|
+
return {
|
|
30
|
+
...base,
|
|
31
|
+
effort: efforts.length > 0 || Boolean(base.effort),
|
|
32
|
+
budget,
|
|
33
|
+
efforts: efforts.length > 0 ? efforts : undefined,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** Native effort enum values this (provider, model) accepts on the wire. */
|
|
37
|
+
export function effortLevelsFor(id, model) {
|
|
38
|
+
const m = (model ?? '').trim();
|
|
39
|
+
switch (id) {
|
|
40
|
+
case 'grok':
|
|
41
|
+
case 'openai-compatible':
|
|
42
|
+
case 'custom':
|
|
43
|
+
if (grokHasXhigh(m))
|
|
44
|
+
return [...BASE_EFFORTS, 'xhigh'];
|
|
45
|
+
return [...BASE_EFFORTS];
|
|
46
|
+
case 'chatgpt':
|
|
47
|
+
if (gptHasMax(m))
|
|
48
|
+
return [...BASE_EFFORTS, 'xhigh', 'max'];
|
|
49
|
+
if (gptHasXhigh(m))
|
|
50
|
+
return [...BASE_EFFORTS, 'xhigh'];
|
|
51
|
+
return [...BASE_EFFORTS];
|
|
52
|
+
case 'deepseek':
|
|
53
|
+
return ['high', 'max'];
|
|
54
|
+
case 'minimax':
|
|
55
|
+
return [...BASE_EFFORTS];
|
|
56
|
+
case 'glm':
|
|
57
|
+
if (glmHasEffortScale(m))
|
|
58
|
+
return ['low', 'high', 'max'];
|
|
59
|
+
return [];
|
|
60
|
+
case 'anthropic':
|
|
61
|
+
if (claudeHasXhigh(m))
|
|
62
|
+
return ['high', 'xhigh', 'max'];
|
|
63
|
+
if (claudeHasMax(m))
|
|
64
|
+
return ['high', 'max'];
|
|
65
|
+
return [];
|
|
66
|
+
default:
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function supportsBudget(id, model) {
|
|
71
|
+
if (id === 'anthropic')
|
|
72
|
+
return true;
|
|
73
|
+
if (id === 'glm')
|
|
74
|
+
return !glmHasEffortScale(model);
|
|
75
|
+
return Boolean(PROVIDER_THINKING_CAPABILITY[id]?.budget);
|
|
76
|
+
}
|
|
77
|
+
export function grokHasXhigh(model) {
|
|
78
|
+
const v = parseDottedVersion(model, /grok[-_]?(\d+)(?:[.-](\d+))?/i);
|
|
79
|
+
if (!v)
|
|
80
|
+
return false;
|
|
81
|
+
return v.major > 4 || (v.major === 4 && v.minor >= 6);
|
|
82
|
+
}
|
|
83
|
+
export function gptHasXhigh(model) {
|
|
84
|
+
const v = parseDottedVersion(model, /gpt[-_]?(\d+)(?:[.-](\d+))?/i);
|
|
85
|
+
if (!v)
|
|
86
|
+
return false;
|
|
87
|
+
return v.major > 5 || (v.major === 5 && v.minor >= 4);
|
|
88
|
+
}
|
|
89
|
+
export function gptHasMax(model) {
|
|
90
|
+
const v = parseDottedVersion(model, /gpt[-_]?(\d+)(?:[.-](\d+))?/i);
|
|
91
|
+
if (!v)
|
|
92
|
+
return false;
|
|
93
|
+
return v.major > 5 || (v.major === 5 && v.minor >= 6);
|
|
94
|
+
}
|
|
95
|
+
export function claudeHasMax(model) {
|
|
96
|
+
const v = parseClaudeVersion(model);
|
|
97
|
+
if (!v)
|
|
98
|
+
return false;
|
|
99
|
+
return v.major > 4 || (v.major === 4 && v.minor >= 6);
|
|
100
|
+
}
|
|
101
|
+
export function claudeHasXhigh(model) {
|
|
102
|
+
const v = parseClaudeVersion(model);
|
|
103
|
+
if (!v)
|
|
104
|
+
return false;
|
|
105
|
+
if (v.major >= 5)
|
|
106
|
+
return true;
|
|
107
|
+
return v.major === 4 && v.minor >= 7;
|
|
108
|
+
}
|
|
109
|
+
export function glmHasEffortScale(model) {
|
|
110
|
+
const v = parseDottedVersion(model ?? '', /glm[-_]?(\d+)(?:[.-](\d+))?/i);
|
|
111
|
+
if (!v)
|
|
112
|
+
return false;
|
|
113
|
+
return v.major >= 5;
|
|
114
|
+
}
|
|
115
|
+
function parseDottedVersion(model, re) {
|
|
116
|
+
const m = re.exec(model);
|
|
117
|
+
if (!m)
|
|
118
|
+
return null;
|
|
119
|
+
return {
|
|
120
|
+
major: Number.parseInt(m[1], 10),
|
|
121
|
+
minor: m[2] ? Number.parseInt(m[2], 10) : 0,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function parseClaudeVersion(model) {
|
|
125
|
+
const m = /claude-(?:sonnet|opus|haiku)[-_]?(\d+)(?:[.-](\d+))?/i.exec(model);
|
|
126
|
+
if (!m)
|
|
127
|
+
return null;
|
|
128
|
+
return {
|
|
129
|
+
major: Number.parseInt(m[1], 10),
|
|
130
|
+
minor: m[2] ? Number.parseInt(m[2], 10) : 0,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const EFFORT_LABELS = {
|
|
134
|
+
low: 'Low',
|
|
135
|
+
medium: 'Medium',
|
|
136
|
+
high: 'High',
|
|
137
|
+
xhigh: 'xHigh',
|
|
138
|
+
max: 'Max',
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* Options for the Desktop / CLI thinking picker, computed from the
|
|
142
|
+
* *selected* provider + model. Never falls back to a generic L/M/H list
|
|
143
|
+
* when the provider has a native scale (DeepSeek = high/max).
|
|
144
|
+
*/
|
|
145
|
+
export function thinkingSelectOptions(providerId, model) {
|
|
146
|
+
const cap = thinkingCapabilityFor(providerId, model);
|
|
147
|
+
const options = [
|
|
148
|
+
{ value: 'auto', label: 'Auto' },
|
|
149
|
+
{ value: 'off', label: 'Off' },
|
|
150
|
+
];
|
|
151
|
+
const levels = cap.efforts ?? [];
|
|
152
|
+
for (const level of levels) {
|
|
153
|
+
options.push({ value: level, label: EFFORT_LABELS[level] ?? level });
|
|
154
|
+
}
|
|
155
|
+
if (cap.budget) {
|
|
156
|
+
options.push({ value: 'budget:4000', label: '4k tokens' }, { value: 'budget:8000', label: '8k tokens' }, { value: 'budget:16000', label: '16k tokens' }, { value: 'budget:32000', label: '32k tokens' });
|
|
157
|
+
}
|
|
158
|
+
return options;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=thinkingCapability.js.map
|