@agentick/shared 0.0.1
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/LICENSE +21 -0
- package/README.md +322 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/.tsbuildinfo.build +1 -0
- package/dist/block-types.d.ts +85 -0
- package/dist/block-types.d.ts.map +1 -0
- package/dist/block-types.js +98 -0
- package/dist/block-types.js.map +1 -0
- package/dist/blocks.d.ts +396 -0
- package/dist/blocks.d.ts.map +1 -0
- package/dist/blocks.js +209 -0
- package/dist/blocks.js.map +1 -0
- package/dist/devtools.d.ts +672 -0
- package/dist/devtools.d.ts.map +1 -0
- package/dist/devtools.js +445 -0
- package/dist/devtools.js.map +1 -0
- package/dist/errors.d.ts +335 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +529 -0
- package/dist/errors.js.map +1 -0
- package/dist/identity.d.ts +99 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +116 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/input.d.ts +55 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +83 -0
- package/dist/input.js.map +1 -0
- package/dist/messages.d.ts +98 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +81 -0
- package/dist/messages.js.map +1 -0
- package/dist/model-catalog.d.ts +144 -0
- package/dist/model-catalog.d.ts.map +1 -0
- package/dist/model-catalog.js +861 -0
- package/dist/model-catalog.js.map +1 -0
- package/dist/models.d.ts +173 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +10 -0
- package/dist/models.js.map +1 -0
- package/dist/protocol.d.ts +257 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +41 -0
- package/dist/protocol.js.map +1 -0
- package/dist/streaming.d.ts +635 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +134 -0
- package/dist/streaming.js.map +1 -0
- package/dist/testing/fixtures.d.ts +250 -0
- package/dist/testing/fixtures.d.ts.map +1 -0
- package/dist/testing/fixtures.js +827 -0
- package/dist/testing/fixtures.js.map +1 -0
- package/dist/testing/helpers.d.ts +95 -0
- package/dist/testing/helpers.d.ts.map +1 -0
- package/dist/testing/helpers.js +271 -0
- package/dist/testing/helpers.js.map +1 -0
- package/dist/testing/index.d.ts +42 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +70 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/timeline.d.ts +59 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +11 -0
- package/dist/timeline.js.map +1 -0
- package/dist/tools.d.ts +220 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +63 -0
- package/dist/tools.js.map +1 -0
- package/dist/utils/entity-ids.d.ts +26 -0
- package/dist/utils/entity-ids.d.ts.map +1 -0
- package/dist/utils/entity-ids.js +44 -0
- package/dist/utils/entity-ids.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/merge-deep.d.ts +10 -0
- package/dist/utils/merge-deep.d.ts.map +1 -0
- package/dist/utils/merge-deep.js +33 -0
- package/dist/utils/merge-deep.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,861 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Catalog
|
|
3
|
+
*
|
|
4
|
+
* Reference data for known models including context windows and capabilities.
|
|
5
|
+
* This is a best-effort catalog - actual limits may change.
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* - MODEL_CATALOG is static reference data (defaults)
|
|
9
|
+
* - Adapters are source of truth and can override via ModelMetadata
|
|
10
|
+
* - Runtime additions via registerModel() for dynamic discovery
|
|
11
|
+
* - Lookup order: runtime > static catalog
|
|
12
|
+
*
|
|
13
|
+
* Sources (as of February 2026):
|
|
14
|
+
* - Anthropic: https://platform.claude.com/docs/en/about-claude/models/overview
|
|
15
|
+
* - OpenAI: https://platform.openai.com/docs/models
|
|
16
|
+
* - Google: https://ai.google.dev/gemini-api/docs/models
|
|
17
|
+
* - Mistral: https://mistral.ai/models
|
|
18
|
+
* - Meta: https://www.llama.com/models/llama-4/
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Runtime model registry for dynamic additions.
|
|
22
|
+
* Takes precedence over MODEL_CATALOG.
|
|
23
|
+
*/
|
|
24
|
+
const runtimeRegistry = new Map();
|
|
25
|
+
/**
|
|
26
|
+
* Register a model at runtime.
|
|
27
|
+
* Use this for models discovered dynamically or provided by adapters.
|
|
28
|
+
*
|
|
29
|
+
* @param modelId - The model ID
|
|
30
|
+
* @param info - Model information
|
|
31
|
+
*/
|
|
32
|
+
export function registerModel(modelId, info) {
|
|
33
|
+
runtimeRegistry.set(modelId.toLowerCase(), info);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Register multiple models at once.
|
|
37
|
+
*
|
|
38
|
+
* @param models - Map of model ID to model info
|
|
39
|
+
*/
|
|
40
|
+
export function registerModels(models) {
|
|
41
|
+
for (const [id, info] of Object.entries(models)) {
|
|
42
|
+
registerModel(id, info);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Clear all runtime-registered models.
|
|
47
|
+
* Primarily for testing.
|
|
48
|
+
*/
|
|
49
|
+
export function clearRuntimeModels() {
|
|
50
|
+
runtimeRegistry.clear();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get all runtime-registered models.
|
|
54
|
+
*/
|
|
55
|
+
export function getRuntimeModels() {
|
|
56
|
+
return new Map(runtimeRegistry);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Known model context windows and capabilities.
|
|
60
|
+
*
|
|
61
|
+
* Keys are model IDs (case-insensitive matching recommended).
|
|
62
|
+
* Includes common aliases and versioned names.
|
|
63
|
+
*
|
|
64
|
+
* Last updated: February 2026
|
|
65
|
+
*/
|
|
66
|
+
export const MODEL_CATALOG = {
|
|
67
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
68
|
+
// Anthropic Claude Models
|
|
69
|
+
// https://platform.claude.com/docs/en/about-claude/models/overview
|
|
70
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
71
|
+
// Claude 4 Series (2025)
|
|
72
|
+
"claude-opus-4-20250514": {
|
|
73
|
+
name: "Claude Opus 4",
|
|
74
|
+
provider: "anthropic",
|
|
75
|
+
contextWindow: 200000,
|
|
76
|
+
maxOutputTokens: 32000,
|
|
77
|
+
supportsVision: true,
|
|
78
|
+
supportsToolUse: true,
|
|
79
|
+
},
|
|
80
|
+
"claude-opus-4": {
|
|
81
|
+
name: "Claude Opus 4",
|
|
82
|
+
provider: "anthropic",
|
|
83
|
+
contextWindow: 200000,
|
|
84
|
+
maxOutputTokens: 32000,
|
|
85
|
+
supportsVision: true,
|
|
86
|
+
supportsToolUse: true,
|
|
87
|
+
},
|
|
88
|
+
"claude-opus-4-5-20251101": {
|
|
89
|
+
name: "Claude Opus 4.5",
|
|
90
|
+
provider: "anthropic",
|
|
91
|
+
contextWindow: 200000, // 1M available for tier 4+
|
|
92
|
+
maxOutputTokens: 32000,
|
|
93
|
+
supportsVision: true,
|
|
94
|
+
supportsToolUse: true,
|
|
95
|
+
},
|
|
96
|
+
"claude-opus-4.5": {
|
|
97
|
+
name: "Claude Opus 4.5",
|
|
98
|
+
provider: "anthropic",
|
|
99
|
+
contextWindow: 200000,
|
|
100
|
+
maxOutputTokens: 32000,
|
|
101
|
+
supportsVision: true,
|
|
102
|
+
supportsToolUse: true,
|
|
103
|
+
},
|
|
104
|
+
"claude-sonnet-4-20250514": {
|
|
105
|
+
name: "Claude Sonnet 4",
|
|
106
|
+
provider: "anthropic",
|
|
107
|
+
contextWindow: 200000, // 1M available for tier 4+
|
|
108
|
+
maxOutputTokens: 16384,
|
|
109
|
+
supportsVision: true,
|
|
110
|
+
supportsToolUse: true,
|
|
111
|
+
},
|
|
112
|
+
"claude-sonnet-4": {
|
|
113
|
+
name: "Claude Sonnet 4",
|
|
114
|
+
provider: "anthropic",
|
|
115
|
+
contextWindow: 200000,
|
|
116
|
+
maxOutputTokens: 16384,
|
|
117
|
+
supportsVision: true,
|
|
118
|
+
supportsToolUse: true,
|
|
119
|
+
},
|
|
120
|
+
// Claude 3.5 Series
|
|
121
|
+
"claude-3-5-sonnet-20241022": {
|
|
122
|
+
name: "Claude 3.5 Sonnet",
|
|
123
|
+
provider: "anthropic",
|
|
124
|
+
contextWindow: 200000,
|
|
125
|
+
maxOutputTokens: 8192,
|
|
126
|
+
supportsVision: true,
|
|
127
|
+
supportsToolUse: true,
|
|
128
|
+
},
|
|
129
|
+
"claude-3-5-sonnet-latest": {
|
|
130
|
+
name: "Claude 3.5 Sonnet",
|
|
131
|
+
provider: "anthropic",
|
|
132
|
+
contextWindow: 200000,
|
|
133
|
+
maxOutputTokens: 8192,
|
|
134
|
+
supportsVision: true,
|
|
135
|
+
supportsToolUse: true,
|
|
136
|
+
},
|
|
137
|
+
"claude-3-5-sonnet": {
|
|
138
|
+
name: "Claude 3.5 Sonnet",
|
|
139
|
+
provider: "anthropic",
|
|
140
|
+
contextWindow: 200000,
|
|
141
|
+
maxOutputTokens: 8192,
|
|
142
|
+
supportsVision: true,
|
|
143
|
+
supportsToolUse: true,
|
|
144
|
+
},
|
|
145
|
+
"claude-3-5-haiku-20241022": {
|
|
146
|
+
name: "Claude 3.5 Haiku",
|
|
147
|
+
provider: "anthropic",
|
|
148
|
+
contextWindow: 200000,
|
|
149
|
+
maxOutputTokens: 8192,
|
|
150
|
+
supportsVision: true,
|
|
151
|
+
supportsToolUse: true,
|
|
152
|
+
},
|
|
153
|
+
"claude-3-5-haiku-latest": {
|
|
154
|
+
name: "Claude 3.5 Haiku",
|
|
155
|
+
provider: "anthropic",
|
|
156
|
+
contextWindow: 200000,
|
|
157
|
+
maxOutputTokens: 8192,
|
|
158
|
+
supportsVision: true,
|
|
159
|
+
supportsToolUse: true,
|
|
160
|
+
},
|
|
161
|
+
// Claude 3 Series (legacy)
|
|
162
|
+
"claude-3-opus-20240229": {
|
|
163
|
+
name: "Claude 3 Opus",
|
|
164
|
+
provider: "anthropic",
|
|
165
|
+
contextWindow: 200000,
|
|
166
|
+
maxOutputTokens: 4096,
|
|
167
|
+
supportsVision: true,
|
|
168
|
+
supportsToolUse: true,
|
|
169
|
+
},
|
|
170
|
+
"claude-3-sonnet-20240229": {
|
|
171
|
+
name: "Claude 3 Sonnet",
|
|
172
|
+
provider: "anthropic",
|
|
173
|
+
contextWindow: 200000,
|
|
174
|
+
maxOutputTokens: 4096,
|
|
175
|
+
supportsVision: true,
|
|
176
|
+
supportsToolUse: true,
|
|
177
|
+
},
|
|
178
|
+
"claude-3-haiku-20240307": {
|
|
179
|
+
name: "Claude 3 Haiku",
|
|
180
|
+
provider: "anthropic",
|
|
181
|
+
contextWindow: 200000,
|
|
182
|
+
maxOutputTokens: 4096,
|
|
183
|
+
supportsVision: true,
|
|
184
|
+
supportsToolUse: true,
|
|
185
|
+
},
|
|
186
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
187
|
+
// OpenAI GPT Models
|
|
188
|
+
// https://platform.openai.com/docs/models
|
|
189
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
190
|
+
// GPT-5.2 "Garlic" (December 2025)
|
|
191
|
+
"gpt-5.2": {
|
|
192
|
+
name: "GPT-5.2",
|
|
193
|
+
provider: "openai",
|
|
194
|
+
contextWindow: 400000,
|
|
195
|
+
maxOutputTokens: 128000,
|
|
196
|
+
supportsVision: true,
|
|
197
|
+
supportsToolUse: true,
|
|
198
|
+
},
|
|
199
|
+
"gpt-5.2-turbo": {
|
|
200
|
+
name: "GPT-5.2 Turbo",
|
|
201
|
+
provider: "openai",
|
|
202
|
+
contextWindow: 400000,
|
|
203
|
+
maxOutputTokens: 128000,
|
|
204
|
+
supportsVision: true,
|
|
205
|
+
supportsToolUse: true,
|
|
206
|
+
},
|
|
207
|
+
// GPT-5
|
|
208
|
+
"gpt-5": {
|
|
209
|
+
name: "GPT-5",
|
|
210
|
+
provider: "openai",
|
|
211
|
+
contextWindow: 400000,
|
|
212
|
+
maxOutputTokens: 32768,
|
|
213
|
+
supportsVision: true,
|
|
214
|
+
supportsToolUse: true,
|
|
215
|
+
},
|
|
216
|
+
// GPT-4.1 (1M context)
|
|
217
|
+
"gpt-4.1": {
|
|
218
|
+
name: "GPT-4.1",
|
|
219
|
+
provider: "openai",
|
|
220
|
+
contextWindow: 1047576, // ~1M
|
|
221
|
+
maxOutputTokens: 32768,
|
|
222
|
+
supportsVision: true,
|
|
223
|
+
supportsToolUse: true,
|
|
224
|
+
},
|
|
225
|
+
"gpt-4.1-mini": {
|
|
226
|
+
name: "GPT-4.1 Mini",
|
|
227
|
+
provider: "openai",
|
|
228
|
+
contextWindow: 1047576,
|
|
229
|
+
maxOutputTokens: 16384,
|
|
230
|
+
supportsVision: true,
|
|
231
|
+
supportsToolUse: true,
|
|
232
|
+
},
|
|
233
|
+
// GPT-4o
|
|
234
|
+
"gpt-4o": {
|
|
235
|
+
name: "GPT-4o",
|
|
236
|
+
provider: "openai",
|
|
237
|
+
contextWindow: 128000,
|
|
238
|
+
maxOutputTokens: 16384,
|
|
239
|
+
supportsVision: true,
|
|
240
|
+
supportsToolUse: true,
|
|
241
|
+
},
|
|
242
|
+
"gpt-4o-2024-11-20": {
|
|
243
|
+
name: "GPT-4o",
|
|
244
|
+
provider: "openai",
|
|
245
|
+
contextWindow: 128000,
|
|
246
|
+
maxOutputTokens: 16384,
|
|
247
|
+
supportsVision: true,
|
|
248
|
+
supportsToolUse: true,
|
|
249
|
+
},
|
|
250
|
+
"gpt-4o-2024-08-06": {
|
|
251
|
+
name: "GPT-4o",
|
|
252
|
+
provider: "openai",
|
|
253
|
+
contextWindow: 128000,
|
|
254
|
+
maxOutputTokens: 16384,
|
|
255
|
+
supportsVision: true,
|
|
256
|
+
supportsToolUse: true,
|
|
257
|
+
},
|
|
258
|
+
"gpt-4o-2024-05-13": {
|
|
259
|
+
name: "GPT-4o",
|
|
260
|
+
provider: "openai",
|
|
261
|
+
contextWindow: 128000,
|
|
262
|
+
maxOutputTokens: 4096,
|
|
263
|
+
supportsVision: true,
|
|
264
|
+
supportsToolUse: true,
|
|
265
|
+
},
|
|
266
|
+
// GPT-4o Mini
|
|
267
|
+
"gpt-4o-mini": {
|
|
268
|
+
name: "GPT-4o Mini",
|
|
269
|
+
provider: "openai",
|
|
270
|
+
contextWindow: 128000,
|
|
271
|
+
maxOutputTokens: 16384,
|
|
272
|
+
supportsVision: true,
|
|
273
|
+
supportsToolUse: true,
|
|
274
|
+
},
|
|
275
|
+
"gpt-4o-mini-2024-07-18": {
|
|
276
|
+
name: "GPT-4o Mini",
|
|
277
|
+
provider: "openai",
|
|
278
|
+
contextWindow: 128000,
|
|
279
|
+
maxOutputTokens: 16384,
|
|
280
|
+
supportsVision: true,
|
|
281
|
+
supportsToolUse: true,
|
|
282
|
+
},
|
|
283
|
+
// GPT-4 Turbo
|
|
284
|
+
"gpt-4-turbo": {
|
|
285
|
+
name: "GPT-4 Turbo",
|
|
286
|
+
provider: "openai",
|
|
287
|
+
contextWindow: 128000,
|
|
288
|
+
maxOutputTokens: 4096,
|
|
289
|
+
supportsVision: true,
|
|
290
|
+
supportsToolUse: true,
|
|
291
|
+
},
|
|
292
|
+
"gpt-4-turbo-2024-04-09": {
|
|
293
|
+
name: "GPT-4 Turbo",
|
|
294
|
+
provider: "openai",
|
|
295
|
+
contextWindow: 128000,
|
|
296
|
+
maxOutputTokens: 4096,
|
|
297
|
+
supportsVision: true,
|
|
298
|
+
supportsToolUse: true,
|
|
299
|
+
},
|
|
300
|
+
// GPT-4 (legacy)
|
|
301
|
+
"gpt-4": {
|
|
302
|
+
name: "GPT-4",
|
|
303
|
+
provider: "openai",
|
|
304
|
+
contextWindow: 8192,
|
|
305
|
+
maxOutputTokens: 4096,
|
|
306
|
+
supportsVision: false,
|
|
307
|
+
supportsToolUse: true,
|
|
308
|
+
},
|
|
309
|
+
"gpt-4-32k": {
|
|
310
|
+
name: "GPT-4 32K",
|
|
311
|
+
provider: "openai",
|
|
312
|
+
contextWindow: 32768,
|
|
313
|
+
maxOutputTokens: 4096,
|
|
314
|
+
supportsVision: false,
|
|
315
|
+
supportsToolUse: true,
|
|
316
|
+
},
|
|
317
|
+
// GPT-3.5 Turbo (legacy)
|
|
318
|
+
"gpt-3.5-turbo": {
|
|
319
|
+
name: "GPT-3.5 Turbo",
|
|
320
|
+
provider: "openai",
|
|
321
|
+
contextWindow: 16385,
|
|
322
|
+
maxOutputTokens: 4096,
|
|
323
|
+
supportsVision: false,
|
|
324
|
+
supportsToolUse: true,
|
|
325
|
+
},
|
|
326
|
+
// o-Series (Reasoning models)
|
|
327
|
+
o1: {
|
|
328
|
+
name: "o1",
|
|
329
|
+
provider: "openai",
|
|
330
|
+
contextWindow: 200000,
|
|
331
|
+
maxOutputTokens: 100000,
|
|
332
|
+
supportsVision: true,
|
|
333
|
+
supportsToolUse: true,
|
|
334
|
+
isReasoningModel: true,
|
|
335
|
+
},
|
|
336
|
+
"o1-2024-12-17": {
|
|
337
|
+
name: "o1",
|
|
338
|
+
provider: "openai",
|
|
339
|
+
contextWindow: 200000,
|
|
340
|
+
maxOutputTokens: 100000,
|
|
341
|
+
supportsVision: true,
|
|
342
|
+
supportsToolUse: true,
|
|
343
|
+
isReasoningModel: true,
|
|
344
|
+
},
|
|
345
|
+
"o1-preview": {
|
|
346
|
+
name: "o1 Preview",
|
|
347
|
+
provider: "openai",
|
|
348
|
+
contextWindow: 128000,
|
|
349
|
+
maxOutputTokens: 32768,
|
|
350
|
+
supportsVision: false,
|
|
351
|
+
supportsToolUse: false,
|
|
352
|
+
isReasoningModel: true,
|
|
353
|
+
},
|
|
354
|
+
"o1-mini": {
|
|
355
|
+
name: "o1 Mini",
|
|
356
|
+
provider: "openai",
|
|
357
|
+
contextWindow: 128000,
|
|
358
|
+
maxOutputTokens: 65536,
|
|
359
|
+
supportsVision: false,
|
|
360
|
+
supportsToolUse: false,
|
|
361
|
+
isReasoningModel: true,
|
|
362
|
+
},
|
|
363
|
+
"o3-mini": {
|
|
364
|
+
name: "o3 Mini",
|
|
365
|
+
provider: "openai",
|
|
366
|
+
contextWindow: 200000,
|
|
367
|
+
maxOutputTokens: 100000,
|
|
368
|
+
supportsVision: false,
|
|
369
|
+
supportsToolUse: true,
|
|
370
|
+
isReasoningModel: true,
|
|
371
|
+
},
|
|
372
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
373
|
+
// Google Gemini Models
|
|
374
|
+
// https://ai.google.dev/gemini-api/docs/models
|
|
375
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
376
|
+
// Gemini 3 (Latest - 2026)
|
|
377
|
+
"gemini-3-pro": {
|
|
378
|
+
name: "Gemini 3 Pro",
|
|
379
|
+
provider: "google",
|
|
380
|
+
contextWindow: 1000000, // 1M
|
|
381
|
+
maxOutputTokens: 65536,
|
|
382
|
+
supportsVision: true,
|
|
383
|
+
supportsToolUse: true,
|
|
384
|
+
},
|
|
385
|
+
"gemini-3-pro-latest": {
|
|
386
|
+
name: "Gemini 3 Pro",
|
|
387
|
+
provider: "google",
|
|
388
|
+
contextWindow: 1000000,
|
|
389
|
+
maxOutputTokens: 65536,
|
|
390
|
+
supportsVision: true,
|
|
391
|
+
supportsToolUse: true,
|
|
392
|
+
},
|
|
393
|
+
"gemini-3-flash": {
|
|
394
|
+
name: "Gemini 3 Flash",
|
|
395
|
+
provider: "google",
|
|
396
|
+
contextWindow: 200000,
|
|
397
|
+
maxOutputTokens: 32768,
|
|
398
|
+
supportsVision: true,
|
|
399
|
+
supportsToolUse: true,
|
|
400
|
+
},
|
|
401
|
+
"gemini-3-flash-latest": {
|
|
402
|
+
name: "Gemini 3 Flash",
|
|
403
|
+
provider: "google",
|
|
404
|
+
contextWindow: 200000,
|
|
405
|
+
maxOutputTokens: 32768,
|
|
406
|
+
supportsVision: true,
|
|
407
|
+
supportsToolUse: true,
|
|
408
|
+
},
|
|
409
|
+
// Gemini 2.5 Pro
|
|
410
|
+
"gemini-2.5-pro": {
|
|
411
|
+
name: "Gemini 2.5 Pro",
|
|
412
|
+
provider: "google",
|
|
413
|
+
contextWindow: 1000000,
|
|
414
|
+
maxOutputTokens: 65536,
|
|
415
|
+
supportsVision: true,
|
|
416
|
+
supportsToolUse: true,
|
|
417
|
+
},
|
|
418
|
+
"gemini-2.5-pro-latest": {
|
|
419
|
+
name: "Gemini 2.5 Pro",
|
|
420
|
+
provider: "google",
|
|
421
|
+
contextWindow: 1000000,
|
|
422
|
+
maxOutputTokens: 65536,
|
|
423
|
+
supportsVision: true,
|
|
424
|
+
supportsToolUse: true,
|
|
425
|
+
},
|
|
426
|
+
// Gemini 2.0 Flash (deprecated March 3, 2026)
|
|
427
|
+
"gemini-2.0-flash": {
|
|
428
|
+
name: "Gemini 2.0 Flash",
|
|
429
|
+
provider: "google",
|
|
430
|
+
contextWindow: 1048576,
|
|
431
|
+
maxOutputTokens: 8192,
|
|
432
|
+
supportsVision: true,
|
|
433
|
+
supportsToolUse: true,
|
|
434
|
+
},
|
|
435
|
+
"gemini-2.0-flash-exp": {
|
|
436
|
+
name: "Gemini 2.0 Flash Experimental",
|
|
437
|
+
provider: "google",
|
|
438
|
+
contextWindow: 1048576,
|
|
439
|
+
maxOutputTokens: 8192,
|
|
440
|
+
supportsVision: true,
|
|
441
|
+
supportsToolUse: true,
|
|
442
|
+
},
|
|
443
|
+
// Gemini 1.5 Pro (deprecated)
|
|
444
|
+
"gemini-1.5-pro": {
|
|
445
|
+
name: "Gemini 1.5 Pro",
|
|
446
|
+
provider: "google",
|
|
447
|
+
contextWindow: 2097152, // 2M
|
|
448
|
+
maxOutputTokens: 8192,
|
|
449
|
+
supportsVision: true,
|
|
450
|
+
supportsToolUse: true,
|
|
451
|
+
},
|
|
452
|
+
"gemini-1.5-pro-latest": {
|
|
453
|
+
name: "Gemini 1.5 Pro",
|
|
454
|
+
provider: "google",
|
|
455
|
+
contextWindow: 2097152,
|
|
456
|
+
maxOutputTokens: 8192,
|
|
457
|
+
supportsVision: true,
|
|
458
|
+
supportsToolUse: true,
|
|
459
|
+
},
|
|
460
|
+
// Gemini 1.5 Flash (deprecated)
|
|
461
|
+
"gemini-1.5-flash": {
|
|
462
|
+
name: "Gemini 1.5 Flash",
|
|
463
|
+
provider: "google",
|
|
464
|
+
contextWindow: 1048576,
|
|
465
|
+
maxOutputTokens: 8192,
|
|
466
|
+
supportsVision: true,
|
|
467
|
+
supportsToolUse: true,
|
|
468
|
+
},
|
|
469
|
+
"gemini-1.5-flash-latest": {
|
|
470
|
+
name: "Gemini 1.5 Flash",
|
|
471
|
+
provider: "google",
|
|
472
|
+
contextWindow: 1048576,
|
|
473
|
+
maxOutputTokens: 8192,
|
|
474
|
+
supportsVision: true,
|
|
475
|
+
supportsToolUse: true,
|
|
476
|
+
},
|
|
477
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
478
|
+
// Mistral AI Models
|
|
479
|
+
// https://mistral.ai/models
|
|
480
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
481
|
+
// Mistral Large 3 (December 2025)
|
|
482
|
+
"mistral-large-3": {
|
|
483
|
+
name: "Mistral Large 3",
|
|
484
|
+
provider: "mistral",
|
|
485
|
+
contextWindow: 256000,
|
|
486
|
+
maxOutputTokens: 8192,
|
|
487
|
+
supportsVision: true,
|
|
488
|
+
supportsToolUse: true,
|
|
489
|
+
},
|
|
490
|
+
"mistral-large-latest": {
|
|
491
|
+
name: "Mistral Large 3",
|
|
492
|
+
provider: "mistral",
|
|
493
|
+
contextWindow: 256000,
|
|
494
|
+
maxOutputTokens: 8192,
|
|
495
|
+
supportsVision: true,
|
|
496
|
+
supportsToolUse: true,
|
|
497
|
+
},
|
|
498
|
+
// Devstral 2 (December 2025)
|
|
499
|
+
"devstral-2": {
|
|
500
|
+
name: "Devstral 2",
|
|
501
|
+
provider: "mistral",
|
|
502
|
+
contextWindow: 256000,
|
|
503
|
+
maxOutputTokens: 8192,
|
|
504
|
+
supportsVision: false,
|
|
505
|
+
supportsToolUse: true,
|
|
506
|
+
},
|
|
507
|
+
"devstral-small-2": {
|
|
508
|
+
name: "Devstral Small 2",
|
|
509
|
+
provider: "mistral",
|
|
510
|
+
contextWindow: 256000,
|
|
511
|
+
maxOutputTokens: 8192,
|
|
512
|
+
supportsVision: false,
|
|
513
|
+
supportsToolUse: true,
|
|
514
|
+
},
|
|
515
|
+
// Mistral Small 3.1
|
|
516
|
+
"mistral-small-3.1": {
|
|
517
|
+
name: "Mistral Small 3.1",
|
|
518
|
+
provider: "mistral",
|
|
519
|
+
contextWindow: 128000,
|
|
520
|
+
maxOutputTokens: 8192,
|
|
521
|
+
supportsVision: true,
|
|
522
|
+
supportsToolUse: true,
|
|
523
|
+
},
|
|
524
|
+
"mistral-small-latest": {
|
|
525
|
+
name: "Mistral Small 3.1",
|
|
526
|
+
provider: "mistral",
|
|
527
|
+
contextWindow: 128000,
|
|
528
|
+
maxOutputTokens: 8192,
|
|
529
|
+
supportsVision: true,
|
|
530
|
+
supportsToolUse: true,
|
|
531
|
+
},
|
|
532
|
+
// Ministral 3 Family
|
|
533
|
+
"ministral-3-3b": {
|
|
534
|
+
name: "Ministral 3 3B",
|
|
535
|
+
provider: "mistral",
|
|
536
|
+
contextWindow: 128000,
|
|
537
|
+
maxOutputTokens: 4096,
|
|
538
|
+
supportsVision: false,
|
|
539
|
+
supportsToolUse: true,
|
|
540
|
+
},
|
|
541
|
+
"ministral-3-8b": {
|
|
542
|
+
name: "Ministral 3 8B",
|
|
543
|
+
provider: "mistral",
|
|
544
|
+
contextWindow: 128000,
|
|
545
|
+
maxOutputTokens: 4096,
|
|
546
|
+
supportsVision: false,
|
|
547
|
+
supportsToolUse: true,
|
|
548
|
+
},
|
|
549
|
+
"ministral-3-14b": {
|
|
550
|
+
name: "Ministral 3 14B",
|
|
551
|
+
provider: "mistral",
|
|
552
|
+
contextWindow: 256000,
|
|
553
|
+
maxOutputTokens: 4096,
|
|
554
|
+
supportsVision: false,
|
|
555
|
+
supportsToolUse: true,
|
|
556
|
+
},
|
|
557
|
+
// Codestral
|
|
558
|
+
codestral: {
|
|
559
|
+
name: "Codestral",
|
|
560
|
+
provider: "mistral",
|
|
561
|
+
contextWindow: 256000,
|
|
562
|
+
maxOutputTokens: 8192,
|
|
563
|
+
supportsVision: false,
|
|
564
|
+
supportsToolUse: true,
|
|
565
|
+
},
|
|
566
|
+
"codestral-latest": {
|
|
567
|
+
name: "Codestral",
|
|
568
|
+
provider: "mistral",
|
|
569
|
+
contextWindow: 256000,
|
|
570
|
+
maxOutputTokens: 8192,
|
|
571
|
+
supportsVision: false,
|
|
572
|
+
supportsToolUse: true,
|
|
573
|
+
},
|
|
574
|
+
// Legacy models
|
|
575
|
+
"mistral-large-2": {
|
|
576
|
+
name: "Mistral Large 2",
|
|
577
|
+
provider: "mistral",
|
|
578
|
+
contextWindow: 128000,
|
|
579
|
+
maxOutputTokens: 4096,
|
|
580
|
+
supportsVision: false,
|
|
581
|
+
supportsToolUse: true,
|
|
582
|
+
},
|
|
583
|
+
"mistral-medium": {
|
|
584
|
+
name: "Mistral Medium",
|
|
585
|
+
provider: "mistral",
|
|
586
|
+
contextWindow: 32768,
|
|
587
|
+
maxOutputTokens: 4096,
|
|
588
|
+
supportsVision: false,
|
|
589
|
+
supportsToolUse: true,
|
|
590
|
+
},
|
|
591
|
+
"mistral-nemo": {
|
|
592
|
+
name: "Mistral NeMo",
|
|
593
|
+
provider: "mistral",
|
|
594
|
+
contextWindow: 128000,
|
|
595
|
+
maxOutputTokens: 4096,
|
|
596
|
+
supportsVision: false,
|
|
597
|
+
supportsToolUse: true,
|
|
598
|
+
},
|
|
599
|
+
"mixtral-8x7b": {
|
|
600
|
+
name: "Mixtral 8x7B",
|
|
601
|
+
provider: "mistral",
|
|
602
|
+
contextWindow: 32768,
|
|
603
|
+
maxOutputTokens: 4096,
|
|
604
|
+
supportsVision: false,
|
|
605
|
+
supportsToolUse: true,
|
|
606
|
+
},
|
|
607
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
608
|
+
// Meta Llama Models
|
|
609
|
+
// https://www.llama.com/models/llama-4/
|
|
610
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
611
|
+
// Llama 4 (2026)
|
|
612
|
+
"llama-4-scout": {
|
|
613
|
+
name: "Llama 4 Scout",
|
|
614
|
+
provider: "meta",
|
|
615
|
+
contextWindow: 10000000, // 10M tokens!
|
|
616
|
+
maxOutputTokens: 8192,
|
|
617
|
+
supportsVision: true,
|
|
618
|
+
supportsToolUse: true,
|
|
619
|
+
},
|
|
620
|
+
"llama-4-scout-17b-16e": {
|
|
621
|
+
name: "Llama 4 Scout 17B",
|
|
622
|
+
provider: "meta",
|
|
623
|
+
contextWindow: 10000000,
|
|
624
|
+
maxOutputTokens: 8192,
|
|
625
|
+
supportsVision: true,
|
|
626
|
+
supportsToolUse: true,
|
|
627
|
+
},
|
|
628
|
+
"llama-4-maverick": {
|
|
629
|
+
name: "Llama 4 Maverick",
|
|
630
|
+
provider: "meta",
|
|
631
|
+
contextWindow: 512000,
|
|
632
|
+
maxOutputTokens: 8192,
|
|
633
|
+
supportsVision: true,
|
|
634
|
+
supportsToolUse: true,
|
|
635
|
+
},
|
|
636
|
+
"llama-4-maverick-17b-128e": {
|
|
637
|
+
name: "Llama 4 Maverick",
|
|
638
|
+
provider: "meta",
|
|
639
|
+
contextWindow: 512000,
|
|
640
|
+
maxOutputTokens: 8192,
|
|
641
|
+
supportsVision: true,
|
|
642
|
+
supportsToolUse: true,
|
|
643
|
+
},
|
|
644
|
+
// Llama 3.1 (legacy)
|
|
645
|
+
"llama-3.1-405b": {
|
|
646
|
+
name: "Llama 3.1 405B",
|
|
647
|
+
provider: "meta",
|
|
648
|
+
contextWindow: 128000,
|
|
649
|
+
maxOutputTokens: 4096,
|
|
650
|
+
supportsVision: false,
|
|
651
|
+
supportsToolUse: true,
|
|
652
|
+
},
|
|
653
|
+
"llama-3.1-70b": {
|
|
654
|
+
name: "Llama 3.1 70B",
|
|
655
|
+
provider: "meta",
|
|
656
|
+
contextWindow: 128000,
|
|
657
|
+
maxOutputTokens: 4096,
|
|
658
|
+
supportsVision: false,
|
|
659
|
+
supportsToolUse: true,
|
|
660
|
+
},
|
|
661
|
+
"llama-3.1-8b": {
|
|
662
|
+
name: "Llama 3.1 8B",
|
|
663
|
+
provider: "meta",
|
|
664
|
+
contextWindow: 128000,
|
|
665
|
+
maxOutputTokens: 4096,
|
|
666
|
+
supportsVision: false,
|
|
667
|
+
supportsToolUse: true,
|
|
668
|
+
},
|
|
669
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
670
|
+
// DeepSeek Models
|
|
671
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
672
|
+
"deepseek-chat": {
|
|
673
|
+
name: "DeepSeek Chat",
|
|
674
|
+
provider: "deepseek",
|
|
675
|
+
contextWindow: 64000,
|
|
676
|
+
maxOutputTokens: 8192,
|
|
677
|
+
supportsVision: false,
|
|
678
|
+
supportsToolUse: true,
|
|
679
|
+
},
|
|
680
|
+
"deepseek-coder": {
|
|
681
|
+
name: "DeepSeek Coder",
|
|
682
|
+
provider: "deepseek",
|
|
683
|
+
contextWindow: 64000,
|
|
684
|
+
maxOutputTokens: 8192,
|
|
685
|
+
supportsVision: false,
|
|
686
|
+
supportsToolUse: true,
|
|
687
|
+
},
|
|
688
|
+
"deepseek-reasoner": {
|
|
689
|
+
name: "DeepSeek Reasoner",
|
|
690
|
+
provider: "deepseek",
|
|
691
|
+
contextWindow: 64000,
|
|
692
|
+
maxOutputTokens: 8192,
|
|
693
|
+
supportsVision: false,
|
|
694
|
+
supportsToolUse: true,
|
|
695
|
+
isReasoningModel: true,
|
|
696
|
+
},
|
|
697
|
+
};
|
|
698
|
+
/**
|
|
699
|
+
* Get model info by ID.
|
|
700
|
+
* Checks runtime registry first, then static catalog.
|
|
701
|
+
* Uses case-insensitive and partial matching.
|
|
702
|
+
*
|
|
703
|
+
* @param modelId - The model ID to look up
|
|
704
|
+
* @returns Model info or undefined if not found
|
|
705
|
+
*/
|
|
706
|
+
export function getModelInfo(modelId) {
|
|
707
|
+
const lowerModelId = modelId.toLowerCase();
|
|
708
|
+
// Check runtime registry first (exact match)
|
|
709
|
+
if (runtimeRegistry.has(lowerModelId)) {
|
|
710
|
+
return runtimeRegistry.get(lowerModelId);
|
|
711
|
+
}
|
|
712
|
+
// Check runtime registry (partial match)
|
|
713
|
+
for (const [key, value] of runtimeRegistry) {
|
|
714
|
+
if (lowerModelId.startsWith(key) || key.startsWith(lowerModelId)) {
|
|
715
|
+
return value;
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
// Try exact match in static catalog
|
|
719
|
+
if (MODEL_CATALOG[modelId]) {
|
|
720
|
+
return MODEL_CATALOG[modelId];
|
|
721
|
+
}
|
|
722
|
+
// Try lowercase match in static catalog
|
|
723
|
+
for (const [key, value] of Object.entries(MODEL_CATALOG)) {
|
|
724
|
+
if (key.toLowerCase() === lowerModelId) {
|
|
725
|
+
return value;
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
// Try partial match in static catalog (for versioned model names)
|
|
729
|
+
for (const [key, value] of Object.entries(MODEL_CATALOG)) {
|
|
730
|
+
if (lowerModelId.startsWith(key.toLowerCase()) || key.toLowerCase().startsWith(lowerModelId)) {
|
|
731
|
+
return value;
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
return undefined;
|
|
735
|
+
}
|
|
736
|
+
/**
|
|
737
|
+
* Get the context window size for a model.
|
|
738
|
+
*
|
|
739
|
+
* @param modelId - The model ID
|
|
740
|
+
* @returns Context window in tokens, or undefined if unknown
|
|
741
|
+
*/
|
|
742
|
+
export function getContextWindow(modelId) {
|
|
743
|
+
return getModelInfo(modelId)?.contextWindow;
|
|
744
|
+
}
|
|
745
|
+
/**
|
|
746
|
+
* Calculate context utilization percentage.
|
|
747
|
+
*
|
|
748
|
+
* @param modelId - The model ID
|
|
749
|
+
* @param usedTokens - Number of tokens used
|
|
750
|
+
* @returns Utilization percentage (0-100), or undefined if model not found
|
|
751
|
+
*/
|
|
752
|
+
export function getContextUtilization(modelId, usedTokens) {
|
|
753
|
+
const contextWindow = getContextWindow(modelId);
|
|
754
|
+
if (!contextWindow)
|
|
755
|
+
return undefined;
|
|
756
|
+
return Math.min(100, (usedTokens / contextWindow) * 100);
|
|
757
|
+
}
|
|
758
|
+
/**
|
|
759
|
+
* Format context window for display.
|
|
760
|
+
*
|
|
761
|
+
* @param tokens - Number of tokens
|
|
762
|
+
* @returns Formatted string like "128K" or "1M" or "10M"
|
|
763
|
+
*/
|
|
764
|
+
export function formatContextWindow(tokens) {
|
|
765
|
+
if (tokens >= 1000000) {
|
|
766
|
+
const millions = tokens / 1000000;
|
|
767
|
+
return millions % 1 === 0 ? `${millions}M` : `${millions.toFixed(1)}M`;
|
|
768
|
+
}
|
|
769
|
+
if (tokens >= 1000) {
|
|
770
|
+
const thousands = tokens / 1000;
|
|
771
|
+
return thousands % 1 === 0 ? `${thousands}K` : `${thousands.toFixed(1)}K`;
|
|
772
|
+
}
|
|
773
|
+
return tokens.toString();
|
|
774
|
+
}
|
|
775
|
+
/**
|
|
776
|
+
* Create ModelInfo from partial data with sensible defaults.
|
|
777
|
+
* Useful for adapters that want to register models.
|
|
778
|
+
*/
|
|
779
|
+
export function createModelInfo(partial) {
|
|
780
|
+
return {
|
|
781
|
+
contextWindow: 128000, // sensible default
|
|
782
|
+
maxOutputTokens: 4096,
|
|
783
|
+
supportsVision: false,
|
|
784
|
+
supportsToolUse: true,
|
|
785
|
+
...partial,
|
|
786
|
+
};
|
|
787
|
+
}
|
|
788
|
+
/**
|
|
789
|
+
* Get effective model info by merging adapter metadata with catalog.
|
|
790
|
+
*
|
|
791
|
+
* Priority:
|
|
792
|
+
* 1. Adapter-provided values (source of truth)
|
|
793
|
+
* 2. Runtime registry
|
|
794
|
+
* 3. Static MODEL_CATALOG
|
|
795
|
+
*
|
|
796
|
+
* @param adapterMetadata - Metadata from the adapter (if available)
|
|
797
|
+
* @param modelId - Model ID to look up in catalog (fallback)
|
|
798
|
+
* @returns Merged model info, or undefined if nothing found
|
|
799
|
+
*/
|
|
800
|
+
export function getEffectiveModelInfo(adapterMetadata, modelId) {
|
|
801
|
+
// Determine which model ID to use for catalog lookup
|
|
802
|
+
const lookupId = modelId || adapterMetadata?.model || adapterMetadata?.id;
|
|
803
|
+
// Get catalog info as base
|
|
804
|
+
const catalogInfo = lookupId ? getModelInfo(lookupId) : undefined;
|
|
805
|
+
// If no adapter metadata, return catalog info
|
|
806
|
+
if (!adapterMetadata) {
|
|
807
|
+
return catalogInfo;
|
|
808
|
+
}
|
|
809
|
+
// If no catalog info and adapter has context window, create from adapter
|
|
810
|
+
if (!catalogInfo && adapterMetadata.contextWindow) {
|
|
811
|
+
return {
|
|
812
|
+
name: adapterMetadata.model || adapterMetadata.id || "Unknown",
|
|
813
|
+
provider: adapterMetadata.provider || "unknown",
|
|
814
|
+
contextWindow: adapterMetadata.contextWindow,
|
|
815
|
+
maxOutputTokens: adapterMetadata.maxOutputTokens,
|
|
816
|
+
supportsVision: adapterMetadata.supportsVision,
|
|
817
|
+
supportsToolUse: adapterMetadata.supportsToolUse,
|
|
818
|
+
isReasoningModel: adapterMetadata.isReasoningModel,
|
|
819
|
+
};
|
|
820
|
+
}
|
|
821
|
+
// Merge: adapter values override catalog values
|
|
822
|
+
if (catalogInfo) {
|
|
823
|
+
return {
|
|
824
|
+
...catalogInfo,
|
|
825
|
+
// Adapter overrides
|
|
826
|
+
...(adapterMetadata.contextWindow !== undefined && {
|
|
827
|
+
contextWindow: adapterMetadata.contextWindow,
|
|
828
|
+
}),
|
|
829
|
+
...(adapterMetadata.maxOutputTokens !== undefined && {
|
|
830
|
+
maxOutputTokens: adapterMetadata.maxOutputTokens,
|
|
831
|
+
}),
|
|
832
|
+
...(adapterMetadata.supportsVision !== undefined && {
|
|
833
|
+
supportsVision: adapterMetadata.supportsVision,
|
|
834
|
+
}),
|
|
835
|
+
...(adapterMetadata.supportsToolUse !== undefined && {
|
|
836
|
+
supportsToolUse: adapterMetadata.supportsToolUse,
|
|
837
|
+
}),
|
|
838
|
+
...(adapterMetadata.isReasoningModel !== undefined && {
|
|
839
|
+
isReasoningModel: adapterMetadata.isReasoningModel,
|
|
840
|
+
}),
|
|
841
|
+
};
|
|
842
|
+
}
|
|
843
|
+
return undefined;
|
|
844
|
+
}
|
|
845
|
+
/**
|
|
846
|
+
* Get effective context window, prioritizing adapter metadata.
|
|
847
|
+
*
|
|
848
|
+
* @param adapterMetadata - Metadata from the adapter
|
|
849
|
+
* @param modelId - Model ID for catalog lookup
|
|
850
|
+
* @returns Context window size, or undefined if unknown
|
|
851
|
+
*/
|
|
852
|
+
export function getEffectiveContextWindow(adapterMetadata, modelId) {
|
|
853
|
+
// Adapter is source of truth
|
|
854
|
+
if (adapterMetadata?.contextWindow) {
|
|
855
|
+
return adapterMetadata.contextWindow;
|
|
856
|
+
}
|
|
857
|
+
// Fall back to catalog
|
|
858
|
+
const lookupId = modelId || adapterMetadata?.model || adapterMetadata?.id;
|
|
859
|
+
return lookupId ? getContextWindow(lookupId) : undefined;
|
|
860
|
+
}
|
|
861
|
+
//# sourceMappingURL=model-catalog.js.map
|