aimodels 0.3.5 → 0.3.6

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/index.mjs CHANGED
@@ -46,7 +46,10 @@ var ModelCollection = class _ModelCollection extends Array {
46
46
  withMinContext(tokens) {
47
47
  return this.filter((model) => {
48
48
  const context = model.context;
49
- if (!("total" in context) || context.total === null) {
49
+ if (context.type !== "token" && context.type !== "character") {
50
+ return false;
51
+ }
52
+ if (context.total === null) {
50
53
  return false;
51
54
  }
52
55
  return context.total >= tokens;
@@ -59,61 +62,74 @@ var openai_models_default = {
59
62
  creator: "openai",
60
63
  models: [
61
64
  {
62
- id: "whisper-large-v3",
63
- name: "Whisper Large v3",
64
- license: "mit",
65
+ id: "gpt-4",
66
+ name: "GPT-4",
67
+ license: "proprietary",
65
68
  providers: [
66
69
  "openai",
67
- "azure",
68
- "groq"
70
+ "azure"
69
71
  ],
70
72
  can: [
71
- "sound-in",
72
- "text-out"
73
+ "chat",
74
+ "text-in",
75
+ "text-out",
76
+ "json-out",
77
+ "function-out"
73
78
  ],
74
79
  context: {
75
- total: null,
76
- maxOutput: null
80
+ type: "token",
81
+ total: 8192,
82
+ maxOutput: 4096
77
83
  }
78
84
  },
79
85
  {
80
- id: "whisper-large-v3-turbo",
81
- name: "Whisper Large v3 Turbo",
82
- license: "mit",
83
- providers: [
84
- "openai",
85
- "azure",
86
- "groq"
87
- ],
88
- can: [
89
- "sound-in",
90
- "text-out"
91
- ],
92
- context: {
93
- total: null,
94
- maxOutput: null
86
+ id: "gpt-4-turbo-preview",
87
+ extends: "gpt-4",
88
+ overrides: {
89
+ name: "GPT-4 Turbo",
90
+ context: {
91
+ type: "token",
92
+ total: 128e3,
93
+ maxOutput: 4096
94
+ }
95
95
  }
96
96
  },
97
97
  {
98
- id: "tts-1",
99
- name: "TTS-1",
98
+ id: "gpt-3.5-turbo",
99
+ name: "GPT-3.5 Turbo",
100
100
  license: "proprietary",
101
101
  providers: [
102
102
  "openai",
103
103
  "azure"
104
104
  ],
105
105
  can: [
106
+ "chat",
106
107
  "text-in",
107
- "sound-out"
108
+ "text-out",
109
+ "json-out",
110
+ "function-out"
108
111
  ],
109
112
  context: {
110
- total: null,
111
- maxOutput: null
113
+ type: "token",
114
+ total: 16385,
115
+ maxOutput: 4096
112
116
  }
113
117
  },
114
118
  {
115
- id: "tts-1-hd",
116
- name: "TTS-1 HD",
119
+ id: "gpt-3.5-turbo-16k",
120
+ extends: "gpt-3.5-turbo",
121
+ overrides: {
122
+ name: "GPT-3.5 Turbo 16K",
123
+ context: {
124
+ type: "token",
125
+ total: 16385,
126
+ maxOutput: 4096
127
+ }
128
+ }
129
+ },
130
+ {
131
+ id: "gpt-3.5-turbo-instruct",
132
+ name: "GPT-3.5 Turbo Instruct",
117
133
  license: "proprietary",
118
134
  providers: [
119
135
  "openai",
@@ -121,11 +137,12 @@ var openai_models_default = {
121
137
  ],
122
138
  can: [
123
139
  "text-in",
124
- "sound-out"
140
+ "text-out"
125
141
  ],
126
142
  context: {
127
- total: null,
128
- maxOutput: null
143
+ type: "token",
144
+ total: 4096,
145
+ maxOutput: 4096
129
146
  }
130
147
  },
131
148
  {
@@ -138,32 +155,184 @@ var openai_models_default = {
138
155
  ],
139
156
  can: [
140
157
  "chat",
158
+ "text-in",
159
+ "text-out",
141
160
  "img-in",
142
161
  "json-out",
143
162
  "function-out"
144
163
  ],
145
164
  context: {
165
+ type: "token",
146
166
  total: 128e3,
147
167
  maxOutput: 16384
148
168
  }
149
169
  },
170
+ {
171
+ id: "chatgpt-4o-latest",
172
+ extends: "gpt-4o",
173
+ overrides: {
174
+ name: "GPT-4o used in ChatGPT"
175
+ }
176
+ },
177
+ {
178
+ id: "gpt-4o-2024-11-20",
179
+ extends: "gpt-4o",
180
+ overrides: {
181
+ name: "GPT-4o (2024-11-20)"
182
+ }
183
+ },
184
+ {
185
+ id: "gpt-4o-2024-08-06",
186
+ extends: "gpt-4o",
187
+ overrides: {
188
+ name: "GPT-4o (2024-08-06)"
189
+ }
190
+ },
191
+ {
192
+ id: "gpt-4o-2024-05-13",
193
+ extends: "gpt-4o",
194
+ overrides: {
195
+ name: "GPT-4o (2024-05-13)",
196
+ context: {
197
+ type: "token",
198
+ total: 128e3,
199
+ maxOutput: 4096
200
+ }
201
+ }
202
+ },
150
203
  {
151
204
  id: "gpt-4o-mini",
152
- name: "GPT-4O Mini",
153
- license: "proprietary",
154
- providers: [
155
- "openai",
156
- "azure"
157
- ],
158
- can: [
159
- "chat",
160
- "img-in",
161
- "json-out",
162
- "function-out"
163
- ],
164
- context: {
165
- total: 128e3,
166
- maxOutput: 16384
205
+ extends: "gpt-4o",
206
+ overrides: {
207
+ name: "GPT-4o Mini",
208
+ context: {
209
+ type: "token",
210
+ total: 128e3,
211
+ maxOutput: 16384
212
+ }
213
+ }
214
+ },
215
+ {
216
+ id: "gpt-4o-audio-preview",
217
+ extends: "gpt-4o",
218
+ overrides: {
219
+ name: "GPT-4o Audio",
220
+ can: [
221
+ "chat",
222
+ "text-in",
223
+ "text-out",
224
+ "sound-in",
225
+ "json-out",
226
+ "function-out"
227
+ ],
228
+ context: {
229
+ type: "token",
230
+ total: 128e3,
231
+ maxOutput: 16384
232
+ }
233
+ }
234
+ },
235
+ {
236
+ id: "gpt-4o-audio-preview-2024-12-17",
237
+ extends: "gpt-4o-audio-preview",
238
+ overrides: {
239
+ name: "GPT-4o Audio (2024-12-17)"
240
+ }
241
+ },
242
+ {
243
+ id: "gpt-4o-audio-preview-2024-10-01",
244
+ extends: "gpt-4o-audio-preview",
245
+ overrides: {
246
+ name: "GPT-4o Audio (2024-10-01)"
247
+ }
248
+ },
249
+ {
250
+ id: "gpt-4o-mini-audio-preview",
251
+ extends: "gpt-4o-mini",
252
+ overrides: {
253
+ name: "GPT-4o Mini Audio",
254
+ can: [
255
+ "chat",
256
+ "text-in",
257
+ "text-out",
258
+ "sound-in",
259
+ "sound-out",
260
+ "json-out",
261
+ "function-out"
262
+ ],
263
+ context: {
264
+ type: "token",
265
+ total: 128e3,
266
+ maxOutput: 16384
267
+ }
268
+ }
269
+ },
270
+ {
271
+ id: "gpt-4o-mini-audio-preview-2024-12-17",
272
+ extends: "gpt-4o-mini-audio-preview",
273
+ overrides: {
274
+ name: "GPT-4o Mini Audio (2024-12-17)"
275
+ }
276
+ },
277
+ {
278
+ id: "gpt-4o-realtime-preview",
279
+ extends: "gpt-4o",
280
+ overrides: {
281
+ name: "GPT-4o Realtime",
282
+ can: [
283
+ "chat",
284
+ "text-in",
285
+ "text-out",
286
+ "sound-in",
287
+ "json-out",
288
+ "function-out"
289
+ ],
290
+ context: {
291
+ type: "token",
292
+ total: 128e3,
293
+ maxOutput: 4096
294
+ }
295
+ }
296
+ },
297
+ {
298
+ id: "gpt-4o-realtime-preview-2024-12-17",
299
+ extends: "gpt-4o-realtime-preview",
300
+ overrides: {
301
+ name: "GPT-4o Realtime (2024-12-17)"
302
+ }
303
+ },
304
+ {
305
+ id: "gpt-4o-realtime-preview-2024-10-01",
306
+ extends: "gpt-4o-realtime-preview",
307
+ overrides: {
308
+ name: "GPT-4o Realtime (2024-10-01)"
309
+ }
310
+ },
311
+ {
312
+ id: "gpt-4o-mini-realtime-preview",
313
+ extends: "gpt-4o-mini",
314
+ overrides: {
315
+ name: "GPT-4o Mini Realtime",
316
+ can: [
317
+ "chat",
318
+ "text-in",
319
+ "text-out",
320
+ "sound-in",
321
+ "json-out",
322
+ "function-out"
323
+ ],
324
+ context: {
325
+ type: "token",
326
+ total: 128e3,
327
+ maxOutput: 4096
328
+ }
329
+ }
330
+ },
331
+ {
332
+ id: "gpt-4o-mini-realtime-preview-2024-12-17",
333
+ extends: "gpt-4o-mini-realtime-preview",
334
+ overrides: {
335
+ name: "GPT-4o Mini Realtime (2024-12-17)"
167
336
  }
168
337
  },
169
338
  {
@@ -176,19 +345,75 @@ var openai_models_default = {
176
345
  ],
177
346
  can: [
178
347
  "chat",
348
+ "text-in",
349
+ "text-out",
179
350
  "img-in",
180
351
  "json-out",
181
352
  "function-out",
182
353
  "reason"
183
354
  ],
184
355
  context: {
356
+ type: "token",
185
357
  total: 2e5,
186
358
  maxOutput: 1e5
187
359
  }
188
360
  },
361
+ {
362
+ id: "o1-2024-12-17",
363
+ extends: "o1",
364
+ overrides: {
365
+ name: "OpenAI O1 (2024-12-17)"
366
+ }
367
+ },
189
368
  {
190
369
  id: "o1-mini",
191
- name: "OpenAI O1 Mini",
370
+ extends: "o1",
371
+ overrides: {
372
+ name: "OpenAI O1 Mini",
373
+ can: [
374
+ "chat",
375
+ "text-in",
376
+ "text-out",
377
+ "json-out",
378
+ "function-out",
379
+ "reason"
380
+ ],
381
+ context: {
382
+ type: "token",
383
+ total: 128e3,
384
+ maxOutput: 65536
385
+ }
386
+ }
387
+ },
388
+ {
389
+ id: "o1-mini-2024-09-12",
390
+ extends: "o1-mini",
391
+ overrides: {
392
+ name: "OpenAI O1 Mini (2024-09-12)"
393
+ }
394
+ },
395
+ {
396
+ id: "o1-preview",
397
+ extends: "o1",
398
+ overrides: {
399
+ name: "OpenAI O1 Preview",
400
+ context: {
401
+ type: "token",
402
+ total: 128e3,
403
+ maxOutput: 32768
404
+ }
405
+ }
406
+ },
407
+ {
408
+ id: "o1-preview-2024-09-12",
409
+ extends: "o1-preview",
410
+ overrides: {
411
+ name: "OpenAI O1 Preview (2024-09-12)"
412
+ }
413
+ },
414
+ {
415
+ id: "o3-mini",
416
+ name: "OpenAI O3 Mini",
192
417
  license: "proprietary",
193
418
  providers: [
194
419
  "openai",
@@ -196,70 +421,89 @@ var openai_models_default = {
196
421
  ],
197
422
  can: [
198
423
  "chat",
424
+ "text-in",
425
+ "text-out",
199
426
  "json-out",
200
427
  "function-out",
201
428
  "reason"
202
429
  ],
203
430
  context: {
204
- total: 128e3,
205
- maxOutput: 65536
431
+ type: "token",
432
+ total: 2e5,
433
+ maxOutput: 1e5
206
434
  }
207
435
  },
208
436
  {
209
- id: "o3-mini",
210
- name: "OpenAI O3 Mini",
437
+ id: "o3-mini-2025-01-31",
438
+ extends: "o3-mini",
439
+ overrides: {
440
+ name: "OpenAI O3 Mini (2025-01-31)"
441
+ }
442
+ },
443
+ {
444
+ id: "whisper-1",
445
+ name: "Whisper",
211
446
  license: "proprietary",
212
447
  providers: [
213
448
  "openai",
214
449
  "azure"
215
450
  ],
216
451
  can: [
217
- "chat",
218
- "json-out",
219
- "function-out",
220
- "reason"
452
+ "sound-in",
453
+ "text-out"
221
454
  ],
222
455
  context: {
223
- total: 2e5,
224
- maxOutput: 1e5
456
+ type: "audio-in",
457
+ total: null,
458
+ maxOutput: null
225
459
  }
226
460
  },
227
461
  {
228
- id: "gpt-4o-audio-preview",
229
- name: "GPT-4O Audio",
462
+ id: "tts-1",
463
+ name: "TTS-1",
230
464
  license: "proprietary",
231
465
  providers: [
232
466
  "openai",
233
467
  "azure"
234
468
  ],
235
469
  can: [
236
- "chat",
237
- "sound-in",
238
- "json-out",
239
- "function-out"
470
+ "text-in",
471
+ "sound-out"
240
472
  ],
241
473
  context: {
242
- total: 128e3,
243
- maxOutput: 16384
474
+ type: "audio-out",
475
+ total: null,
476
+ maxOutput: null
244
477
  }
245
478
  },
246
479
  {
247
- id: "gpt-4o-realtime-preview",
248
- name: "GPT-4O Realtime",
480
+ id: "tts-1-hd",
481
+ extends: "tts-1",
482
+ overrides: {
483
+ name: "TTS-1 HD"
484
+ }
485
+ },
486
+ {
487
+ id: "dall-e-2",
488
+ name: "DALL-E 2",
249
489
  license: "proprietary",
250
490
  providers: [
251
491
  "openai",
252
492
  "azure"
253
493
  ],
254
494
  can: [
255
- "chat",
256
- "sound-in",
257
- "json-out",
258
- "function-out"
495
+ "img-out"
259
496
  ],
260
497
  context: {
261
- total: 128e3,
262
- maxOutput: 4096
498
+ maxOutput: 1,
499
+ sizes: [
500
+ "256x256",
501
+ "512x512",
502
+ "1024x1024"
503
+ ],
504
+ qualities: [
505
+ "standard"
506
+ ]
263
507
  }
264
508
  },
265
509
  {
@@ -271,6 +515,7 @@ var openai_models_default = {
271
515
  "azure"
272
516
  ],
273
517
  can: [
518
+ "text-in",
274
519
  "img-out"
275
520
  ],
276
521
  context: {
@@ -285,6 +530,69 @@ var openai_models_default = {
285
530
  "hd"
286
531
  ]
287
532
  }
533
+ },
534
+ {
535
+ id: "text-embedding-ada-002",
536
+ name: "Text Embedding Ada 002",
537
+ license: "proprietary",
538
+ providers: [
539
+ "openai",
540
+ "azure"
541
+ ],
542
+ can: [
543
+ "text-in",
544
+ "vectors-out"
545
+ ],
546
+ context: {
547
+ type: "embedding",
548
+ total: 8191,
549
+ unit: "tokens",
550
+ dimensions: 1536,
551
+ embeddingType: "text",
552
+ normalized: true
553
+ }
554
+ },
555
+ {
556
+ id: "text-embedding-3-small",
557
+ name: "Text Embedding 3 Small",
558
+ license: "proprietary",
559
+ providers: [
560
+ "openai",
561
+ "azure"
562
+ ],
563
+ can: [
564
+ "text-in",
565
+ "vectors-out"
566
+ ],
567
+ context: {
568
+ type: "embedding",
569
+ total: 8191,
570
+ unit: "tokens",
571
+ dimensions: 1536,
572
+ embeddingType: "text",
573
+ normalized: true
574
+ }
575
+ },
576
+ {
577
+ id: "text-embedding-3-large",
578
+ name: "Text Embedding 3 Large",
579
+ license: "proprietary",
580
+ providers: [
581
+ "openai",
582
+ "azure"
583
+ ],
584
+ can: [
585
+ "text-in",
586
+ "vectors-out"
587
+ ],
588
+ context: {
589
+ type: "embedding",
590
+ total: 8191,
591
+ unit: "tokens",
592
+ dimensions: 3072,
593
+ embeddingType: "text",
594
+ normalized: true
595
+ }
288
596
  }
289
597
  ]
290
598
  };
@@ -294,14 +602,10 @@ var anthropic_models_default = {
294
602
  creator: "anthropic",
295
603
  models: [
296
604
  {
297
- id: "claude-3-opus-20240229",
605
+ id: "claude-3-opus",
298
606
  name: "Claude 3 Opus",
299
607
  license: "proprietary",
300
- providers: [
301
- "anthropic",
302
- "aws",
303
- "google"
304
- ],
608
+ providers: ["anthropic", "aws", "google"],
305
609
  can: [
306
610
  "chat",
307
611
  "text-in",
@@ -311,6 +615,7 @@ var anthropic_models_default = {
311
615
  "function-out"
312
616
  ],
313
617
  context: {
618
+ type: "token",
314
619
  total: 2e5,
315
620
  maxOutput: 4096,
316
621
  outputIsFixed: 1
@@ -318,14 +623,17 @@ var anthropic_models_default = {
318
623
  aliases: ["claude-3-opus-latest"]
319
624
  },
320
625
  {
321
- id: "claude-3-5-sonnet-20241022",
626
+ id: "claude-3-opus-20240229",
627
+ extends: "claude-3-opus",
628
+ overrides: {
629
+ name: "Claude 3 Opus (2024-02-29)"
630
+ }
631
+ },
632
+ {
633
+ id: "claude-3-sonnet",
322
634
  name: "Claude 3 Sonnet",
323
635
  license: "proprietary",
324
- providers: [
325
- "anthropic",
326
- "aws",
327
- "google"
328
- ],
636
+ providers: ["anthropic", "aws", "google"],
329
637
  can: [
330
638
  "chat",
331
639
  "text-in",
@@ -335,21 +643,52 @@ var anthropic_models_default = {
335
643
  "function-out"
336
644
  ],
337
645
  context: {
646
+ type: "token",
338
647
  total: 2e5,
339
- maxOutput: 8192,
648
+ maxOutput: 4096,
340
649
  outputIsFixed: 1
341
650
  },
342
651
  aliases: ["claude-3-sonnet-latest"]
343
652
  },
344
653
  {
345
- id: "claude-3-5-haiku-20241022",
654
+ id: "claude-3-sonnet-20240229",
655
+ extends: "claude-3-sonnet",
656
+ overrides: {
657
+ name: "Claude 3 Sonnet (2024-02-29)"
658
+ }
659
+ },
660
+ {
661
+ id: "claude-3-haiku",
346
662
  name: "Claude 3 Haiku",
347
663
  license: "proprietary",
348
- providers: [
349
- "anthropic",
350
- "aws",
351
- "google"
664
+ providers: ["anthropic", "aws", "google"],
665
+ can: [
666
+ "chat",
667
+ "text-in",
668
+ "text-out",
669
+ "img-in",
670
+ "json-out",
671
+ "function-out"
352
672
  ],
673
+ context: {
674
+ type: "token",
675
+ total: 2e5,
676
+ maxOutput: 4096,
677
+ outputIsFixed: 1
678
+ }
679
+ },
680
+ {
681
+ id: "claude-3-haiku-20240307",
682
+ extends: "claude-3-haiku",
683
+ overrides: {
684
+ name: "Claude 3 Haiku (2024-03-07)"
685
+ }
686
+ },
687
+ {
688
+ id: "claude-3-5-sonnet",
689
+ name: "Claude 3.5 Sonnet",
690
+ license: "proprietary",
691
+ providers: ["anthropic", "aws", "google"],
353
692
  can: [
354
693
  "chat",
355
694
  "text-in",
@@ -359,9 +698,45 @@ var anthropic_models_default = {
359
698
  "function-out"
360
699
  ],
361
700
  context: {
701
+ type: "token",
362
702
  total: 2e5,
363
703
  maxOutput: 8192,
364
704
  outputIsFixed: 1
705
+ },
706
+ aliases: ["claude-3-5-sonnet-latest"]
707
+ },
708
+ {
709
+ id: "claude-3-5-sonnet-20241022",
710
+ extends: "claude-3-5-sonnet",
711
+ overrides: {
712
+ name: "Claude 3.5 Sonnet (2024-10-22)"
713
+ }
714
+ },
715
+ {
716
+ id: "claude-3-5-haiku",
717
+ name: "Claude 3.5 Haiku",
718
+ license: "proprietary",
719
+ providers: ["anthropic", "aws", "google"],
720
+ can: [
721
+ "chat",
722
+ "text-in",
723
+ "text-out",
724
+ "json-out",
725
+ "function-out"
726
+ ],
727
+ context: {
728
+ type: "token",
729
+ total: 2e5,
730
+ maxOutput: 8192,
731
+ outputIsFixed: 1
732
+ },
733
+ aliases: ["claude-3-5-haiku-latest"]
734
+ },
735
+ {
736
+ id: "claude-3-5-haiku-20241022",
737
+ extends: "claude-3-5-haiku",
738
+ overrides: {
739
+ name: "Claude 3.5 Haiku (2024-10-22)"
365
740
  }
366
741
  }
367
742
  ]
@@ -378,6 +753,7 @@ var meta_models_default = {
378
753
  providers: ["groq"],
379
754
  can: ["chat", "text-in", "text-out", "json-out", "function-out"],
380
755
  context: {
756
+ type: "token",
381
757
  total: 8192,
382
758
  maxOutput: 4096
383
759
  }
@@ -389,6 +765,7 @@ var meta_models_default = {
389
765
  providers: ["groq"],
390
766
  can: ["chat", "text-in", "text-out", "json-out", "function-out"],
391
767
  context: {
768
+ type: "token",
392
769
  total: 8192,
393
770
  maxOutput: 4096
394
771
  }
@@ -400,6 +777,7 @@ var meta_models_default = {
400
777
  providers: ["groq"],
401
778
  can: ["chat", "text-in", "text-out", "img-in"],
402
779
  context: {
780
+ type: "token",
403
781
  total: 4096,
404
782
  maxOutput: 4096
405
783
  }
@@ -411,6 +789,7 @@ var meta_models_default = {
411
789
  providers: ["groq"],
412
790
  can: ["chat", "text-in", "text-out", "img-in"],
413
791
  context: {
792
+ type: "token",
414
793
  total: 4096,
415
794
  maxOutput: 4096
416
795
  }
@@ -422,6 +801,7 @@ var meta_models_default = {
422
801
  providers: ["groq"],
423
802
  can: ["chat", "text-in", "text-out"],
424
803
  context: {
804
+ type: "token",
425
805
  total: 4096,
426
806
  maxOutput: 4096
427
807
  }
@@ -446,6 +826,7 @@ var mistral_models_default = {
446
826
  "function-out"
447
827
  ],
448
828
  context: {
829
+ type: "token",
449
830
  total: 32768,
450
831
  maxOutput: 4096
451
832
  }
@@ -463,6 +844,7 @@ var mistral_models_default = {
463
844
  "function-out"
464
845
  ],
465
846
  context: {
847
+ type: "token",
466
848
  total: 32768,
467
849
  maxOutput: 4096
468
850
  }
@@ -478,6 +860,7 @@ var mistral_models_default = {
478
860
  "text-out"
479
861
  ],
480
862
  context: {
863
+ type: "token",
481
864
  total: 32768,
482
865
  maxOutput: 4096
483
866
  }
@@ -493,6 +876,7 @@ var mistral_models_default = {
493
876
  "text-out"
494
877
  ],
495
878
  context: {
879
+ type: "token",
496
880
  total: 32768,
497
881
  maxOutput: 4096
498
882
  }
@@ -508,6 +892,7 @@ var mistral_models_default = {
508
892
  "text-out"
509
893
  ],
510
894
  context: {
895
+ type: "token",
511
896
  total: 32768,
512
897
  maxOutput: 4096
513
898
  }
@@ -526,6 +911,7 @@ var google_models_default = {
526
911
  providers: ["google"],
527
912
  can: ["chat", "text-in", "text-out", "json-out", "function-out", "img-in", "sound-in", "reason"],
528
913
  context: {
914
+ type: "token",
529
915
  total: 1048576,
530
916
  maxOutput: 8192
531
917
  },
@@ -538,6 +924,7 @@ var google_models_default = {
538
924
  providers: ["google"],
539
925
  can: ["chat", "text-in", "text-out", "json-out", "function-out", "img-in", "sound-in"],
540
926
  context: {
927
+ type: "token",
541
928
  total: 1048576,
542
929
  maxOutput: 8192
543
930
  },
@@ -550,6 +937,7 @@ var google_models_default = {
550
937
  providers: ["google"],
551
938
  can: ["chat", "text-in", "text-out", "json-out", "function-out", "img-in", "sound-in"],
552
939
  context: {
940
+ type: "token",
553
941
  total: 2097152,
554
942
  maxOutput: 8192
555
943
  }
@@ -561,6 +949,7 @@ var google_models_default = {
561
949
  providers: ["google"],
562
950
  can: ["chat", "text-in", "text-out", "json-out", "function-out", "img-in", "sound-in"],
563
951
  context: {
952
+ type: "token",
564
953
  total: 2097152,
565
954
  maxOutput: 8192
566
955
  }
@@ -572,6 +961,7 @@ var google_models_default = {
572
961
  providers: ["google"],
573
962
  can: ["chat", "text-in", "text-out", "json-out", "function-out", "img-in", "sound-in", "reason"],
574
963
  context: {
964
+ type: "token",
575
965
  total: 2097152,
576
966
  maxOutput: 8192
577
967
  },
@@ -584,6 +974,7 @@ var google_models_default = {
584
974
  providers: ["google"],
585
975
  can: ["text-in", "vectors-out"],
586
976
  context: {
977
+ type: "token",
587
978
  total: 2048,
588
979
  maxOutput: 768
589
980
  }
@@ -595,6 +986,7 @@ var google_models_default = {
595
986
  providers: ["google"],
596
987
  can: ["chat", "text-in", "text-out", "json-out", "function-out"],
597
988
  context: {
989
+ type: "token",
598
990
  total: 8192,
599
991
  maxOutput: 4096
600
992
  }
@@ -606,6 +998,7 @@ var google_models_default = {
606
998
  providers: ["google"],
607
999
  can: ["chat", "text-in", "text-out", "json-out", "function-out"],
608
1000
  context: {
1001
+ type: "token",
609
1002
  total: 8192,
610
1003
  maxOutput: 4096
611
1004
  }
@@ -630,6 +1023,7 @@ var deepseek_models_default = {
630
1023
  "function-out"
631
1024
  ],
632
1025
  context: {
1026
+ type: "token",
633
1027
  total: 131072,
634
1028
  maxOutput: 8192
635
1029
  }
@@ -648,6 +1042,7 @@ var deepseek_models_default = {
648
1042
  "reason"
649
1043
  ],
650
1044
  context: {
1045
+ type: "token",
651
1046
  total: 131072,
652
1047
  maxOutput: 8192
653
1048
  }
@@ -667,6 +1062,7 @@ var xai_models_default = {
667
1062
  providers: ["xai"],
668
1063
  can: ["chat", "text-in", "text-out", "img-in"],
669
1064
  context: {
1065
+ type: "token",
670
1066
  total: 32768,
671
1067
  maxOutput: 4096
672
1068
  },
@@ -680,6 +1076,7 @@ var xai_models_default = {
680
1076
  providers: ["xai"],
681
1077
  can: ["chat", "text-in", "text-out"],
682
1078
  context: {
1079
+ type: "token",
683
1080
  total: 131072,
684
1081
  maxOutput: 4096
685
1082
  },
@@ -693,6 +1090,7 @@ var xai_models_default = {
693
1090
  providers: ["xai"],
694
1091
  can: ["chat", "text-in", "text-out", "img-in"],
695
1092
  context: {
1093
+ type: "token",
696
1094
  total: 8192,
697
1095
  maxOutput: 4096
698
1096
  }
@@ -705,6 +1103,7 @@ var xai_models_default = {
705
1103
  providers: ["xai"],
706
1104
  can: ["chat", "text-in", "text-out"],
707
1105
  context: {
1106
+ type: "token",
708
1107
  total: 131072,
709
1108
  maxOutput: 4096
710
1109
  }
@@ -724,6 +1123,7 @@ var cohere_models_default = {
724
1123
  providers: ["cohere"],
725
1124
  can: ["chat", "text-in", "text-out", "reason", "function-out"],
726
1125
  context: {
1126
+ type: "token",
727
1127
  total: 128e3,
728
1128
  maxOutput: 4096
729
1129
  }
@@ -736,6 +1136,7 @@ var cohere_models_default = {
736
1136
  providers: ["cohere", "bedrock", "azure", "oracle"],
737
1137
  can: ["chat", "text-in", "text-out", "reason", "function-out"],
738
1138
  context: {
1139
+ type: "token",
739
1140
  total: 128e3,
740
1141
  maxOutput: 4096
741
1142
  },
@@ -749,6 +1150,7 @@ var cohere_models_default = {
749
1150
  providers: ["cohere", "bedrock", "azure", "oracle"],
750
1151
  can: ["chat", "text-in", "text-out", "reason", "function-out"],
751
1152
  context: {
1153
+ type: "token",
752
1154
  total: 128e3,
753
1155
  maxOutput: 4096
754
1156
  },
@@ -762,6 +1164,7 @@ var cohere_models_default = {
762
1164
  providers: ["cohere", "bedrock", "oracle"],
763
1165
  can: ["chat", "text-in", "text-out"],
764
1166
  context: {
1167
+ type: "token",
765
1168
  total: 4096,
766
1169
  maxOutput: 4096
767
1170
  }
@@ -774,6 +1177,7 @@ var cohere_models_default = {
774
1177
  providers: ["cohere", "bedrock", "oracle"],
775
1178
  can: ["chat", "text-in", "text-out"],
776
1179
  context: {
1180
+ type: "token",
777
1181
  total: 4096,
778
1182
  maxOutput: 4096
779
1183
  }
@@ -786,6 +1190,7 @@ var cohere_models_default = {
786
1190
  providers: ["cohere", "bedrock", "azure", "oracle"],
787
1191
  can: ["text-in", "img-in", "vectors-out"],
788
1192
  context: {
1193
+ type: "token",
789
1194
  total: 512,
790
1195
  maxOutput: 1024
791
1196
  }
@@ -798,6 +1203,7 @@ var cohere_models_default = {
798
1203
  providers: ["cohere", "oracle"],
799
1204
  can: ["text-in", "img-in", "vectors-out"],
800
1205
  context: {
1206
+ type: "token",
801
1207
  total: 512,
802
1208
  maxOutput: 384
803
1209
  }
@@ -810,6 +1216,7 @@ var cohere_models_default = {
810
1216
  providers: ["cohere", "bedrock", "azure", "oracle"],
811
1217
  can: ["text-in", "img-in", "vectors-out"],
812
1218
  context: {
1219
+ type: "token",
813
1220
  total: 512,
814
1221
  maxOutput: 1024
815
1222
  }
@@ -822,6 +1229,7 @@ var cohere_models_default = {
822
1229
  providers: ["cohere", "oracle"],
823
1230
  can: ["text-in", "img-in", "vectors-out"],
824
1231
  context: {
1232
+ type: "token",
825
1233
  total: 512,
826
1234
  maxOutput: 384
827
1235
  }
@@ -834,6 +1242,7 @@ var cohere_models_default = {
834
1242
  providers: ["cohere", "bedrock", "azure"],
835
1243
  can: ["text-in", "text-out"],
836
1244
  context: {
1245
+ type: "token",
837
1246
  total: 4096,
838
1247
  maxOutput: null
839
1248
  }
@@ -846,6 +1255,7 @@ var cohere_models_default = {
846
1255
  providers: ["cohere", "azure"],
847
1256
  can: ["text-in", "text-out"],
848
1257
  context: {
1258
+ type: "token",
849
1259
  total: 4096,
850
1260
  maxOutput: null
851
1261
  }
@@ -858,6 +1268,7 @@ var cohere_models_default = {
858
1268
  providers: ["cohere", "azure"],
859
1269
  can: ["text-in", "text-out"],
860
1270
  context: {
1271
+ type: "token",
861
1272
  total: 4096,
862
1273
  maxOutput: null
863
1274
  }
@@ -877,6 +1288,19 @@ function validateModel(raw) {
877
1288
  throw new Error(`Model ${field} must be a string`);
878
1289
  }
879
1290
  }
1291
+ if (model.extends !== void 0 && typeof model.extends !== "string") {
1292
+ throw new Error("Model extends must be a string");
1293
+ }
1294
+ if (model.overrides !== void 0) {
1295
+ if (typeof model.overrides !== "object" || model.overrides === null) {
1296
+ throw new Error("Model overrides must be an object");
1297
+ }
1298
+ const validOverrideFields = ["name", "creator", "license", "providers", "can", "languages", "aliases", "context"];
1299
+ const invalidFields = Object.keys(model.overrides).filter((field) => !validOverrideFields.includes(field));
1300
+ if (invalidFields.length > 0) {
1301
+ throw new Error(`Invalid override fields: ${invalidFields.join(", ")}`);
1302
+ }
1303
+ }
880
1304
  if (!Array.isArray(model.providers)) {
881
1305
  throw new Error("Model providers must be an array");
882
1306
  }
@@ -918,6 +1342,16 @@ function validateModel(raw) {
918
1342
  if (typeof context.maxOutput !== "number") {
919
1343
  throw new Error("Image model context.maxOutput must be a number");
920
1344
  }
1345
+ } else if (context.type === "embedding") {
1346
+ if (typeof context.total !== "number") {
1347
+ throw new Error("Embedding model context.total must be a number");
1348
+ }
1349
+ if (typeof context.unit !== "string") {
1350
+ throw new Error("Embedding model context.unit must be a string");
1351
+ }
1352
+ if (typeof context.dimensions !== "number") {
1353
+ throw new Error("Embedding model context.dimensions must be a number");
1354
+ }
921
1355
  } else {
922
1356
  if (typeof context.total !== "number" && context.total !== null) {
923
1357
  throw new Error("Token model context.total must be a number or null");
@@ -935,8 +1369,41 @@ function validateModel(raw) {
935
1369
  can: model.can,
936
1370
  context: model.context,
937
1371
  ...model.languages ? { languages: model.languages } : {},
938
- ...model.aliases ? { aliases: model.aliases } : {}
1372
+ ...model.aliases ? { aliases: model.aliases } : {},
1373
+ ...model.extends ? { extends: model.extends } : {},
1374
+ ...model.overrides ? { overrides: model.overrides } : {}
1375
+ };
1376
+ }
1377
+ function resolveModel(model, allModels2, visited = /* @__PURE__ */ new Set()) {
1378
+ if (!model.extends) {
1379
+ return model;
1380
+ }
1381
+ if (visited.has(model.id)) {
1382
+ throw new Error(`Circular dependency detected for model ${model.id}`);
1383
+ }
1384
+ visited.add(model.id);
1385
+ const baseModel = allModels2[model.extends];
1386
+ if (!baseModel) {
1387
+ throw new Error(`Base model ${model.extends} not found for ${model.id}`);
1388
+ }
1389
+ const resolvedBase = resolveModel(baseModel, allModels2, visited);
1390
+ if (!model.overrides) {
1391
+ return {
1392
+ ...resolvedBase,
1393
+ id: model.id,
1394
+ extends: model.extends
1395
+ };
1396
+ }
1397
+ const resolved = {
1398
+ ...resolvedBase,
1399
+ ...model.overrides,
1400
+ id: model.id,
1401
+ extends: model.extends
939
1402
  };
1403
+ if (!resolved.name || !resolved.creator || !resolved.license || !resolved.providers || !resolved.can || !resolved.context) {
1404
+ throw new Error(`Missing required fields in resolved model ${model.id}`);
1405
+ }
1406
+ return resolved;
940
1407
  }
941
1408
  function buildAllModels() {
942
1409
  const allModelData = [
@@ -950,12 +1417,29 @@ function buildAllModels() {
950
1417
  cohere_models_default
951
1418
  ];
952
1419
  const allModels2 = allModelData.flatMap(
953
- (data) => data.models.map((model) => ({
954
- ...model,
955
- creator: data.creator
956
- }))
1420
+ (data) => data.models.map((model) => {
1421
+ if (typeof model.id !== "string") {
1422
+ throw new Error(`Model id must be a string`);
1423
+ }
1424
+ if (model.extends !== void 0 && typeof model.extends !== "string") {
1425
+ throw new Error("Model extends must be a string");
1426
+ }
1427
+ if (model.overrides !== void 0 && (typeof model.overrides !== "object" || model.overrides === null)) {
1428
+ throw new Error("Model overrides must be an object");
1429
+ }
1430
+ return {
1431
+ ...model,
1432
+ creator: data.creator
1433
+ };
1434
+ })
1435
+ );
1436
+ const modelMap = Object.fromEntries(
1437
+ allModels2.map((model) => [model.id, model])
957
1438
  );
958
- return allModels2.map((model) => validateModel(model));
1439
+ const resolvedModels = allModels2.map(
1440
+ (model) => resolveModel(model, modelMap)
1441
+ );
1442
+ return resolvedModels.map((model) => validateModel(model));
959
1443
  }
960
1444
 
961
1445
  // src/data/providers/openai-provider.json
@@ -1203,7 +1687,10 @@ var AIModels = class _AIModels extends ModelCollection {
1203
1687
  }
1204
1688
  /** Get all providers that can serve a specific model */
1205
1689
  getProvidersForModel(modelId) {
1206
- const model = this.id(modelId);
1690
+ let model = this.id(modelId);
1691
+ if (!model) {
1692
+ model = this.find((m) => m.aliases?.includes(modelId));
1693
+ }
1207
1694
  if (!model) return [];
1208
1695
  return providersData.providers.filter(
1209
1696
  (p) => model.providers.includes(p.id)