@omnicross/contracts 0.1.8 → 0.1.10
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/audit-types.cjs +1 -0
- package/dist/audit-types.d.cts +32 -1
- package/dist/audit-types.d.ts +32 -1
- package/dist/audit-types.js +1 -0
- package/dist/canonical-models.cjs +4 -3
- package/dist/canonical-models.d.cts +2 -3
- package/dist/canonical-models.d.ts +2 -3
- package/dist/canonical-models.js +4 -3
- package/dist/index.cjs +19 -6
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +17 -6
- package/dist/thinking-config.cjs +218 -3
- package/dist/thinking-config.d.cts +32 -10
- package/dist/thinking-config.d.ts +32 -10
- package/dist/thinking-config.js +214 -3
- package/package.json +1 -1
package/dist/audit-types.cjs
CHANGED
package/dist/audit-types.d.cts
CHANGED
|
@@ -28,6 +28,19 @@ interface AuditRecord {
|
|
|
28
28
|
id: string;
|
|
29
29
|
/** Epoch ms the request was captured. */
|
|
30
30
|
ts: number;
|
|
31
|
+
/**
|
|
32
|
+
* Derived conversation-session key (a truncated SHA-256 digest — NEVER a raw
|
|
33
|
+
* client id or prompt). Groups the turns of one conversation so the body store
|
|
34
|
+
* can shard by session and delta-encode each turn against the previous one.
|
|
35
|
+
* Absent on a pre-upgrade record and whenever no key could be derived.
|
|
36
|
+
*/
|
|
37
|
+
sessionKey?: string;
|
|
38
|
+
/**
|
|
39
|
+
* True when a body snapshot for this record exists in the session body store.
|
|
40
|
+
* The metadata line itself never carries the payload — fetch it through the
|
|
41
|
+
* authed body query.
|
|
42
|
+
*/
|
|
43
|
+
hasBody?: boolean;
|
|
31
44
|
/** Outbound key id (attribution) — NEVER the key secret/hash. Null when unauthenticated. */
|
|
32
45
|
keyId?: string | null;
|
|
33
46
|
/** Client IP (PII). Socket address by default; a trusted forwarded header only when configured. */
|
|
@@ -80,6 +93,13 @@ interface AuditConfig {
|
|
|
80
93
|
maxBodyBytes: number;
|
|
81
94
|
/** TTL retention in days; default 7, clamped `[1, 365]`. */
|
|
82
95
|
retentionDays: number;
|
|
96
|
+
/**
|
|
97
|
+
* Collapse streaming text deltas in a captured response body into one contiguous
|
|
98
|
+
* block (default FALSE — the raw frame sequence is stored verbatim). Every
|
|
99
|
+
* NON-delta frame is kept either way, so `response.failed` / `error` / usage
|
|
100
|
+
* frames stay visible; only the per-token `*_delta` envelopes are merged.
|
|
101
|
+
*/
|
|
102
|
+
compactStreamingBodies: boolean;
|
|
83
103
|
/**
|
|
84
104
|
* Trust the `X-Forwarded-For` header for the client IP (LEAD OQ1 anti-spoof).
|
|
85
105
|
* Default FALSE — the socket remote address is authoritative. Only set true
|
|
@@ -94,6 +114,17 @@ declare const DEFAULT_AUDIT_CONFIG: AuditConfig;
|
|
|
94
114
|
interface AuditQueryResult {
|
|
95
115
|
records: AuditRecord[];
|
|
96
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* The reconstructed body pair for ONE audit record, returned by the authed body
|
|
119
|
+
* query. Bodies live in the per-session delta store rather than inline on the
|
|
120
|
+
* metadata line, so reading one is an explicit second call.
|
|
121
|
+
*/
|
|
122
|
+
interface AuditBodyResult {
|
|
123
|
+
/** Reconstructed request body, or absent when none was captured. */
|
|
124
|
+
requestBody?: string;
|
|
125
|
+
/** Reconstructed response body, or absent when none was captured. */
|
|
126
|
+
responseBody?: string;
|
|
127
|
+
}
|
|
97
128
|
/** Metadata-only aggregate for an audit time window (body payloads are never returned). */
|
|
98
129
|
interface AuditStats {
|
|
99
130
|
requestCount: number;
|
|
@@ -102,4 +133,4 @@ interface AuditStats {
|
|
|
102
133
|
complete: boolean;
|
|
103
134
|
}
|
|
104
135
|
|
|
105
|
-
export { type AuditConfig, type AuditQueryResult, type AuditRecord, type AuditStats, DEFAULT_AUDIT_CONFIG };
|
|
136
|
+
export { type AuditBodyResult, type AuditConfig, type AuditQueryResult, type AuditRecord, type AuditStats, DEFAULT_AUDIT_CONFIG };
|
package/dist/audit-types.d.ts
CHANGED
|
@@ -28,6 +28,19 @@ interface AuditRecord {
|
|
|
28
28
|
id: string;
|
|
29
29
|
/** Epoch ms the request was captured. */
|
|
30
30
|
ts: number;
|
|
31
|
+
/**
|
|
32
|
+
* Derived conversation-session key (a truncated SHA-256 digest — NEVER a raw
|
|
33
|
+
* client id or prompt). Groups the turns of one conversation so the body store
|
|
34
|
+
* can shard by session and delta-encode each turn against the previous one.
|
|
35
|
+
* Absent on a pre-upgrade record and whenever no key could be derived.
|
|
36
|
+
*/
|
|
37
|
+
sessionKey?: string;
|
|
38
|
+
/**
|
|
39
|
+
* True when a body snapshot for this record exists in the session body store.
|
|
40
|
+
* The metadata line itself never carries the payload — fetch it through the
|
|
41
|
+
* authed body query.
|
|
42
|
+
*/
|
|
43
|
+
hasBody?: boolean;
|
|
31
44
|
/** Outbound key id (attribution) — NEVER the key secret/hash. Null when unauthenticated. */
|
|
32
45
|
keyId?: string | null;
|
|
33
46
|
/** Client IP (PII). Socket address by default; a trusted forwarded header only when configured. */
|
|
@@ -80,6 +93,13 @@ interface AuditConfig {
|
|
|
80
93
|
maxBodyBytes: number;
|
|
81
94
|
/** TTL retention in days; default 7, clamped `[1, 365]`. */
|
|
82
95
|
retentionDays: number;
|
|
96
|
+
/**
|
|
97
|
+
* Collapse streaming text deltas in a captured response body into one contiguous
|
|
98
|
+
* block (default FALSE — the raw frame sequence is stored verbatim). Every
|
|
99
|
+
* NON-delta frame is kept either way, so `response.failed` / `error` / usage
|
|
100
|
+
* frames stay visible; only the per-token `*_delta` envelopes are merged.
|
|
101
|
+
*/
|
|
102
|
+
compactStreamingBodies: boolean;
|
|
83
103
|
/**
|
|
84
104
|
* Trust the `X-Forwarded-For` header for the client IP (LEAD OQ1 anti-spoof).
|
|
85
105
|
* Default FALSE — the socket remote address is authoritative. Only set true
|
|
@@ -94,6 +114,17 @@ declare const DEFAULT_AUDIT_CONFIG: AuditConfig;
|
|
|
94
114
|
interface AuditQueryResult {
|
|
95
115
|
records: AuditRecord[];
|
|
96
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* The reconstructed body pair for ONE audit record, returned by the authed body
|
|
119
|
+
* query. Bodies live in the per-session delta store rather than inline on the
|
|
120
|
+
* metadata line, so reading one is an explicit second call.
|
|
121
|
+
*/
|
|
122
|
+
interface AuditBodyResult {
|
|
123
|
+
/** Reconstructed request body, or absent when none was captured. */
|
|
124
|
+
requestBody?: string;
|
|
125
|
+
/** Reconstructed response body, or absent when none was captured. */
|
|
126
|
+
responseBody?: string;
|
|
127
|
+
}
|
|
97
128
|
/** Metadata-only aggregate for an audit time window (body payloads are never returned). */
|
|
98
129
|
interface AuditStats {
|
|
99
130
|
requestCount: number;
|
|
@@ -102,4 +133,4 @@ interface AuditStats {
|
|
|
102
133
|
complete: boolean;
|
|
103
134
|
}
|
|
104
135
|
|
|
105
|
-
export { type AuditConfig, type AuditQueryResult, type AuditRecord, type AuditStats, DEFAULT_AUDIT_CONFIG };
|
|
136
|
+
export { type AuditBodyResult, type AuditConfig, type AuditQueryResult, type AuditRecord, type AuditStats, DEFAULT_AUDIT_CONFIG };
|
package/dist/audit-types.js
CHANGED
|
@@ -29,9 +29,9 @@ __export(canonical_models_exports, {
|
|
|
29
29
|
});
|
|
30
30
|
module.exports = __toCommonJS(canonical_models_exports);
|
|
31
31
|
var OPENAI_MODELS = {
|
|
32
|
-
"gpt-5.6-sol": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
33
|
-
"gpt-5.6-terra": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
34
|
-
"gpt-5.6-luna": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
32
|
+
"gpt-5.6-sol": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
33
|
+
"gpt-5.6-terra": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
34
|
+
"gpt-5.6-luna": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
35
35
|
"gpt-5.5": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
36
36
|
"gpt-5.4": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
37
37
|
"gpt-5.4-mini": { category: "reasoning", contextLength: 4e5, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
@@ -200,6 +200,7 @@ function normalizeModelId(rawId) {
|
|
|
200
200
|
return noSuffix.toLowerCase();
|
|
201
201
|
}
|
|
202
202
|
var MODEL_ALIASES = {
|
|
203
|
+
"gpt-5.6": "gpt-5.6-sol",
|
|
203
204
|
"deepseek-chat": "deepseek-v3",
|
|
204
205
|
"deepseek-reasoner": "deepseek-r1"
|
|
205
206
|
};
|
|
@@ -71,9 +71,8 @@ declare function normalizeModelId(rawId: string): string;
|
|
|
71
71
|
* assertion at module load enforces this so the alias map can't drift to
|
|
72
72
|
* point at non-existent entries.
|
|
73
73
|
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* may rotate as new releases land).
|
|
74
|
+
* Includes official API aliases plus vendor marketing names. DeepSeek's
|
|
75
|
+
* `deepseek-chat` historically targets v3 and may rotate as new releases land.
|
|
77
76
|
*/
|
|
78
77
|
declare const MODEL_ALIASES: Record<string, string>;
|
|
79
78
|
/**
|
|
@@ -71,9 +71,8 @@ declare function normalizeModelId(rawId: string): string;
|
|
|
71
71
|
* assertion at module load enforces this so the alias map can't drift to
|
|
72
72
|
* point at non-existent entries.
|
|
73
73
|
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* may rotate as new releases land).
|
|
74
|
+
* Includes official API aliases plus vendor marketing names. DeepSeek's
|
|
75
|
+
* `deepseek-chat` historically targets v3 and may rotate as new releases land.
|
|
77
76
|
*/
|
|
78
77
|
declare const MODEL_ALIASES: Record<string, string>;
|
|
79
78
|
/**
|
package/dist/canonical-models.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// src/canonical-models.ts
|
|
2
2
|
var OPENAI_MODELS = {
|
|
3
|
-
"gpt-5.6-sol": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
4
|
-
"gpt-5.6-terra": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
5
|
-
"gpt-5.6-luna": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
3
|
+
"gpt-5.6-sol": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
4
|
+
"gpt-5.6-terra": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
5
|
+
"gpt-5.6-luna": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
6
6
|
"gpt-5.5": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
7
7
|
"gpt-5.4": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
8
8
|
"gpt-5.4-mini": { category: "reasoning", contextLength: 4e5, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
@@ -171,6 +171,7 @@ function normalizeModelId(rawId) {
|
|
|
171
171
|
return noSuffix.toLowerCase();
|
|
172
172
|
}
|
|
173
173
|
var MODEL_ALIASES = {
|
|
174
|
+
"gpt-5.6": "gpt-5.6-sol",
|
|
174
175
|
"deepseek-chat": "deepseek-v3",
|
|
175
176
|
"deepseek-reasoner": "deepseek-r1"
|
|
176
177
|
};
|
package/dist/index.cjs
CHANGED
|
@@ -35,6 +35,7 @@ __export(index_exports, {
|
|
|
35
35
|
EFFORT_RATIO: () => EFFORT_RATIO,
|
|
36
36
|
EXTENDED_CONTEXT_CAPABLE_MODELS: () => EXTENDED_CONTEXT_CAPABLE_MODELS,
|
|
37
37
|
KNOWN_MODELS: () => KNOWN_MODELS,
|
|
38
|
+
LEGACY_THINKING_TOKEN_LIMITS: () => LEGACY_THINKING_TOKEN_LIMITS,
|
|
38
39
|
LLM_PROVIDER_PRESETS: () => LLM_PROVIDER_PRESETS,
|
|
39
40
|
MAX_CONCURRENCY_DEFAULTS: () => MAX_CONCURRENCY_DEFAULTS,
|
|
40
41
|
MODEL_ALIASES: () => MODEL_ALIASES,
|
|
@@ -51,6 +52,7 @@ __export(index_exports, {
|
|
|
51
52
|
buildQwenThinkingConfig: () => buildQwenThinkingConfig,
|
|
52
53
|
calculateThinkingBudget: () => calculateThinkingBudget,
|
|
53
54
|
canDisableThinking: () => canDisableThinking,
|
|
55
|
+
findLegacyTokenLimit: () => findLegacyTokenLimit,
|
|
54
56
|
findTokenLimit: () => findTokenLimit,
|
|
55
57
|
getAllProviderPresets: () => getAllProviderPresets,
|
|
56
58
|
getClaudeMaxTokens: () => getClaudeMaxTokens,
|
|
@@ -81,6 +83,7 @@ var DEFAULT_AUDIT_CONFIG = {
|
|
|
81
83
|
captureBodies: false,
|
|
82
84
|
maxBodyBytes: -1,
|
|
83
85
|
retentionDays: 7,
|
|
86
|
+
compactStreamingBodies: false,
|
|
84
87
|
trustForwardedFor: false
|
|
85
88
|
};
|
|
86
89
|
|
|
@@ -92,9 +95,9 @@ var DEFAULT_BILLING_CONFIG = {
|
|
|
92
95
|
|
|
93
96
|
// src/canonical-models.ts
|
|
94
97
|
var OPENAI_MODELS = {
|
|
95
|
-
"gpt-5.6-sol": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
96
|
-
"gpt-5.6-terra": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
97
|
-
"gpt-5.6-luna": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
98
|
+
"gpt-5.6-sol": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
99
|
+
"gpt-5.6-terra": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
100
|
+
"gpt-5.6-luna": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
98
101
|
"gpt-5.5": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
99
102
|
"gpt-5.4": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
100
103
|
"gpt-5.4-mini": { category: "reasoning", contextLength: 4e5, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
@@ -263,6 +266,7 @@ function normalizeModelId(rawId) {
|
|
|
263
266
|
return noSuffix.toLowerCase();
|
|
264
267
|
}
|
|
265
268
|
var MODEL_ALIASES = {
|
|
269
|
+
"gpt-5.6": "gpt-5.6-sol",
|
|
266
270
|
"deepseek-chat": "deepseek-v3",
|
|
267
271
|
"deepseek-reasoner": "deepseek-r1"
|
|
268
272
|
};
|
|
@@ -2583,7 +2587,7 @@ var EFFORT_RATIO = {
|
|
|
2583
2587
|
max: 0.95
|
|
2584
2588
|
};
|
|
2585
2589
|
var DEFAULT_MAX_TOKENS = 4096;
|
|
2586
|
-
var
|
|
2590
|
+
var LEGACY_THINKING_TOKEN_LIMITS = {
|
|
2587
2591
|
// Gemini
|
|
2588
2592
|
"gemini-2\\.5-flash-lite": { min: 512, max: 24576 },
|
|
2589
2593
|
"gemini-.*-flash": { min: 0, max: 24576 },
|
|
@@ -2639,6 +2643,7 @@ var THINKING_TOKEN_MAP = {
|
|
|
2639
2643
|
// Doubao
|
|
2640
2644
|
"doubao.*think": { min: 0, max: 16384 }
|
|
2641
2645
|
};
|
|
2646
|
+
var THINKING_TOKEN_MAP = LEGACY_THINKING_TOKEN_LIMITS;
|
|
2642
2647
|
var REASONING_MODEL_PATTERNS = [
|
|
2643
2648
|
/^o[134](-mini|-preview|-pro)?$/i,
|
|
2644
2649
|
/^gpt-5(\.\d)?(-pro|-codex|-codex-max)?/i,
|
|
@@ -2671,8 +2676,14 @@ function findTokenLimit(modelOrId) {
|
|
|
2671
2676
|
if (modelOrId.thinkingTokenLimit) return modelOrId.thinkingTokenLimit;
|
|
2672
2677
|
return findTokenLimit(modelOrId.id);
|
|
2673
2678
|
}
|
|
2674
|
-
const
|
|
2675
|
-
|
|
2679
|
+
const canonicalLimit = lookupCanonicalCapabilities(modelOrId)?.thinkingTokenLimit;
|
|
2680
|
+
if (canonicalLimit) return canonicalLimit;
|
|
2681
|
+
return findLegacyTokenLimit(modelOrId);
|
|
2682
|
+
}
|
|
2683
|
+
function findLegacyTokenLimit(modelId) {
|
|
2684
|
+
if (!modelId) return null;
|
|
2685
|
+
const lowerModelId = modelId.toLowerCase();
|
|
2686
|
+
for (const [pattern, limit] of Object.entries(LEGACY_THINKING_TOKEN_LIMITS)) {
|
|
2676
2687
|
const regex = new RegExp(pattern, "i");
|
|
2677
2688
|
if (regex.test(lowerModelId)) {
|
|
2678
2689
|
return limit;
|
|
@@ -2802,6 +2813,7 @@ function isLocalProvider(id) {
|
|
|
2802
2813
|
EFFORT_RATIO,
|
|
2803
2814
|
EXTENDED_CONTEXT_CAPABLE_MODELS,
|
|
2804
2815
|
KNOWN_MODELS,
|
|
2816
|
+
LEGACY_THINKING_TOKEN_LIMITS,
|
|
2805
2817
|
LLM_PROVIDER_PRESETS,
|
|
2806
2818
|
MAX_CONCURRENCY_DEFAULTS,
|
|
2807
2819
|
MODEL_ALIASES,
|
|
@@ -2818,6 +2830,7 @@ function isLocalProvider(id) {
|
|
|
2818
2830
|
buildQwenThinkingConfig,
|
|
2819
2831
|
calculateThinkingBudget,
|
|
2820
2832
|
canDisableThinking,
|
|
2833
|
+
findLegacyTokenLimit,
|
|
2821
2834
|
findTokenLimit,
|
|
2822
2835
|
getAllProviderPresets,
|
|
2823
2836
|
getClaudeMaxTokens,
|
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { AccountClientIdentity, AccountTokensConfig, AuthMethod, ClaudeAuthMethod, ClaudeTokenConfig, CodexTokenConfig, GeminiTokenConfig, OAuthParams, ProxyConfig, SanitizedProxyConfig, SubscriptionAccountEntry, SubscriptionAccountSanitized, SubscriptionLevel, SyncWarningCode, TokenExchangeRequest, TokenStatus } from './account-tokens-types.cjs';
|
|
2
2
|
import { SubscriptionProviderId } from './subscription-types.cjs';
|
|
3
3
|
export { OpenCodeGoModelEntry, OpenCodeGoScenario, OpenCodeGoTokenConfig, OpenCodeGoTokenSanitized, ProviderChannel, SubscriptionListEntry, SubscriptionStatusEntry, legacyCliBackendToSubscriptionProvider, subscriptionTargetForSession } from './subscription-types.cjs';
|
|
4
|
-
export { AuditConfig, AuditQueryResult, AuditRecord, AuditStats, DEFAULT_AUDIT_CONFIG } from './audit-types.cjs';
|
|
4
|
+
export { AuditBodyResult, AuditConfig, AuditQueryResult, AuditRecord, AuditStats, DEFAULT_AUDIT_CONFIG } from './audit-types.cjs';
|
|
5
5
|
export { BillingConfig, BillingDeliveryStatus, BillingEvent, DEFAULT_BILLING_CONFIG } from './billing-types.cjs';
|
|
6
6
|
export { KNOWN_MODELS, KnownModelCapabilities, MODEL_ALIASES, ResolvedModelCapabilities, applyAlias, lookupCanonicalCapabilities, normalizeModelId, resolveModelCapabilities } from './canonical-models.cjs';
|
|
7
7
|
export { AnthropicAudioContent, AnthropicChatRequest, AnthropicChatResponse, AnthropicContentPart, AnthropicImageContent, AnthropicMessage, AnthropicSystemContent, AnthropicTextContent, AnthropicThinkingContent, AnthropicTool, AnthropicToolResultContent, AnthropicToolUseContent, AnthropicVideoContent, ConversionConfig, OpenAIChatRequest, OpenAIChatResponse, OpenAIContentPart, OpenAIMessage, OpenAIStreamChunk, OpenAITool, OpenAIToolCall, SimpleChatAudio, SimpleChatImage, SimpleChatMessage, SimpleChatSession, SimpleChatVideo } from './completion-types.cjs';
|
|
@@ -15,7 +15,7 @@ export { MessageBlock, MessageBlockBase, MessageBlockType, TextBlock, ThinkingBl
|
|
|
15
15
|
export { DEFAULT_LITELLM_PRICING_URL, DEFAULT_OPENROUTER_PRICING_URL, PricingConflict, PricingConflictDecision, PricingEntry, PricingEntryInput, PricingFetchResult, PricingResolution, PricingSource, PricingSourceRefreshResult } from './pricing-types.cjs';
|
|
16
16
|
export { CATALOG_VERSION, CODING_PLAN_URL_PRESETS, DEFAULT_SEED_PRESET_IDS, LLM_PROVIDER_PRESETS, MAX_CONCURRENCY_DEFAULTS, PROVIDER_MODEL_MAPPINGS, PROVIDER_SEARCH_CONFIGS, getAllProviderPresets, getCodingPlanBaseUrl, getPresetById, getPresetRevision, getProviderSearchConfig, resolveFollowProviderModel } from './provider-presets/index.cjs';
|
|
17
17
|
export { SUBSCRIPTION_MODEL_CATALOG, subscriptionProviderHasCatalog } from './subscription-model-catalog.cjs';
|
|
18
|
-
export { CANNOT_DISABLE_THINKING_PATTERNS, DEFAULT_MAX_TOKENS, EFFORT_RATIO, REASONING_MODEL_PATTERNS, THINKING_TOKEN_MAP, buildAnthropicThinking, buildGeminiThinkingConfig, buildQwenThinkingConfig, calculateThinkingBudget, canDisableThinking, findTokenLimit, getClaudeMaxTokens, getOpenAIReasoningEffort, isReasoningModel } from './thinking-config.cjs';
|
|
18
|
+
export { CANNOT_DISABLE_THINKING_PATTERNS, DEFAULT_MAX_TOKENS, EFFORT_RATIO, LEGACY_THINKING_TOKEN_LIMITS, REASONING_MODEL_PATTERNS, THINKING_TOKEN_MAP, buildAnthropicThinking, buildGeminiThinkingConfig, buildQwenThinkingConfig, calculateThinkingBudget, canDisableThinking, findLegacyTokenLimit, findTokenLimit, getClaudeMaxTokens, getOpenAIReasoningEffort, isReasoningModel } from './thinking-config.cjs';
|
|
19
19
|
export { ApiKeyUsageRow, MessageUsageRow, ModelUsageRow, SessionCacheStats, UsageCacheKeySource, UsageDateRange, UsageEventInput, UsageEventRecord, UsageQueryParams, UsageTimeBucket, UsageTimeSeriesBucket, UsageTotals } from './usage-stats-types.cjs';
|
|
20
20
|
export { UsageEngineOrigin, UsageTokens } from './usage-types.cjs';
|
|
21
21
|
export { DEFAULT_VOUCHER_CONFIG, VoucherConfig, VoucherCreated, VoucherGrant, VoucherInfo, VoucherRecord, VoucherRedeemResult, VoucherStatus, VoucherType } from './voucher-types.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { AccountClientIdentity, AccountTokensConfig, AuthMethod, ClaudeAuthMethod, ClaudeTokenConfig, CodexTokenConfig, GeminiTokenConfig, OAuthParams, ProxyConfig, SanitizedProxyConfig, SubscriptionAccountEntry, SubscriptionAccountSanitized, SubscriptionLevel, SyncWarningCode, TokenExchangeRequest, TokenStatus } from './account-tokens-types.js';
|
|
2
2
|
import { SubscriptionProviderId } from './subscription-types.js';
|
|
3
3
|
export { OpenCodeGoModelEntry, OpenCodeGoScenario, OpenCodeGoTokenConfig, OpenCodeGoTokenSanitized, ProviderChannel, SubscriptionListEntry, SubscriptionStatusEntry, legacyCliBackendToSubscriptionProvider, subscriptionTargetForSession } from './subscription-types.js';
|
|
4
|
-
export { AuditConfig, AuditQueryResult, AuditRecord, AuditStats, DEFAULT_AUDIT_CONFIG } from './audit-types.js';
|
|
4
|
+
export { AuditBodyResult, AuditConfig, AuditQueryResult, AuditRecord, AuditStats, DEFAULT_AUDIT_CONFIG } from './audit-types.js';
|
|
5
5
|
export { BillingConfig, BillingDeliveryStatus, BillingEvent, DEFAULT_BILLING_CONFIG } from './billing-types.js';
|
|
6
6
|
export { KNOWN_MODELS, KnownModelCapabilities, MODEL_ALIASES, ResolvedModelCapabilities, applyAlias, lookupCanonicalCapabilities, normalizeModelId, resolveModelCapabilities } from './canonical-models.js';
|
|
7
7
|
export { AnthropicAudioContent, AnthropicChatRequest, AnthropicChatResponse, AnthropicContentPart, AnthropicImageContent, AnthropicMessage, AnthropicSystemContent, AnthropicTextContent, AnthropicThinkingContent, AnthropicTool, AnthropicToolResultContent, AnthropicToolUseContent, AnthropicVideoContent, ConversionConfig, OpenAIChatRequest, OpenAIChatResponse, OpenAIContentPart, OpenAIMessage, OpenAIStreamChunk, OpenAITool, OpenAIToolCall, SimpleChatAudio, SimpleChatImage, SimpleChatMessage, SimpleChatSession, SimpleChatVideo } from './completion-types.js';
|
|
@@ -15,7 +15,7 @@ export { MessageBlock, MessageBlockBase, MessageBlockType, TextBlock, ThinkingBl
|
|
|
15
15
|
export { DEFAULT_LITELLM_PRICING_URL, DEFAULT_OPENROUTER_PRICING_URL, PricingConflict, PricingConflictDecision, PricingEntry, PricingEntryInput, PricingFetchResult, PricingResolution, PricingSource, PricingSourceRefreshResult } from './pricing-types.js';
|
|
16
16
|
export { CATALOG_VERSION, CODING_PLAN_URL_PRESETS, DEFAULT_SEED_PRESET_IDS, LLM_PROVIDER_PRESETS, MAX_CONCURRENCY_DEFAULTS, PROVIDER_MODEL_MAPPINGS, PROVIDER_SEARCH_CONFIGS, getAllProviderPresets, getCodingPlanBaseUrl, getPresetById, getPresetRevision, getProviderSearchConfig, resolveFollowProviderModel } from './provider-presets/index.js';
|
|
17
17
|
export { SUBSCRIPTION_MODEL_CATALOG, subscriptionProviderHasCatalog } from './subscription-model-catalog.js';
|
|
18
|
-
export { CANNOT_DISABLE_THINKING_PATTERNS, DEFAULT_MAX_TOKENS, EFFORT_RATIO, REASONING_MODEL_PATTERNS, THINKING_TOKEN_MAP, buildAnthropicThinking, buildGeminiThinkingConfig, buildQwenThinkingConfig, calculateThinkingBudget, canDisableThinking, findTokenLimit, getClaudeMaxTokens, getOpenAIReasoningEffort, isReasoningModel } from './thinking-config.js';
|
|
18
|
+
export { CANNOT_DISABLE_THINKING_PATTERNS, DEFAULT_MAX_TOKENS, EFFORT_RATIO, LEGACY_THINKING_TOKEN_LIMITS, REASONING_MODEL_PATTERNS, THINKING_TOKEN_MAP, buildAnthropicThinking, buildGeminiThinkingConfig, buildQwenThinkingConfig, calculateThinkingBudget, canDisableThinking, findLegacyTokenLimit, findTokenLimit, getClaudeMaxTokens, getOpenAIReasoningEffort, isReasoningModel } from './thinking-config.js';
|
|
19
19
|
export { ApiKeyUsageRow, MessageUsageRow, ModelUsageRow, SessionCacheStats, UsageCacheKeySource, UsageDateRange, UsageEventInput, UsageEventRecord, UsageQueryParams, UsageTimeBucket, UsageTimeSeriesBucket, UsageTotals } from './usage-stats-types.js';
|
|
20
20
|
export { UsageEngineOrigin, UsageTokens } from './usage-types.js';
|
|
21
21
|
export { DEFAULT_VOUCHER_CONFIG, VoucherConfig, VoucherCreated, VoucherGrant, VoucherInfo, VoucherRecord, VoucherRedeemResult, VoucherStatus, VoucherType } from './voucher-types.js';
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ var DEFAULT_AUDIT_CONFIG = {
|
|
|
4
4
|
captureBodies: false,
|
|
5
5
|
maxBodyBytes: -1,
|
|
6
6
|
retentionDays: 7,
|
|
7
|
+
compactStreamingBodies: false,
|
|
7
8
|
trustForwardedFor: false
|
|
8
9
|
};
|
|
9
10
|
|
|
@@ -15,9 +16,9 @@ var DEFAULT_BILLING_CONFIG = {
|
|
|
15
16
|
|
|
16
17
|
// src/canonical-models.ts
|
|
17
18
|
var OPENAI_MODELS = {
|
|
18
|
-
"gpt-5.6-sol": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
19
|
-
"gpt-5.6-terra": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
20
|
-
"gpt-5.6-luna": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
19
|
+
"gpt-5.6-sol": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
20
|
+
"gpt-5.6-terra": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
21
|
+
"gpt-5.6-luna": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
21
22
|
"gpt-5.5": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
22
23
|
"gpt-5.4": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
23
24
|
"gpt-5.4-mini": { category: "reasoning", contextLength: 4e5, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
@@ -186,6 +187,7 @@ function normalizeModelId(rawId) {
|
|
|
186
187
|
return noSuffix.toLowerCase();
|
|
187
188
|
}
|
|
188
189
|
var MODEL_ALIASES = {
|
|
190
|
+
"gpt-5.6": "gpt-5.6-sol",
|
|
189
191
|
"deepseek-chat": "deepseek-v3",
|
|
190
192
|
"deepseek-reasoner": "deepseek-r1"
|
|
191
193
|
};
|
|
@@ -2506,7 +2508,7 @@ var EFFORT_RATIO = {
|
|
|
2506
2508
|
max: 0.95
|
|
2507
2509
|
};
|
|
2508
2510
|
var DEFAULT_MAX_TOKENS = 4096;
|
|
2509
|
-
var
|
|
2511
|
+
var LEGACY_THINKING_TOKEN_LIMITS = {
|
|
2510
2512
|
// Gemini
|
|
2511
2513
|
"gemini-2\\.5-flash-lite": { min: 512, max: 24576 },
|
|
2512
2514
|
"gemini-.*-flash": { min: 0, max: 24576 },
|
|
@@ -2562,6 +2564,7 @@ var THINKING_TOKEN_MAP = {
|
|
|
2562
2564
|
// Doubao
|
|
2563
2565
|
"doubao.*think": { min: 0, max: 16384 }
|
|
2564
2566
|
};
|
|
2567
|
+
var THINKING_TOKEN_MAP = LEGACY_THINKING_TOKEN_LIMITS;
|
|
2565
2568
|
var REASONING_MODEL_PATTERNS = [
|
|
2566
2569
|
/^o[134](-mini|-preview|-pro)?$/i,
|
|
2567
2570
|
/^gpt-5(\.\d)?(-pro|-codex|-codex-max)?/i,
|
|
@@ -2594,8 +2597,14 @@ function findTokenLimit(modelOrId) {
|
|
|
2594
2597
|
if (modelOrId.thinkingTokenLimit) return modelOrId.thinkingTokenLimit;
|
|
2595
2598
|
return findTokenLimit(modelOrId.id);
|
|
2596
2599
|
}
|
|
2597
|
-
const
|
|
2598
|
-
|
|
2600
|
+
const canonicalLimit = lookupCanonicalCapabilities(modelOrId)?.thinkingTokenLimit;
|
|
2601
|
+
if (canonicalLimit) return canonicalLimit;
|
|
2602
|
+
return findLegacyTokenLimit(modelOrId);
|
|
2603
|
+
}
|
|
2604
|
+
function findLegacyTokenLimit(modelId) {
|
|
2605
|
+
if (!modelId) return null;
|
|
2606
|
+
const lowerModelId = modelId.toLowerCase();
|
|
2607
|
+
for (const [pattern, limit] of Object.entries(LEGACY_THINKING_TOKEN_LIMITS)) {
|
|
2599
2608
|
const regex = new RegExp(pattern, "i");
|
|
2600
2609
|
if (regex.test(lowerModelId)) {
|
|
2601
2610
|
return limit;
|
|
@@ -2724,6 +2733,7 @@ export {
|
|
|
2724
2733
|
EFFORT_RATIO,
|
|
2725
2734
|
EXTENDED_CONTEXT_CAPABLE_MODELS,
|
|
2726
2735
|
KNOWN_MODELS,
|
|
2736
|
+
LEGACY_THINKING_TOKEN_LIMITS,
|
|
2727
2737
|
LLM_PROVIDER_PRESETS,
|
|
2728
2738
|
MAX_CONCURRENCY_DEFAULTS,
|
|
2729
2739
|
MODEL_ALIASES,
|
|
@@ -2740,6 +2750,7 @@ export {
|
|
|
2740
2750
|
buildQwenThinkingConfig,
|
|
2741
2751
|
calculateThinkingBudget,
|
|
2742
2752
|
canDisableThinking,
|
|
2753
|
+
findLegacyTokenLimit,
|
|
2743
2754
|
findTokenLimit,
|
|
2744
2755
|
getAllProviderPresets,
|
|
2745
2756
|
getClaudeMaxTokens,
|
package/dist/thinking-config.cjs
CHANGED
|
@@ -23,6 +23,7 @@ __export(thinking_config_exports, {
|
|
|
23
23
|
CANNOT_DISABLE_THINKING_PATTERNS: () => CANNOT_DISABLE_THINKING_PATTERNS,
|
|
24
24
|
DEFAULT_MAX_TOKENS: () => DEFAULT_MAX_TOKENS,
|
|
25
25
|
EFFORT_RATIO: () => EFFORT_RATIO,
|
|
26
|
+
LEGACY_THINKING_TOKEN_LIMITS: () => LEGACY_THINKING_TOKEN_LIMITS,
|
|
26
27
|
REASONING_MODEL_PATTERNS: () => REASONING_MODEL_PATTERNS,
|
|
27
28
|
THINKING_TOKEN_MAP: () => THINKING_TOKEN_MAP,
|
|
28
29
|
buildAnthropicThinking: () => buildAnthropicThinking,
|
|
@@ -30,12 +31,217 @@ __export(thinking_config_exports, {
|
|
|
30
31
|
buildQwenThinkingConfig: () => buildQwenThinkingConfig,
|
|
31
32
|
calculateThinkingBudget: () => calculateThinkingBudget,
|
|
32
33
|
canDisableThinking: () => canDisableThinking,
|
|
34
|
+
findLegacyTokenLimit: () => findLegacyTokenLimit,
|
|
33
35
|
findTokenLimit: () => findTokenLimit,
|
|
34
36
|
getClaudeMaxTokens: () => getClaudeMaxTokens,
|
|
35
37
|
getOpenAIReasoningEffort: () => getOpenAIReasoningEffort,
|
|
36
38
|
isReasoningModel: () => isReasoningModel
|
|
37
39
|
});
|
|
38
40
|
module.exports = __toCommonJS(thinking_config_exports);
|
|
41
|
+
|
|
42
|
+
// src/canonical-models.ts
|
|
43
|
+
var OPENAI_MODELS = {
|
|
44
|
+
"gpt-5.6-sol": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
45
|
+
"gpt-5.6-terra": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
46
|
+
"gpt-5.6-luna": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
47
|
+
"gpt-5.5": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
48
|
+
"gpt-5.4": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
49
|
+
"gpt-5.4-mini": { category: "reasoning", contextLength: 4e5, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
50
|
+
"gpt-5.3-codex": { category: "code", contextLength: 4e5, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
51
|
+
"gpt-5.2": { category: "reasoning", contextLength: 105e4, maxTokens: 65536, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "minimal", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 65536 } },
|
|
52
|
+
"gpt-5": { category: "reasoning", contextLength: 105e4, maxTokens: 65536, reasoning: true, vision: true, functionCall: true },
|
|
53
|
+
"gpt-4.1": { category: "chat", contextLength: 105e4, maxTokens: 32768, vision: true, functionCall: true },
|
|
54
|
+
"gpt-4o": { category: "chat", contextLength: 128e3, maxTokens: 16384, vision: true, functionCall: true },
|
|
55
|
+
"gpt-4o-mini": { category: "chat", contextLength: 128e3, maxTokens: 16384, functionCall: true },
|
|
56
|
+
"o3": { category: "reasoning", contextLength: 2e5, maxTokens: 1e5, reasoning: true, thinkingLevels: ["low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 65536 } },
|
|
57
|
+
"o4-mini": { category: "reasoning", contextLength: 2e5, maxTokens: 1e5, reasoning: true, thinkingLevels: ["low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } }
|
|
58
|
+
};
|
|
59
|
+
var ANTHROPIC_MODELS = {
|
|
60
|
+
"claude-fable-5": { category: "reasoning", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
61
|
+
"claude-opus-5": { category: "reasoning", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
62
|
+
"claude-opus-4-8": { category: "reasoning", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
63
|
+
"claude-sonnet-5": { category: "chat", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
64
|
+
"claude-opus-4-7": { category: "reasoning", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
65
|
+
"claude-opus-4-7[1m]": { category: "reasoning", contextLength: 1e6, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
66
|
+
"claude-opus-4-6": { category: "reasoning", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 1024, max: 128e3 } },
|
|
67
|
+
"claude-opus-4-6[1m]": { category: "reasoning", contextLength: 1e6, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 1024, max: 128e3 } },
|
|
68
|
+
"claude-sonnet-4-6": { category: "chat", contextLength: 2e5, maxTokens: 64e3, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 1024, max: 64e3 } },
|
|
69
|
+
"claude-sonnet-4-6[1m]": { category: "chat", contextLength: 1e6, maxTokens: 64e3, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 1024, max: 64e3 } },
|
|
70
|
+
"claude-haiku-4-5": { category: "chat", contextLength: 2e5, maxTokens: 64e3, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 1024, max: 64e3 } }
|
|
71
|
+
};
|
|
72
|
+
var GEMINI_MODELS = {
|
|
73
|
+
"gemini-3.5-flash": { category: "chat", contextLength: 1e6, maxTokens: 65536, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 24576 } },
|
|
74
|
+
"gemini-3-flash": { category: "chat", contextLength: 1e6, maxTokens: 65536, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 24576 } },
|
|
75
|
+
"gemini-3.1-pro": { category: "chat", contextLength: 1e6, maxTokens: 65536, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["low", "medium", "high"], thinkingTokenLimit: { min: 128, max: 32768 } }
|
|
76
|
+
};
|
|
77
|
+
var GROK_MODELS = {
|
|
78
|
+
"grok-4.5": { category: "chat", contextLength: 5e5, maxTokens: 32768, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
79
|
+
"grok-4.3": { category: "chat", contextLength: 1e6, maxTokens: 32768, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
80
|
+
"grok-4.20": { category: "chat", contextLength: 131072, maxTokens: 32768, vision: true, functionCall: true },
|
|
81
|
+
"grok-4.20-reasoning": { category: "reasoning", contextLength: 131072, maxTokens: 32768, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
82
|
+
"grok-4.20-multi-agent": { category: "reasoning", contextLength: 131072, maxTokens: 32768, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } }
|
|
83
|
+
};
|
|
84
|
+
var DEEPSEEK_MODELS = {
|
|
85
|
+
"deepseek-v4-flash": { category: "chat", contextLength: 1e6, maxTokens: 384e3, functionCall: true, reasoning: true, thinkingLevels: ["none", "high", "max"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
86
|
+
"deepseek-v4-pro": { category: "reasoning", contextLength: 1e6, maxTokens: 384e3, functionCall: true, reasoning: true, thinkingLevels: ["none", "high", "max"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
87
|
+
"deepseek-v3": { category: "chat", contextLength: 65536, maxTokens: 8192, functionCall: true },
|
|
88
|
+
"deepseek-v3.2": { category: "code", contextLength: 256e3, maxTokens: 32768, functionCall: true, reasoning: true },
|
|
89
|
+
"deepseek-r1": { category: "reasoning", contextLength: 64e3, maxTokens: 8192, reasoning: true, thinkingTokenLimit: { min: 0, max: 32768 } }
|
|
90
|
+
};
|
|
91
|
+
var ZHIPU_MODELS = {
|
|
92
|
+
"glm-5.2": { category: "chat", contextLength: 1048576, maxTokens: 131072, functionCall: true },
|
|
93
|
+
"glm-5": { category: "chat", contextLength: 2e5, maxTokens: 128e3, functionCall: true },
|
|
94
|
+
"glm-5.1": { category: "chat", contextLength: 2e5, maxTokens: 128e3, functionCall: true },
|
|
95
|
+
"glm-4.5-air": { category: "chat", contextLength: 128e3, maxTokens: 32768, functionCall: true },
|
|
96
|
+
"glm-4.6v": { category: "chat", contextLength: 128e3, maxTokens: 32768, vision: true, functionCall: true },
|
|
97
|
+
"glm-4.7": { category: "code", contextLength: 2e5, maxTokens: 128e3, functionCall: true }
|
|
98
|
+
};
|
|
99
|
+
var KIMI_MODELS = {
|
|
100
|
+
"kimi-k3": { category: "code", contextLength: 1048576, maxTokens: 1048576, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
101
|
+
"kimi-k2.6": { category: "code", contextLength: 256e3, maxTokens: 32768, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
102
|
+
"kimi-k2.5": { category: "chat", contextLength: 256e3, maxTokens: 65535, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
103
|
+
"kimi-k2-thinking": { category: "reasoning", contextLength: 256e3, reasoning: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } }
|
|
104
|
+
};
|
|
105
|
+
var DASHSCOPE_QWEN_MODELS = {
|
|
106
|
+
"qwen3-max": { category: "chat", contextLength: 262144, maxTokens: 65536, functionCall: true, webSearch: true },
|
|
107
|
+
"qwen3.5-plus": { category: "chat", contextLength: 1e6, vision: true, functionCall: true, webSearch: true },
|
|
108
|
+
"qwen-turbo": { category: "chat", contextLength: 1e6, vision: true, webSearch: true },
|
|
109
|
+
"qwen3-coder-plus": { category: "code", contextLength: 1e6, functionCall: true },
|
|
110
|
+
"qwen-3-coder-480b": { category: "code", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
111
|
+
"qwen-3-32b": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
112
|
+
"qwen2.5-coder-32b-instruct": { category: "code", contextLength: 32768, maxTokens: 8192, functionCall: true },
|
|
113
|
+
"qwen2.5-coder-7b-instruct": { category: "code", contextLength: 32768, maxTokens: 8192, functionCall: true }
|
|
114
|
+
};
|
|
115
|
+
var VOLCENGINE_DOUBAO_MODELS = {
|
|
116
|
+
"ark-code-latest": { category: "code", contextLength: 256e3, maxTokens: 32768, functionCall: true },
|
|
117
|
+
"doubao-seed-2.0-code": { category: "code", contextLength: 256e3, maxTokens: 128e3, vision: true, functionCall: true },
|
|
118
|
+
"doubao-seed-2.0-lite": { category: "chat", contextLength: 256e3, maxTokens: 32768, functionCall: true }
|
|
119
|
+
};
|
|
120
|
+
var TENCENT_HUNYUAN_MODELS = {
|
|
121
|
+
"tc-code-latest": { category: "code", functionCall: true },
|
|
122
|
+
"hunyuan-2.0-instruct": { category: "chat", functionCall: true },
|
|
123
|
+
"hunyuan-turbos": { category: "chat", functionCall: true }
|
|
124
|
+
};
|
|
125
|
+
var MINIMAX_MODELS = {
|
|
126
|
+
"minimax-m2.5": { category: "code", contextLength: 204800, functionCall: true },
|
|
127
|
+
"minimax-m2.5-highspeed": { category: "code", contextLength: 204800, functionCall: true },
|
|
128
|
+
"minimax-m2.1": { category: "code", contextLength: 204800, functionCall: true },
|
|
129
|
+
"minimax-m2.1-highspeed": { category: "code", contextLength: 204800, functionCall: true }
|
|
130
|
+
};
|
|
131
|
+
var XIAOMI_MIMO_CANONICAL = {
|
|
132
|
+
"mimo-v2.5": { category: "code", contextLength: 1e6, maxTokens: 32768, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
133
|
+
// mimo-v2.5-pro does not support vision (text + reasoning only).
|
|
134
|
+
"mimo-v2.5-pro": { category: "code", contextLength: 1e6, maxTokens: 32768, vision: false, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
135
|
+
"mimo-v2-pro": { category: "code", contextLength: 1e6, maxTokens: 32768, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
136
|
+
"mimo-v2-flash": { category: "code", contextLength: 256e3, maxTokens: 32768, vision: true, functionCall: true },
|
|
137
|
+
"mimo-v2-omni": { category: "chat", contextLength: 256e3, maxTokens: 32768, vision: true, functionCall: true }
|
|
138
|
+
};
|
|
139
|
+
var META_LLAMA_MODELS = {
|
|
140
|
+
"llama-3.3-70b": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
141
|
+
"llama-3.3-70b-versatile": { category: "chat", contextLength: 131072, maxTokens: 32768, functionCall: true },
|
|
142
|
+
"llama-3.3-70b-instruct": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
143
|
+
"llama-3.3-70b-instruct-turbo": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
144
|
+
"llama-3.1-8b-instant": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true }
|
|
145
|
+
};
|
|
146
|
+
var MISTRAL_MODELS = {
|
|
147
|
+
"mistral-large-latest": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
148
|
+
"codestral-latest": { category: "code", contextLength: 256e3, maxTokens: 8192, functionCall: true },
|
|
149
|
+
"mistral-medium-latest": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
150
|
+
"mixtral-8x7b-32768": { category: "chat", contextLength: 32768, maxTokens: 32768, functionCall: true }
|
|
151
|
+
};
|
|
152
|
+
var PERPLEXITY_MODELS = {
|
|
153
|
+
"sonar": { category: "chat", contextLength: 127072, maxTokens: 8192, webSearch: true },
|
|
154
|
+
"sonar-pro": { category: "chat", contextLength: 2e5, maxTokens: 8192, webSearch: true },
|
|
155
|
+
"sonar-reasoning-pro": { category: "reasoning", contextLength: 127072, maxTokens: 8192, reasoning: true, webSearch: true }
|
|
156
|
+
};
|
|
157
|
+
var BAIDU_ERNIE_MODELS = {
|
|
158
|
+
"qianfan-code-latest": { category: "code", contextLength: 98304, maxTokens: 65536, functionCall: true },
|
|
159
|
+
"ernie-4.5": { category: "chat", functionCall: true },
|
|
160
|
+
"ernie-3.5": { category: "chat" }
|
|
161
|
+
};
|
|
162
|
+
var KUAISHOU_KAT_MODELS = {
|
|
163
|
+
"kat-coder-pro-v1": { category: "code", contextLength: 256e3, maxTokens: 128e3, functionCall: true },
|
|
164
|
+
"kat-coder-air-v1": { category: "code", contextLength: 128e3, maxTokens: 32768, functionCall: true }
|
|
165
|
+
};
|
|
166
|
+
var VENDOR_GROUPS = [
|
|
167
|
+
{ name: "OPENAI_MODELS", entries: OPENAI_MODELS },
|
|
168
|
+
{ name: "ANTHROPIC_MODELS", entries: ANTHROPIC_MODELS },
|
|
169
|
+
{ name: "GEMINI_MODELS", entries: GEMINI_MODELS },
|
|
170
|
+
{ name: "GROK_MODELS", entries: GROK_MODELS },
|
|
171
|
+
{ name: "DEEPSEEK_MODELS", entries: DEEPSEEK_MODELS },
|
|
172
|
+
{ name: "ZHIPU_MODELS", entries: ZHIPU_MODELS },
|
|
173
|
+
{ name: "KIMI_MODELS", entries: KIMI_MODELS },
|
|
174
|
+
{ name: "DASHSCOPE_QWEN_MODELS", entries: DASHSCOPE_QWEN_MODELS },
|
|
175
|
+
{ name: "VOLCENGINE_DOUBAO_MODELS", entries: VOLCENGINE_DOUBAO_MODELS },
|
|
176
|
+
{ name: "TENCENT_HUNYUAN_MODELS", entries: TENCENT_HUNYUAN_MODELS },
|
|
177
|
+
{ name: "MINIMAX_MODELS", entries: MINIMAX_MODELS },
|
|
178
|
+
{ name: "XIAOMI_MIMO_CANONICAL", entries: XIAOMI_MIMO_CANONICAL },
|
|
179
|
+
{ name: "META_LLAMA_MODELS", entries: META_LLAMA_MODELS },
|
|
180
|
+
{ name: "MISTRAL_MODELS", entries: MISTRAL_MODELS },
|
|
181
|
+
{ name: "PERPLEXITY_MODELS", entries: PERPLEXITY_MODELS },
|
|
182
|
+
{ name: "BAIDU_ERNIE_MODELS", entries: BAIDU_ERNIE_MODELS },
|
|
183
|
+
{ name: "KUAISHOU_KAT_MODELS", entries: KUAISHOU_KAT_MODELS }
|
|
184
|
+
];
|
|
185
|
+
function assertNoDuplicateCanonicalIds() {
|
|
186
|
+
const seen = /* @__PURE__ */ new Map();
|
|
187
|
+
for (const { name, entries } of VENDOR_GROUPS) {
|
|
188
|
+
for (const id of Object.keys(entries)) {
|
|
189
|
+
const prior = seen.get(id);
|
|
190
|
+
if (prior) {
|
|
191
|
+
throw new Error(
|
|
192
|
+
`[canonical-models] duplicate id '${id}' registered in both '${prior}' and '${name}'. Each model must live in exactly one vendor group.`
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
seen.set(id, name);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
assertNoDuplicateCanonicalIds();
|
|
200
|
+
var KNOWN_MODELS = Object.freeze(
|
|
201
|
+
Object.assign(
|
|
202
|
+
/* @__PURE__ */ Object.create(null),
|
|
203
|
+
...VENDOR_GROUPS.map((g) => g.entries)
|
|
204
|
+
)
|
|
205
|
+
);
|
|
206
|
+
function normalizeModelId(rawId) {
|
|
207
|
+
if (!rawId) return "";
|
|
208
|
+
const slashIdx = rawId.lastIndexOf("/");
|
|
209
|
+
const base = slashIdx >= 0 ? rawId.slice(slashIdx + 1) : rawId;
|
|
210
|
+
const colonIdx = base.indexOf(":");
|
|
211
|
+
const noSuffix = colonIdx >= 0 ? base.slice(0, colonIdx) : base;
|
|
212
|
+
return noSuffix.toLowerCase();
|
|
213
|
+
}
|
|
214
|
+
var MODEL_ALIASES = {
|
|
215
|
+
"gpt-5.6": "gpt-5.6-sol",
|
|
216
|
+
"deepseek-chat": "deepseek-v3",
|
|
217
|
+
"deepseek-reasoner": "deepseek-r1"
|
|
218
|
+
};
|
|
219
|
+
function applyAlias(normalizedId) {
|
|
220
|
+
return MODEL_ALIASES[normalizedId] ?? normalizedId;
|
|
221
|
+
}
|
|
222
|
+
function assertAliasesPointToKnownModels() {
|
|
223
|
+
for (const [from, to] of Object.entries(MODEL_ALIASES)) {
|
|
224
|
+
if (!(to in KNOWN_MODELS)) {
|
|
225
|
+
throw new Error(
|
|
226
|
+
`[canonical-models] alias '${from}' \u2192 '${to}' points at unknown id. Either add '${to}' to a vendor group or fix the alias.`
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
assertAliasesPointToKnownModels();
|
|
232
|
+
function lookupCanonicalCapabilities(rawId, extendedContext = false) {
|
|
233
|
+
const normalized = normalizeModelId(rawId);
|
|
234
|
+
if (!normalized) return void 0;
|
|
235
|
+
const canonicalId = applyAlias(normalized);
|
|
236
|
+
if (extendedContext) {
|
|
237
|
+
const extendedKey = `${canonicalId}[1m]`;
|
|
238
|
+
const extended = KNOWN_MODELS[extendedKey];
|
|
239
|
+
if (extended) return extended;
|
|
240
|
+
}
|
|
241
|
+
return KNOWN_MODELS[canonicalId];
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// src/thinking-config.ts
|
|
39
245
|
var EFFORT_RATIO = {
|
|
40
246
|
none: 0.01,
|
|
41
247
|
minimal: 0.02,
|
|
@@ -46,7 +252,7 @@ var EFFORT_RATIO = {
|
|
|
46
252
|
max: 0.95
|
|
47
253
|
};
|
|
48
254
|
var DEFAULT_MAX_TOKENS = 4096;
|
|
49
|
-
var
|
|
255
|
+
var LEGACY_THINKING_TOKEN_LIMITS = {
|
|
50
256
|
// Gemini
|
|
51
257
|
"gemini-2\\.5-flash-lite": { min: 512, max: 24576 },
|
|
52
258
|
"gemini-.*-flash": { min: 0, max: 24576 },
|
|
@@ -102,6 +308,7 @@ var THINKING_TOKEN_MAP = {
|
|
|
102
308
|
// Doubao
|
|
103
309
|
"doubao.*think": { min: 0, max: 16384 }
|
|
104
310
|
};
|
|
311
|
+
var THINKING_TOKEN_MAP = LEGACY_THINKING_TOKEN_LIMITS;
|
|
105
312
|
var REASONING_MODEL_PATTERNS = [
|
|
106
313
|
/^o[134](-mini|-preview|-pro)?$/i,
|
|
107
314
|
/^gpt-5(\.\d)?(-pro|-codex|-codex-max)?/i,
|
|
@@ -134,8 +341,14 @@ function findTokenLimit(modelOrId) {
|
|
|
134
341
|
if (modelOrId.thinkingTokenLimit) return modelOrId.thinkingTokenLimit;
|
|
135
342
|
return findTokenLimit(modelOrId.id);
|
|
136
343
|
}
|
|
137
|
-
const
|
|
138
|
-
|
|
344
|
+
const canonicalLimit = lookupCanonicalCapabilities(modelOrId)?.thinkingTokenLimit;
|
|
345
|
+
if (canonicalLimit) return canonicalLimit;
|
|
346
|
+
return findLegacyTokenLimit(modelOrId);
|
|
347
|
+
}
|
|
348
|
+
function findLegacyTokenLimit(modelId) {
|
|
349
|
+
if (!modelId) return null;
|
|
350
|
+
const lowerModelId = modelId.toLowerCase();
|
|
351
|
+
for (const [pattern, limit] of Object.entries(LEGACY_THINKING_TOKEN_LIMITS)) {
|
|
139
352
|
const regex = new RegExp(pattern, "i");
|
|
140
353
|
if (regex.test(lowerModelId)) {
|
|
141
354
|
return limit;
|
|
@@ -229,6 +442,7 @@ function buildQwenThinkingConfig(level, userMaxTokens) {
|
|
|
229
442
|
CANNOT_DISABLE_THINKING_PATTERNS,
|
|
230
443
|
DEFAULT_MAX_TOKENS,
|
|
231
444
|
EFFORT_RATIO,
|
|
445
|
+
LEGACY_THINKING_TOKEN_LIMITS,
|
|
232
446
|
REASONING_MODEL_PATTERNS,
|
|
233
447
|
THINKING_TOKEN_MAP,
|
|
234
448
|
buildAnthropicThinking,
|
|
@@ -236,6 +450,7 @@ function buildQwenThinkingConfig(level, userMaxTokens) {
|
|
|
236
450
|
buildQwenThinkingConfig,
|
|
237
451
|
calculateThinkingBudget,
|
|
238
452
|
canDisableThinking,
|
|
453
|
+
findLegacyTokenLimit,
|
|
239
454
|
findTokenLimit,
|
|
240
455
|
getClaudeMaxTokens,
|
|
241
456
|
getOpenAIReasoningEffort,
|
|
@@ -4,16 +4,14 @@ import { M as ModelConfig } from './llm-config-DeWNx1ig.cjs';
|
|
|
4
4
|
/**
|
|
5
5
|
* thinking-config — dependency-light thinking-budget / reasoning-effort helpers.
|
|
6
6
|
*
|
|
7
|
-
* The
|
|
7
|
+
* The budget/effort functions the `@omnicross/*` packages consume
|
|
8
8
|
* (`getOpenAIReasoningEffort`, `buildAnthropicThinking`, `calculateThinkingBudget`,
|
|
9
9
|
* `getClaudeMaxTokens`, `isReasoningModel`, `DEFAULT_MAX_TOKENS`) plus the in-file
|
|
10
10
|
* regex/numeric data they rely on.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* graph) and the cache-fed lookups (`getAvailableThinkLevels` / `validateThinkLevel`),
|
|
16
|
-
* none of which the `@omnicross/*` packages call.
|
|
12
|
+
* Canonical model metadata is the authoritative token-limit source. The regex
|
|
13
|
+
* table in this module remains a compatibility fallback for unregistered model
|
|
14
|
+
* ids; it is not a second model registry.
|
|
17
15
|
*/
|
|
18
16
|
|
|
19
17
|
/**
|
|
@@ -24,6 +22,14 @@ import { M as ModelConfig } from './llm-config-DeWNx1ig.cjs';
|
|
|
24
22
|
declare const EFFORT_RATIO: Record<ThinkLevel, number>;
|
|
25
23
|
/** Global default max_tokens — used only when an API requires max_tokens set. */
|
|
26
24
|
declare const DEFAULT_MAX_TOKENS = 4096;
|
|
25
|
+
declare const LEGACY_THINKING_TOKEN_LIMITS: Record<string, {
|
|
26
|
+
min: number;
|
|
27
|
+
max: number;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* @deprecated Use `findTokenLimit` for canonical-first lookup. This alias is
|
|
31
|
+
* retained for consumers that inspect the legacy regex fallback table.
|
|
32
|
+
*/
|
|
27
33
|
declare const THINKING_TOKEN_MAP: Record<string, {
|
|
28
34
|
min: number;
|
|
29
35
|
max: number;
|
|
@@ -37,13 +43,22 @@ declare function isReasoningModel(modelId: string): boolean;
|
|
|
37
43
|
/** Whether the model can disable thinking. */
|
|
38
44
|
declare function canDisableThinking(modelId: string): boolean;
|
|
39
45
|
/**
|
|
40
|
-
* Resolve the model's thinking-token limit.
|
|
41
|
-
*
|
|
46
|
+
* Resolve the model's thinking-token limit. Priority is an explicit model-row
|
|
47
|
+
* declaration, canonical metadata, then the legacy regex fallback table.
|
|
42
48
|
*/
|
|
43
49
|
declare function findTokenLimit(modelOrId: string | ModelConfig): {
|
|
44
50
|
min: number;
|
|
45
51
|
max: number;
|
|
46
52
|
} | null;
|
|
53
|
+
/**
|
|
54
|
+
* Match only the legacy regex compatibility table. New request builders should
|
|
55
|
+
* normally call `findTokenLimit`; the shared reasoning resolver uses this
|
|
56
|
+
* narrower helper after it has already merged provider and canonical metadata.
|
|
57
|
+
*/
|
|
58
|
+
declare function findLegacyTokenLimit(modelId: string): {
|
|
59
|
+
min: number;
|
|
60
|
+
max: number;
|
|
61
|
+
} | null;
|
|
47
62
|
/**
|
|
48
63
|
* Calculate the thinking budget for a model + effort level.
|
|
49
64
|
* Returns undefined when no budget can be computed.
|
|
@@ -51,7 +66,14 @@ declare function findTokenLimit(modelOrId: string | ModelConfig): {
|
|
|
51
66
|
declare function calculateThinkingBudget(modelId: string, level: ThinkLevel, userMaxTokens?: number): number | undefined;
|
|
52
67
|
/** Claude max_tokens after subtracting the thinking budget. */
|
|
53
68
|
declare function getClaudeMaxTokens(userMaxTokens: number | undefined, thinkingBudget: number | undefined): number | undefined;
|
|
54
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Context-free OpenAI reasoning_effort compatibility mapping.
|
|
71
|
+
*
|
|
72
|
+
* @deprecated This helper cannot determine whether a target model supports the
|
|
73
|
+
* requested effort. Internal request builders must use the model-aware core
|
|
74
|
+
* reasoning-plan resolver. Historical `max -> high` behavior is retained for
|
|
75
|
+
* external callers during the compatibility window.
|
|
76
|
+
*/
|
|
55
77
|
declare function getOpenAIReasoningEffort(level: ThinkLevel): string | undefined;
|
|
56
78
|
/** Gemini thinkingConfig builder. */
|
|
57
79
|
declare function buildGeminiThinkingConfig(modelId: string, level: ThinkLevel, userMaxTokens?: number): {
|
|
@@ -68,4 +90,4 @@ declare function buildQwenThinkingConfig(level: ThinkLevel, userMaxTokens?: numb
|
|
|
68
90
|
thinking_budget?: number;
|
|
69
91
|
};
|
|
70
92
|
|
|
71
|
-
export { CANNOT_DISABLE_THINKING_PATTERNS, DEFAULT_MAX_TOKENS, EFFORT_RATIO, REASONING_MODEL_PATTERNS, THINKING_TOKEN_MAP, buildAnthropicThinking, buildGeminiThinkingConfig, buildQwenThinkingConfig, calculateThinkingBudget, canDisableThinking, findTokenLimit, getClaudeMaxTokens, getOpenAIReasoningEffort, isReasoningModel };
|
|
93
|
+
export { CANNOT_DISABLE_THINKING_PATTERNS, DEFAULT_MAX_TOKENS, EFFORT_RATIO, LEGACY_THINKING_TOKEN_LIMITS, REASONING_MODEL_PATTERNS, THINKING_TOKEN_MAP, buildAnthropicThinking, buildGeminiThinkingConfig, buildQwenThinkingConfig, calculateThinkingBudget, canDisableThinking, findLegacyTokenLimit, findTokenLimit, getClaudeMaxTokens, getOpenAIReasoningEffort, isReasoningModel };
|
|
@@ -4,16 +4,14 @@ import { M as ModelConfig } from './llm-config-CKOaFFdy.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* thinking-config — dependency-light thinking-budget / reasoning-effort helpers.
|
|
6
6
|
*
|
|
7
|
-
* The
|
|
7
|
+
* The budget/effort functions the `@omnicross/*` packages consume
|
|
8
8
|
* (`getOpenAIReasoningEffort`, `buildAnthropicThinking`, `calculateThinkingBudget`,
|
|
9
9
|
* `getClaudeMaxTokens`, `isReasoningModel`, `DEFAULT_MAX_TOKENS`) plus the in-file
|
|
10
10
|
* regex/numeric data they rely on.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* graph) and the cache-fed lookups (`getAvailableThinkLevels` / `validateThinkLevel`),
|
|
16
|
-
* none of which the `@omnicross/*` packages call.
|
|
12
|
+
* Canonical model metadata is the authoritative token-limit source. The regex
|
|
13
|
+
* table in this module remains a compatibility fallback for unregistered model
|
|
14
|
+
* ids; it is not a second model registry.
|
|
17
15
|
*/
|
|
18
16
|
|
|
19
17
|
/**
|
|
@@ -24,6 +22,14 @@ import { M as ModelConfig } from './llm-config-CKOaFFdy.js';
|
|
|
24
22
|
declare const EFFORT_RATIO: Record<ThinkLevel, number>;
|
|
25
23
|
/** Global default max_tokens — used only when an API requires max_tokens set. */
|
|
26
24
|
declare const DEFAULT_MAX_TOKENS = 4096;
|
|
25
|
+
declare const LEGACY_THINKING_TOKEN_LIMITS: Record<string, {
|
|
26
|
+
min: number;
|
|
27
|
+
max: number;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* @deprecated Use `findTokenLimit` for canonical-first lookup. This alias is
|
|
31
|
+
* retained for consumers that inspect the legacy regex fallback table.
|
|
32
|
+
*/
|
|
27
33
|
declare const THINKING_TOKEN_MAP: Record<string, {
|
|
28
34
|
min: number;
|
|
29
35
|
max: number;
|
|
@@ -37,13 +43,22 @@ declare function isReasoningModel(modelId: string): boolean;
|
|
|
37
43
|
/** Whether the model can disable thinking. */
|
|
38
44
|
declare function canDisableThinking(modelId: string): boolean;
|
|
39
45
|
/**
|
|
40
|
-
* Resolve the model's thinking-token limit.
|
|
41
|
-
*
|
|
46
|
+
* Resolve the model's thinking-token limit. Priority is an explicit model-row
|
|
47
|
+
* declaration, canonical metadata, then the legacy regex fallback table.
|
|
42
48
|
*/
|
|
43
49
|
declare function findTokenLimit(modelOrId: string | ModelConfig): {
|
|
44
50
|
min: number;
|
|
45
51
|
max: number;
|
|
46
52
|
} | null;
|
|
53
|
+
/**
|
|
54
|
+
* Match only the legacy regex compatibility table. New request builders should
|
|
55
|
+
* normally call `findTokenLimit`; the shared reasoning resolver uses this
|
|
56
|
+
* narrower helper after it has already merged provider and canonical metadata.
|
|
57
|
+
*/
|
|
58
|
+
declare function findLegacyTokenLimit(modelId: string): {
|
|
59
|
+
min: number;
|
|
60
|
+
max: number;
|
|
61
|
+
} | null;
|
|
47
62
|
/**
|
|
48
63
|
* Calculate the thinking budget for a model + effort level.
|
|
49
64
|
* Returns undefined when no budget can be computed.
|
|
@@ -51,7 +66,14 @@ declare function findTokenLimit(modelOrId: string | ModelConfig): {
|
|
|
51
66
|
declare function calculateThinkingBudget(modelId: string, level: ThinkLevel, userMaxTokens?: number): number | undefined;
|
|
52
67
|
/** Claude max_tokens after subtracting the thinking budget. */
|
|
53
68
|
declare function getClaudeMaxTokens(userMaxTokens: number | undefined, thinkingBudget: number | undefined): number | undefined;
|
|
54
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Context-free OpenAI reasoning_effort compatibility mapping.
|
|
71
|
+
*
|
|
72
|
+
* @deprecated This helper cannot determine whether a target model supports the
|
|
73
|
+
* requested effort. Internal request builders must use the model-aware core
|
|
74
|
+
* reasoning-plan resolver. Historical `max -> high` behavior is retained for
|
|
75
|
+
* external callers during the compatibility window.
|
|
76
|
+
*/
|
|
55
77
|
declare function getOpenAIReasoningEffort(level: ThinkLevel): string | undefined;
|
|
56
78
|
/** Gemini thinkingConfig builder. */
|
|
57
79
|
declare function buildGeminiThinkingConfig(modelId: string, level: ThinkLevel, userMaxTokens?: number): {
|
|
@@ -68,4 +90,4 @@ declare function buildQwenThinkingConfig(level: ThinkLevel, userMaxTokens?: numb
|
|
|
68
90
|
thinking_budget?: number;
|
|
69
91
|
};
|
|
70
92
|
|
|
71
|
-
export { CANNOT_DISABLE_THINKING_PATTERNS, DEFAULT_MAX_TOKENS, EFFORT_RATIO, REASONING_MODEL_PATTERNS, THINKING_TOKEN_MAP, buildAnthropicThinking, buildGeminiThinkingConfig, buildQwenThinkingConfig, calculateThinkingBudget, canDisableThinking, findTokenLimit, getClaudeMaxTokens, getOpenAIReasoningEffort, isReasoningModel };
|
|
93
|
+
export { CANNOT_DISABLE_THINKING_PATTERNS, DEFAULT_MAX_TOKENS, EFFORT_RATIO, LEGACY_THINKING_TOKEN_LIMITS, REASONING_MODEL_PATTERNS, THINKING_TOKEN_MAP, buildAnthropicThinking, buildGeminiThinkingConfig, buildQwenThinkingConfig, calculateThinkingBudget, canDisableThinking, findLegacyTokenLimit, findTokenLimit, getClaudeMaxTokens, getOpenAIReasoningEffort, isReasoningModel };
|
package/dist/thinking-config.js
CHANGED
|
@@ -1,3 +1,205 @@
|
|
|
1
|
+
// src/canonical-models.ts
|
|
2
|
+
var OPENAI_MODELS = {
|
|
3
|
+
"gpt-5.6-sol": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
4
|
+
"gpt-5.6-terra": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
5
|
+
"gpt-5.6-luna": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
6
|
+
"gpt-5.5": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
7
|
+
"gpt-5.4": { category: "reasoning", contextLength: 105e4, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
8
|
+
"gpt-5.4-mini": { category: "reasoning", contextLength: 4e5, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
9
|
+
"gpt-5.3-codex": { category: "code", contextLength: 4e5, maxTokens: 128e3, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 128e3 } },
|
|
10
|
+
"gpt-5.2": { category: "reasoning", contextLength: 105e4, maxTokens: 65536, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "minimal", "low", "medium", "high", "xhigh"], thinkingTokenLimit: { min: 0, max: 65536 } },
|
|
11
|
+
"gpt-5": { category: "reasoning", contextLength: 105e4, maxTokens: 65536, reasoning: true, vision: true, functionCall: true },
|
|
12
|
+
"gpt-4.1": { category: "chat", contextLength: 105e4, maxTokens: 32768, vision: true, functionCall: true },
|
|
13
|
+
"gpt-4o": { category: "chat", contextLength: 128e3, maxTokens: 16384, vision: true, functionCall: true },
|
|
14
|
+
"gpt-4o-mini": { category: "chat", contextLength: 128e3, maxTokens: 16384, functionCall: true },
|
|
15
|
+
"o3": { category: "reasoning", contextLength: 2e5, maxTokens: 1e5, reasoning: true, thinkingLevels: ["low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 65536 } },
|
|
16
|
+
"o4-mini": { category: "reasoning", contextLength: 2e5, maxTokens: 1e5, reasoning: true, thinkingLevels: ["low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } }
|
|
17
|
+
};
|
|
18
|
+
var ANTHROPIC_MODELS = {
|
|
19
|
+
"claude-fable-5": { category: "reasoning", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
20
|
+
"claude-opus-5": { category: "reasoning", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
21
|
+
"claude-opus-4-8": { category: "reasoning", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
22
|
+
"claude-sonnet-5": { category: "chat", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
23
|
+
"claude-opus-4-7": { category: "reasoning", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
24
|
+
"claude-opus-4-7[1m]": { category: "reasoning", contextLength: 1e6, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true },
|
|
25
|
+
"claude-opus-4-6": { category: "reasoning", contextLength: 2e5, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 1024, max: 128e3 } },
|
|
26
|
+
"claude-opus-4-6[1m]": { category: "reasoning", contextLength: 1e6, maxTokens: 128e3, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 1024, max: 128e3 } },
|
|
27
|
+
"claude-sonnet-4-6": { category: "chat", contextLength: 2e5, maxTokens: 64e3, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 1024, max: 64e3 } },
|
|
28
|
+
"claude-sonnet-4-6[1m]": { category: "chat", contextLength: 1e6, maxTokens: 64e3, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 1024, max: 64e3 } },
|
|
29
|
+
"claude-haiku-4-5": { category: "chat", contextLength: 2e5, maxTokens: 64e3, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high", "xhigh", "max"], thinkingTokenLimit: { min: 1024, max: 64e3 } }
|
|
30
|
+
};
|
|
31
|
+
var GEMINI_MODELS = {
|
|
32
|
+
"gemini-3.5-flash": { category: "chat", contextLength: 1e6, maxTokens: 65536, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 24576 } },
|
|
33
|
+
"gemini-3-flash": { category: "chat", contextLength: 1e6, maxTokens: 65536, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 24576 } },
|
|
34
|
+
"gemini-3.1-pro": { category: "chat", contextLength: 1e6, maxTokens: 65536, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["low", "medium", "high"], thinkingTokenLimit: { min: 128, max: 32768 } }
|
|
35
|
+
};
|
|
36
|
+
var GROK_MODELS = {
|
|
37
|
+
"grok-4.5": { category: "chat", contextLength: 5e5, maxTokens: 32768, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
38
|
+
"grok-4.3": { category: "chat", contextLength: 1e6, maxTokens: 32768, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
39
|
+
"grok-4.20": { category: "chat", contextLength: 131072, maxTokens: 32768, vision: true, functionCall: true },
|
|
40
|
+
"grok-4.20-reasoning": { category: "reasoning", contextLength: 131072, maxTokens: 32768, reasoning: true, vision: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
41
|
+
"grok-4.20-multi-agent": { category: "reasoning", contextLength: 131072, maxTokens: 32768, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } }
|
|
42
|
+
};
|
|
43
|
+
var DEEPSEEK_MODELS = {
|
|
44
|
+
"deepseek-v4-flash": { category: "chat", contextLength: 1e6, maxTokens: 384e3, functionCall: true, reasoning: true, thinkingLevels: ["none", "high", "max"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
45
|
+
"deepseek-v4-pro": { category: "reasoning", contextLength: 1e6, maxTokens: 384e3, functionCall: true, reasoning: true, thinkingLevels: ["none", "high", "max"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
46
|
+
"deepseek-v3": { category: "chat", contextLength: 65536, maxTokens: 8192, functionCall: true },
|
|
47
|
+
"deepseek-v3.2": { category: "code", contextLength: 256e3, maxTokens: 32768, functionCall: true, reasoning: true },
|
|
48
|
+
"deepseek-r1": { category: "reasoning", contextLength: 64e3, maxTokens: 8192, reasoning: true, thinkingTokenLimit: { min: 0, max: 32768 } }
|
|
49
|
+
};
|
|
50
|
+
var ZHIPU_MODELS = {
|
|
51
|
+
"glm-5.2": { category: "chat", contextLength: 1048576, maxTokens: 131072, functionCall: true },
|
|
52
|
+
"glm-5": { category: "chat", contextLength: 2e5, maxTokens: 128e3, functionCall: true },
|
|
53
|
+
"glm-5.1": { category: "chat", contextLength: 2e5, maxTokens: 128e3, functionCall: true },
|
|
54
|
+
"glm-4.5-air": { category: "chat", contextLength: 128e3, maxTokens: 32768, functionCall: true },
|
|
55
|
+
"glm-4.6v": { category: "chat", contextLength: 128e3, maxTokens: 32768, vision: true, functionCall: true },
|
|
56
|
+
"glm-4.7": { category: "code", contextLength: 2e5, maxTokens: 128e3, functionCall: true }
|
|
57
|
+
};
|
|
58
|
+
var KIMI_MODELS = {
|
|
59
|
+
"kimi-k3": { category: "code", contextLength: 1048576, maxTokens: 1048576, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
60
|
+
"kimi-k2.6": { category: "code", contextLength: 256e3, maxTokens: 32768, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
61
|
+
"kimi-k2.5": { category: "chat", contextLength: 256e3, maxTokens: 65535, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
62
|
+
"kimi-k2-thinking": { category: "reasoning", contextLength: 256e3, reasoning: true, functionCall: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } }
|
|
63
|
+
};
|
|
64
|
+
var DASHSCOPE_QWEN_MODELS = {
|
|
65
|
+
"qwen3-max": { category: "chat", contextLength: 262144, maxTokens: 65536, functionCall: true, webSearch: true },
|
|
66
|
+
"qwen3.5-plus": { category: "chat", contextLength: 1e6, vision: true, functionCall: true, webSearch: true },
|
|
67
|
+
"qwen-turbo": { category: "chat", contextLength: 1e6, vision: true, webSearch: true },
|
|
68
|
+
"qwen3-coder-plus": { category: "code", contextLength: 1e6, functionCall: true },
|
|
69
|
+
"qwen-3-coder-480b": { category: "code", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
70
|
+
"qwen-3-32b": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
71
|
+
"qwen2.5-coder-32b-instruct": { category: "code", contextLength: 32768, maxTokens: 8192, functionCall: true },
|
|
72
|
+
"qwen2.5-coder-7b-instruct": { category: "code", contextLength: 32768, maxTokens: 8192, functionCall: true }
|
|
73
|
+
};
|
|
74
|
+
var VOLCENGINE_DOUBAO_MODELS = {
|
|
75
|
+
"ark-code-latest": { category: "code", contextLength: 256e3, maxTokens: 32768, functionCall: true },
|
|
76
|
+
"doubao-seed-2.0-code": { category: "code", contextLength: 256e3, maxTokens: 128e3, vision: true, functionCall: true },
|
|
77
|
+
"doubao-seed-2.0-lite": { category: "chat", contextLength: 256e3, maxTokens: 32768, functionCall: true }
|
|
78
|
+
};
|
|
79
|
+
var TENCENT_HUNYUAN_MODELS = {
|
|
80
|
+
"tc-code-latest": { category: "code", functionCall: true },
|
|
81
|
+
"hunyuan-2.0-instruct": { category: "chat", functionCall: true },
|
|
82
|
+
"hunyuan-turbos": { category: "chat", functionCall: true }
|
|
83
|
+
};
|
|
84
|
+
var MINIMAX_MODELS = {
|
|
85
|
+
"minimax-m2.5": { category: "code", contextLength: 204800, functionCall: true },
|
|
86
|
+
"minimax-m2.5-highspeed": { category: "code", contextLength: 204800, functionCall: true },
|
|
87
|
+
"minimax-m2.1": { category: "code", contextLength: 204800, functionCall: true },
|
|
88
|
+
"minimax-m2.1-highspeed": { category: "code", contextLength: 204800, functionCall: true }
|
|
89
|
+
};
|
|
90
|
+
var XIAOMI_MIMO_CANONICAL = {
|
|
91
|
+
"mimo-v2.5": { category: "code", contextLength: 1e6, maxTokens: 32768, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
92
|
+
// mimo-v2.5-pro does not support vision (text + reasoning only).
|
|
93
|
+
"mimo-v2.5-pro": { category: "code", contextLength: 1e6, maxTokens: 32768, vision: false, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
94
|
+
"mimo-v2-pro": { category: "code", contextLength: 1e6, maxTokens: 32768, vision: true, functionCall: true, reasoning: true, thinkingLevels: ["none", "low", "medium", "high"], thinkingTokenLimit: { min: 0, max: 32768 } },
|
|
95
|
+
"mimo-v2-flash": { category: "code", contextLength: 256e3, maxTokens: 32768, vision: true, functionCall: true },
|
|
96
|
+
"mimo-v2-omni": { category: "chat", contextLength: 256e3, maxTokens: 32768, vision: true, functionCall: true }
|
|
97
|
+
};
|
|
98
|
+
var META_LLAMA_MODELS = {
|
|
99
|
+
"llama-3.3-70b": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
100
|
+
"llama-3.3-70b-versatile": { category: "chat", contextLength: 131072, maxTokens: 32768, functionCall: true },
|
|
101
|
+
"llama-3.3-70b-instruct": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
102
|
+
"llama-3.3-70b-instruct-turbo": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
103
|
+
"llama-3.1-8b-instant": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true }
|
|
104
|
+
};
|
|
105
|
+
var MISTRAL_MODELS = {
|
|
106
|
+
"mistral-large-latest": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
107
|
+
"codestral-latest": { category: "code", contextLength: 256e3, maxTokens: 8192, functionCall: true },
|
|
108
|
+
"mistral-medium-latest": { category: "chat", contextLength: 131072, maxTokens: 8192, functionCall: true },
|
|
109
|
+
"mixtral-8x7b-32768": { category: "chat", contextLength: 32768, maxTokens: 32768, functionCall: true }
|
|
110
|
+
};
|
|
111
|
+
var PERPLEXITY_MODELS = {
|
|
112
|
+
"sonar": { category: "chat", contextLength: 127072, maxTokens: 8192, webSearch: true },
|
|
113
|
+
"sonar-pro": { category: "chat", contextLength: 2e5, maxTokens: 8192, webSearch: true },
|
|
114
|
+
"sonar-reasoning-pro": { category: "reasoning", contextLength: 127072, maxTokens: 8192, reasoning: true, webSearch: true }
|
|
115
|
+
};
|
|
116
|
+
var BAIDU_ERNIE_MODELS = {
|
|
117
|
+
"qianfan-code-latest": { category: "code", contextLength: 98304, maxTokens: 65536, functionCall: true },
|
|
118
|
+
"ernie-4.5": { category: "chat", functionCall: true },
|
|
119
|
+
"ernie-3.5": { category: "chat" }
|
|
120
|
+
};
|
|
121
|
+
var KUAISHOU_KAT_MODELS = {
|
|
122
|
+
"kat-coder-pro-v1": { category: "code", contextLength: 256e3, maxTokens: 128e3, functionCall: true },
|
|
123
|
+
"kat-coder-air-v1": { category: "code", contextLength: 128e3, maxTokens: 32768, functionCall: true }
|
|
124
|
+
};
|
|
125
|
+
var VENDOR_GROUPS = [
|
|
126
|
+
{ name: "OPENAI_MODELS", entries: OPENAI_MODELS },
|
|
127
|
+
{ name: "ANTHROPIC_MODELS", entries: ANTHROPIC_MODELS },
|
|
128
|
+
{ name: "GEMINI_MODELS", entries: GEMINI_MODELS },
|
|
129
|
+
{ name: "GROK_MODELS", entries: GROK_MODELS },
|
|
130
|
+
{ name: "DEEPSEEK_MODELS", entries: DEEPSEEK_MODELS },
|
|
131
|
+
{ name: "ZHIPU_MODELS", entries: ZHIPU_MODELS },
|
|
132
|
+
{ name: "KIMI_MODELS", entries: KIMI_MODELS },
|
|
133
|
+
{ name: "DASHSCOPE_QWEN_MODELS", entries: DASHSCOPE_QWEN_MODELS },
|
|
134
|
+
{ name: "VOLCENGINE_DOUBAO_MODELS", entries: VOLCENGINE_DOUBAO_MODELS },
|
|
135
|
+
{ name: "TENCENT_HUNYUAN_MODELS", entries: TENCENT_HUNYUAN_MODELS },
|
|
136
|
+
{ name: "MINIMAX_MODELS", entries: MINIMAX_MODELS },
|
|
137
|
+
{ name: "XIAOMI_MIMO_CANONICAL", entries: XIAOMI_MIMO_CANONICAL },
|
|
138
|
+
{ name: "META_LLAMA_MODELS", entries: META_LLAMA_MODELS },
|
|
139
|
+
{ name: "MISTRAL_MODELS", entries: MISTRAL_MODELS },
|
|
140
|
+
{ name: "PERPLEXITY_MODELS", entries: PERPLEXITY_MODELS },
|
|
141
|
+
{ name: "BAIDU_ERNIE_MODELS", entries: BAIDU_ERNIE_MODELS },
|
|
142
|
+
{ name: "KUAISHOU_KAT_MODELS", entries: KUAISHOU_KAT_MODELS }
|
|
143
|
+
];
|
|
144
|
+
function assertNoDuplicateCanonicalIds() {
|
|
145
|
+
const seen = /* @__PURE__ */ new Map();
|
|
146
|
+
for (const { name, entries } of VENDOR_GROUPS) {
|
|
147
|
+
for (const id of Object.keys(entries)) {
|
|
148
|
+
const prior = seen.get(id);
|
|
149
|
+
if (prior) {
|
|
150
|
+
throw new Error(
|
|
151
|
+
`[canonical-models] duplicate id '${id}' registered in both '${prior}' and '${name}'. Each model must live in exactly one vendor group.`
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
seen.set(id, name);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
assertNoDuplicateCanonicalIds();
|
|
159
|
+
var KNOWN_MODELS = Object.freeze(
|
|
160
|
+
Object.assign(
|
|
161
|
+
/* @__PURE__ */ Object.create(null),
|
|
162
|
+
...VENDOR_GROUPS.map((g) => g.entries)
|
|
163
|
+
)
|
|
164
|
+
);
|
|
165
|
+
function normalizeModelId(rawId) {
|
|
166
|
+
if (!rawId) return "";
|
|
167
|
+
const slashIdx = rawId.lastIndexOf("/");
|
|
168
|
+
const base = slashIdx >= 0 ? rawId.slice(slashIdx + 1) : rawId;
|
|
169
|
+
const colonIdx = base.indexOf(":");
|
|
170
|
+
const noSuffix = colonIdx >= 0 ? base.slice(0, colonIdx) : base;
|
|
171
|
+
return noSuffix.toLowerCase();
|
|
172
|
+
}
|
|
173
|
+
var MODEL_ALIASES = {
|
|
174
|
+
"gpt-5.6": "gpt-5.6-sol",
|
|
175
|
+
"deepseek-chat": "deepseek-v3",
|
|
176
|
+
"deepseek-reasoner": "deepseek-r1"
|
|
177
|
+
};
|
|
178
|
+
function applyAlias(normalizedId) {
|
|
179
|
+
return MODEL_ALIASES[normalizedId] ?? normalizedId;
|
|
180
|
+
}
|
|
181
|
+
function assertAliasesPointToKnownModels() {
|
|
182
|
+
for (const [from, to] of Object.entries(MODEL_ALIASES)) {
|
|
183
|
+
if (!(to in KNOWN_MODELS)) {
|
|
184
|
+
throw new Error(
|
|
185
|
+
`[canonical-models] alias '${from}' \u2192 '${to}' points at unknown id. Either add '${to}' to a vendor group or fix the alias.`
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
assertAliasesPointToKnownModels();
|
|
191
|
+
function lookupCanonicalCapabilities(rawId, extendedContext = false) {
|
|
192
|
+
const normalized = normalizeModelId(rawId);
|
|
193
|
+
if (!normalized) return void 0;
|
|
194
|
+
const canonicalId = applyAlias(normalized);
|
|
195
|
+
if (extendedContext) {
|
|
196
|
+
const extendedKey = `${canonicalId}[1m]`;
|
|
197
|
+
const extended = KNOWN_MODELS[extendedKey];
|
|
198
|
+
if (extended) return extended;
|
|
199
|
+
}
|
|
200
|
+
return KNOWN_MODELS[canonicalId];
|
|
201
|
+
}
|
|
202
|
+
|
|
1
203
|
// src/thinking-config.ts
|
|
2
204
|
var EFFORT_RATIO = {
|
|
3
205
|
none: 0.01,
|
|
@@ -9,7 +211,7 @@ var EFFORT_RATIO = {
|
|
|
9
211
|
max: 0.95
|
|
10
212
|
};
|
|
11
213
|
var DEFAULT_MAX_TOKENS = 4096;
|
|
12
|
-
var
|
|
214
|
+
var LEGACY_THINKING_TOKEN_LIMITS = {
|
|
13
215
|
// Gemini
|
|
14
216
|
"gemini-2\\.5-flash-lite": { min: 512, max: 24576 },
|
|
15
217
|
"gemini-.*-flash": { min: 0, max: 24576 },
|
|
@@ -65,6 +267,7 @@ var THINKING_TOKEN_MAP = {
|
|
|
65
267
|
// Doubao
|
|
66
268
|
"doubao.*think": { min: 0, max: 16384 }
|
|
67
269
|
};
|
|
270
|
+
var THINKING_TOKEN_MAP = LEGACY_THINKING_TOKEN_LIMITS;
|
|
68
271
|
var REASONING_MODEL_PATTERNS = [
|
|
69
272
|
/^o[134](-mini|-preview|-pro)?$/i,
|
|
70
273
|
/^gpt-5(\.\d)?(-pro|-codex|-codex-max)?/i,
|
|
@@ -97,8 +300,14 @@ function findTokenLimit(modelOrId) {
|
|
|
97
300
|
if (modelOrId.thinkingTokenLimit) return modelOrId.thinkingTokenLimit;
|
|
98
301
|
return findTokenLimit(modelOrId.id);
|
|
99
302
|
}
|
|
100
|
-
const
|
|
101
|
-
|
|
303
|
+
const canonicalLimit = lookupCanonicalCapabilities(modelOrId)?.thinkingTokenLimit;
|
|
304
|
+
if (canonicalLimit) return canonicalLimit;
|
|
305
|
+
return findLegacyTokenLimit(modelOrId);
|
|
306
|
+
}
|
|
307
|
+
function findLegacyTokenLimit(modelId) {
|
|
308
|
+
if (!modelId) return null;
|
|
309
|
+
const lowerModelId = modelId.toLowerCase();
|
|
310
|
+
for (const [pattern, limit] of Object.entries(LEGACY_THINKING_TOKEN_LIMITS)) {
|
|
102
311
|
const regex = new RegExp(pattern, "i");
|
|
103
312
|
if (regex.test(lowerModelId)) {
|
|
104
313
|
return limit;
|
|
@@ -191,6 +400,7 @@ export {
|
|
|
191
400
|
CANNOT_DISABLE_THINKING_PATTERNS,
|
|
192
401
|
DEFAULT_MAX_TOKENS,
|
|
193
402
|
EFFORT_RATIO,
|
|
403
|
+
LEGACY_THINKING_TOKEN_LIMITS,
|
|
194
404
|
REASONING_MODEL_PATTERNS,
|
|
195
405
|
THINKING_TOKEN_MAP,
|
|
196
406
|
buildAnthropicThinking,
|
|
@@ -198,6 +408,7 @@ export {
|
|
|
198
408
|
buildQwenThinkingConfig,
|
|
199
409
|
calculateThinkingBudget,
|
|
200
410
|
canDisableThinking,
|
|
411
|
+
findLegacyTokenLimit,
|
|
201
412
|
findTokenLimit,
|
|
202
413
|
getClaudeMaxTokens,
|
|
203
414
|
getOpenAIReasoningEffort,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omnicross/contracts",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "Dependency-light, host-agnostic contract types + runtime-value helpers shared by the @omnicross/* packages.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Sayo (https://github.com/Dumoedss)",
|