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.js CHANGED
@@ -75,7 +75,10 @@ var ModelCollection = class _ModelCollection extends Array {
75
75
  withMinContext(tokens) {
76
76
  return this.filter((model) => {
77
77
  const context = model.context;
78
- if (!("total" in context) || context.total === null) {
78
+ if (context.type !== "token" && context.type !== "character") {
79
+ return false;
80
+ }
81
+ if (context.total === null) {
79
82
  return false;
80
83
  }
81
84
  return context.total >= tokens;
@@ -88,61 +91,74 @@ var openai_models_default = {
88
91
  creator: "openai",
89
92
  models: [
90
93
  {
91
- id: "whisper-large-v3",
92
- name: "Whisper Large v3",
93
- license: "mit",
94
+ id: "gpt-4",
95
+ name: "GPT-4",
96
+ license: "proprietary",
94
97
  providers: [
95
98
  "openai",
96
- "azure",
97
- "groq"
99
+ "azure"
98
100
  ],
99
101
  can: [
100
- "sound-in",
101
- "text-out"
102
+ "chat",
103
+ "text-in",
104
+ "text-out",
105
+ "json-out",
106
+ "function-out"
102
107
  ],
103
108
  context: {
104
- total: null,
105
- maxOutput: null
109
+ type: "token",
110
+ total: 8192,
111
+ maxOutput: 4096
106
112
  }
107
113
  },
108
114
  {
109
- id: "whisper-large-v3-turbo",
110
- name: "Whisper Large v3 Turbo",
111
- license: "mit",
112
- providers: [
113
- "openai",
114
- "azure",
115
- "groq"
116
- ],
117
- can: [
118
- "sound-in",
119
- "text-out"
120
- ],
121
- context: {
122
- total: null,
123
- maxOutput: null
115
+ id: "gpt-4-turbo-preview",
116
+ extends: "gpt-4",
117
+ overrides: {
118
+ name: "GPT-4 Turbo",
119
+ context: {
120
+ type: "token",
121
+ total: 128e3,
122
+ maxOutput: 4096
123
+ }
124
124
  }
125
125
  },
126
126
  {
127
- id: "tts-1",
128
- name: "TTS-1",
127
+ id: "gpt-3.5-turbo",
128
+ name: "GPT-3.5 Turbo",
129
129
  license: "proprietary",
130
130
  providers: [
131
131
  "openai",
132
132
  "azure"
133
133
  ],
134
134
  can: [
135
+ "chat",
135
136
  "text-in",
136
- "sound-out"
137
+ "text-out",
138
+ "json-out",
139
+ "function-out"
137
140
  ],
138
141
  context: {
139
- total: null,
140
- maxOutput: null
142
+ type: "token",
143
+ total: 16385,
144
+ maxOutput: 4096
141
145
  }
142
146
  },
143
147
  {
144
- id: "tts-1-hd",
145
- name: "TTS-1 HD",
148
+ id: "gpt-3.5-turbo-16k",
149
+ extends: "gpt-3.5-turbo",
150
+ overrides: {
151
+ name: "GPT-3.5 Turbo 16K",
152
+ context: {
153
+ type: "token",
154
+ total: 16385,
155
+ maxOutput: 4096
156
+ }
157
+ }
158
+ },
159
+ {
160
+ id: "gpt-3.5-turbo-instruct",
161
+ name: "GPT-3.5 Turbo Instruct",
146
162
  license: "proprietary",
147
163
  providers: [
148
164
  "openai",
@@ -150,11 +166,12 @@ var openai_models_default = {
150
166
  ],
151
167
  can: [
152
168
  "text-in",
153
- "sound-out"
169
+ "text-out"
154
170
  ],
155
171
  context: {
156
- total: null,
157
- maxOutput: null
172
+ type: "token",
173
+ total: 4096,
174
+ maxOutput: 4096
158
175
  }
159
176
  },
160
177
  {
@@ -167,32 +184,184 @@ var openai_models_default = {
167
184
  ],
168
185
  can: [
169
186
  "chat",
187
+ "text-in",
188
+ "text-out",
170
189
  "img-in",
171
190
  "json-out",
172
191
  "function-out"
173
192
  ],
174
193
  context: {
194
+ type: "token",
175
195
  total: 128e3,
176
196
  maxOutput: 16384
177
197
  }
178
198
  },
199
+ {
200
+ id: "chatgpt-4o-latest",
201
+ extends: "gpt-4o",
202
+ overrides: {
203
+ name: "GPT-4o used in ChatGPT"
204
+ }
205
+ },
206
+ {
207
+ id: "gpt-4o-2024-11-20",
208
+ extends: "gpt-4o",
209
+ overrides: {
210
+ name: "GPT-4o (2024-11-20)"
211
+ }
212
+ },
213
+ {
214
+ id: "gpt-4o-2024-08-06",
215
+ extends: "gpt-4o",
216
+ overrides: {
217
+ name: "GPT-4o (2024-08-06)"
218
+ }
219
+ },
220
+ {
221
+ id: "gpt-4o-2024-05-13",
222
+ extends: "gpt-4o",
223
+ overrides: {
224
+ name: "GPT-4o (2024-05-13)",
225
+ context: {
226
+ type: "token",
227
+ total: 128e3,
228
+ maxOutput: 4096
229
+ }
230
+ }
231
+ },
179
232
  {
180
233
  id: "gpt-4o-mini",
181
- name: "GPT-4O Mini",
182
- license: "proprietary",
183
- providers: [
184
- "openai",
185
- "azure"
186
- ],
187
- can: [
188
- "chat",
189
- "img-in",
190
- "json-out",
191
- "function-out"
192
- ],
193
- context: {
194
- total: 128e3,
195
- maxOutput: 16384
234
+ extends: "gpt-4o",
235
+ overrides: {
236
+ name: "GPT-4o Mini",
237
+ context: {
238
+ type: "token",
239
+ total: 128e3,
240
+ maxOutput: 16384
241
+ }
242
+ }
243
+ },
244
+ {
245
+ id: "gpt-4o-audio-preview",
246
+ extends: "gpt-4o",
247
+ overrides: {
248
+ name: "GPT-4o Audio",
249
+ can: [
250
+ "chat",
251
+ "text-in",
252
+ "text-out",
253
+ "sound-in",
254
+ "json-out",
255
+ "function-out"
256
+ ],
257
+ context: {
258
+ type: "token",
259
+ total: 128e3,
260
+ maxOutput: 16384
261
+ }
262
+ }
263
+ },
264
+ {
265
+ id: "gpt-4o-audio-preview-2024-12-17",
266
+ extends: "gpt-4o-audio-preview",
267
+ overrides: {
268
+ name: "GPT-4o Audio (2024-12-17)"
269
+ }
270
+ },
271
+ {
272
+ id: "gpt-4o-audio-preview-2024-10-01",
273
+ extends: "gpt-4o-audio-preview",
274
+ overrides: {
275
+ name: "GPT-4o Audio (2024-10-01)"
276
+ }
277
+ },
278
+ {
279
+ id: "gpt-4o-mini-audio-preview",
280
+ extends: "gpt-4o-mini",
281
+ overrides: {
282
+ name: "GPT-4o Mini Audio",
283
+ can: [
284
+ "chat",
285
+ "text-in",
286
+ "text-out",
287
+ "sound-in",
288
+ "sound-out",
289
+ "json-out",
290
+ "function-out"
291
+ ],
292
+ context: {
293
+ type: "token",
294
+ total: 128e3,
295
+ maxOutput: 16384
296
+ }
297
+ }
298
+ },
299
+ {
300
+ id: "gpt-4o-mini-audio-preview-2024-12-17",
301
+ extends: "gpt-4o-mini-audio-preview",
302
+ overrides: {
303
+ name: "GPT-4o Mini Audio (2024-12-17)"
304
+ }
305
+ },
306
+ {
307
+ id: "gpt-4o-realtime-preview",
308
+ extends: "gpt-4o",
309
+ overrides: {
310
+ name: "GPT-4o Realtime",
311
+ can: [
312
+ "chat",
313
+ "text-in",
314
+ "text-out",
315
+ "sound-in",
316
+ "json-out",
317
+ "function-out"
318
+ ],
319
+ context: {
320
+ type: "token",
321
+ total: 128e3,
322
+ maxOutput: 4096
323
+ }
324
+ }
325
+ },
326
+ {
327
+ id: "gpt-4o-realtime-preview-2024-12-17",
328
+ extends: "gpt-4o-realtime-preview",
329
+ overrides: {
330
+ name: "GPT-4o Realtime (2024-12-17)"
331
+ }
332
+ },
333
+ {
334
+ id: "gpt-4o-realtime-preview-2024-10-01",
335
+ extends: "gpt-4o-realtime-preview",
336
+ overrides: {
337
+ name: "GPT-4o Realtime (2024-10-01)"
338
+ }
339
+ },
340
+ {
341
+ id: "gpt-4o-mini-realtime-preview",
342
+ extends: "gpt-4o-mini",
343
+ overrides: {
344
+ name: "GPT-4o Mini Realtime",
345
+ can: [
346
+ "chat",
347
+ "text-in",
348
+ "text-out",
349
+ "sound-in",
350
+ "json-out",
351
+ "function-out"
352
+ ],
353
+ context: {
354
+ type: "token",
355
+ total: 128e3,
356
+ maxOutput: 4096
357
+ }
358
+ }
359
+ },
360
+ {
361
+ id: "gpt-4o-mini-realtime-preview-2024-12-17",
362
+ extends: "gpt-4o-mini-realtime-preview",
363
+ overrides: {
364
+ name: "GPT-4o Mini Realtime (2024-12-17)"
196
365
  }
197
366
  },
198
367
  {
@@ -205,19 +374,75 @@ var openai_models_default = {
205
374
  ],
206
375
  can: [
207
376
  "chat",
377
+ "text-in",
378
+ "text-out",
208
379
  "img-in",
209
380
  "json-out",
210
381
  "function-out",
211
382
  "reason"
212
383
  ],
213
384
  context: {
385
+ type: "token",
214
386
  total: 2e5,
215
387
  maxOutput: 1e5
216
388
  }
217
389
  },
390
+ {
391
+ id: "o1-2024-12-17",
392
+ extends: "o1",
393
+ overrides: {
394
+ name: "OpenAI O1 (2024-12-17)"
395
+ }
396
+ },
218
397
  {
219
398
  id: "o1-mini",
220
- name: "OpenAI O1 Mini",
399
+ extends: "o1",
400
+ overrides: {
401
+ name: "OpenAI O1 Mini",
402
+ can: [
403
+ "chat",
404
+ "text-in",
405
+ "text-out",
406
+ "json-out",
407
+ "function-out",
408
+ "reason"
409
+ ],
410
+ context: {
411
+ type: "token",
412
+ total: 128e3,
413
+ maxOutput: 65536
414
+ }
415
+ }
416
+ },
417
+ {
418
+ id: "o1-mini-2024-09-12",
419
+ extends: "o1-mini",
420
+ overrides: {
421
+ name: "OpenAI O1 Mini (2024-09-12)"
422
+ }
423
+ },
424
+ {
425
+ id: "o1-preview",
426
+ extends: "o1",
427
+ overrides: {
428
+ name: "OpenAI O1 Preview",
429
+ context: {
430
+ type: "token",
431
+ total: 128e3,
432
+ maxOutput: 32768
433
+ }
434
+ }
435
+ },
436
+ {
437
+ id: "o1-preview-2024-09-12",
438
+ extends: "o1-preview",
439
+ overrides: {
440
+ name: "OpenAI O1 Preview (2024-09-12)"
441
+ }
442
+ },
443
+ {
444
+ id: "o3-mini",
445
+ name: "OpenAI O3 Mini",
221
446
  license: "proprietary",
222
447
  providers: [
223
448
  "openai",
@@ -225,70 +450,89 @@ var openai_models_default = {
225
450
  ],
226
451
  can: [
227
452
  "chat",
453
+ "text-in",
454
+ "text-out",
228
455
  "json-out",
229
456
  "function-out",
230
457
  "reason"
231
458
  ],
232
459
  context: {
233
- total: 128e3,
234
- maxOutput: 65536
460
+ type: "token",
461
+ total: 2e5,
462
+ maxOutput: 1e5
235
463
  }
236
464
  },
237
465
  {
238
- id: "o3-mini",
239
- name: "OpenAI O3 Mini",
466
+ id: "o3-mini-2025-01-31",
467
+ extends: "o3-mini",
468
+ overrides: {
469
+ name: "OpenAI O3 Mini (2025-01-31)"
470
+ }
471
+ },
472
+ {
473
+ id: "whisper-1",
474
+ name: "Whisper",
240
475
  license: "proprietary",
241
476
  providers: [
242
477
  "openai",
243
478
  "azure"
244
479
  ],
245
480
  can: [
246
- "chat",
247
- "json-out",
248
- "function-out",
249
- "reason"
481
+ "sound-in",
482
+ "text-out"
250
483
  ],
251
484
  context: {
252
- total: 2e5,
253
- maxOutput: 1e5
485
+ type: "audio-in",
486
+ total: null,
487
+ maxOutput: null
254
488
  }
255
489
  },
256
490
  {
257
- id: "gpt-4o-audio-preview",
258
- name: "GPT-4O Audio",
491
+ id: "tts-1",
492
+ name: "TTS-1",
259
493
  license: "proprietary",
260
494
  providers: [
261
495
  "openai",
262
496
  "azure"
263
497
  ],
264
498
  can: [
265
- "chat",
266
- "sound-in",
267
- "json-out",
268
- "function-out"
499
+ "text-in",
500
+ "sound-out"
269
501
  ],
270
502
  context: {
271
- total: 128e3,
272
- maxOutput: 16384
503
+ type: "audio-out",
504
+ total: null,
505
+ maxOutput: null
273
506
  }
274
507
  },
275
508
  {
276
- id: "gpt-4o-realtime-preview",
277
- name: "GPT-4O Realtime",
509
+ id: "tts-1-hd",
510
+ extends: "tts-1",
511
+ overrides: {
512
+ name: "TTS-1 HD"
513
+ }
514
+ },
515
+ {
516
+ id: "dall-e-2",
517
+ name: "DALL-E 2",
278
518
  license: "proprietary",
279
519
  providers: [
280
520
  "openai",
281
521
  "azure"
282
522
  ],
283
523
  can: [
284
- "chat",
285
- "sound-in",
286
- "json-out",
287
- "function-out"
524
+ "img-out"
288
525
  ],
289
526
  context: {
290
- total: 128e3,
291
- maxOutput: 4096
527
+ maxOutput: 1,
528
+ sizes: [
529
+ "256x256",
530
+ "512x512",
531
+ "1024x1024"
532
+ ],
533
+ qualities: [
534
+ "standard"
535
+ ]
292
536
  }
293
537
  },
294
538
  {
@@ -300,6 +544,7 @@ var openai_models_default = {
300
544
  "azure"
301
545
  ],
302
546
  can: [
547
+ "text-in",
303
548
  "img-out"
304
549
  ],
305
550
  context: {
@@ -314,6 +559,69 @@ var openai_models_default = {
314
559
  "hd"
315
560
  ]
316
561
  }
562
+ },
563
+ {
564
+ id: "text-embedding-ada-002",
565
+ name: "Text Embedding Ada 002",
566
+ license: "proprietary",
567
+ providers: [
568
+ "openai",
569
+ "azure"
570
+ ],
571
+ can: [
572
+ "text-in",
573
+ "vectors-out"
574
+ ],
575
+ context: {
576
+ type: "embedding",
577
+ total: 8191,
578
+ unit: "tokens",
579
+ dimensions: 1536,
580
+ embeddingType: "text",
581
+ normalized: true
582
+ }
583
+ },
584
+ {
585
+ id: "text-embedding-3-small",
586
+ name: "Text Embedding 3 Small",
587
+ license: "proprietary",
588
+ providers: [
589
+ "openai",
590
+ "azure"
591
+ ],
592
+ can: [
593
+ "text-in",
594
+ "vectors-out"
595
+ ],
596
+ context: {
597
+ type: "embedding",
598
+ total: 8191,
599
+ unit: "tokens",
600
+ dimensions: 1536,
601
+ embeddingType: "text",
602
+ normalized: true
603
+ }
604
+ },
605
+ {
606
+ id: "text-embedding-3-large",
607
+ name: "Text Embedding 3 Large",
608
+ license: "proprietary",
609
+ providers: [
610
+ "openai",
611
+ "azure"
612
+ ],
613
+ can: [
614
+ "text-in",
615
+ "vectors-out"
616
+ ],
617
+ context: {
618
+ type: "embedding",
619
+ total: 8191,
620
+ unit: "tokens",
621
+ dimensions: 3072,
622
+ embeddingType: "text",
623
+ normalized: true
624
+ }
317
625
  }
318
626
  ]
319
627
  };
@@ -323,14 +631,10 @@ var anthropic_models_default = {
323
631
  creator: "anthropic",
324
632
  models: [
325
633
  {
326
- id: "claude-3-opus-20240229",
634
+ id: "claude-3-opus",
327
635
  name: "Claude 3 Opus",
328
636
  license: "proprietary",
329
- providers: [
330
- "anthropic",
331
- "aws",
332
- "google"
333
- ],
637
+ providers: ["anthropic", "aws", "google"],
334
638
  can: [
335
639
  "chat",
336
640
  "text-in",
@@ -340,6 +644,7 @@ var anthropic_models_default = {
340
644
  "function-out"
341
645
  ],
342
646
  context: {
647
+ type: "token",
343
648
  total: 2e5,
344
649
  maxOutput: 4096,
345
650
  outputIsFixed: 1
@@ -347,14 +652,17 @@ var anthropic_models_default = {
347
652
  aliases: ["claude-3-opus-latest"]
348
653
  },
349
654
  {
350
- id: "claude-3-5-sonnet-20241022",
655
+ id: "claude-3-opus-20240229",
656
+ extends: "claude-3-opus",
657
+ overrides: {
658
+ name: "Claude 3 Opus (2024-02-29)"
659
+ }
660
+ },
661
+ {
662
+ id: "claude-3-sonnet",
351
663
  name: "Claude 3 Sonnet",
352
664
  license: "proprietary",
353
- providers: [
354
- "anthropic",
355
- "aws",
356
- "google"
357
- ],
665
+ providers: ["anthropic", "aws", "google"],
358
666
  can: [
359
667
  "chat",
360
668
  "text-in",
@@ -364,21 +672,52 @@ var anthropic_models_default = {
364
672
  "function-out"
365
673
  ],
366
674
  context: {
675
+ type: "token",
367
676
  total: 2e5,
368
- maxOutput: 8192,
677
+ maxOutput: 4096,
369
678
  outputIsFixed: 1
370
679
  },
371
680
  aliases: ["claude-3-sonnet-latest"]
372
681
  },
373
682
  {
374
- id: "claude-3-5-haiku-20241022",
683
+ id: "claude-3-sonnet-20240229",
684
+ extends: "claude-3-sonnet",
685
+ overrides: {
686
+ name: "Claude 3 Sonnet (2024-02-29)"
687
+ }
688
+ },
689
+ {
690
+ id: "claude-3-haiku",
375
691
  name: "Claude 3 Haiku",
376
692
  license: "proprietary",
377
- providers: [
378
- "anthropic",
379
- "aws",
380
- "google"
693
+ providers: ["anthropic", "aws", "google"],
694
+ can: [
695
+ "chat",
696
+ "text-in",
697
+ "text-out",
698
+ "img-in",
699
+ "json-out",
700
+ "function-out"
381
701
  ],
702
+ context: {
703
+ type: "token",
704
+ total: 2e5,
705
+ maxOutput: 4096,
706
+ outputIsFixed: 1
707
+ }
708
+ },
709
+ {
710
+ id: "claude-3-haiku-20240307",
711
+ extends: "claude-3-haiku",
712
+ overrides: {
713
+ name: "Claude 3 Haiku (2024-03-07)"
714
+ }
715
+ },
716
+ {
717
+ id: "claude-3-5-sonnet",
718
+ name: "Claude 3.5 Sonnet",
719
+ license: "proprietary",
720
+ providers: ["anthropic", "aws", "google"],
382
721
  can: [
383
722
  "chat",
384
723
  "text-in",
@@ -388,9 +727,45 @@ var anthropic_models_default = {
388
727
  "function-out"
389
728
  ],
390
729
  context: {
730
+ type: "token",
391
731
  total: 2e5,
392
732
  maxOutput: 8192,
393
733
  outputIsFixed: 1
734
+ },
735
+ aliases: ["claude-3-5-sonnet-latest"]
736
+ },
737
+ {
738
+ id: "claude-3-5-sonnet-20241022",
739
+ extends: "claude-3-5-sonnet",
740
+ overrides: {
741
+ name: "Claude 3.5 Sonnet (2024-10-22)"
742
+ }
743
+ },
744
+ {
745
+ id: "claude-3-5-haiku",
746
+ name: "Claude 3.5 Haiku",
747
+ license: "proprietary",
748
+ providers: ["anthropic", "aws", "google"],
749
+ can: [
750
+ "chat",
751
+ "text-in",
752
+ "text-out",
753
+ "json-out",
754
+ "function-out"
755
+ ],
756
+ context: {
757
+ type: "token",
758
+ total: 2e5,
759
+ maxOutput: 8192,
760
+ outputIsFixed: 1
761
+ },
762
+ aliases: ["claude-3-5-haiku-latest"]
763
+ },
764
+ {
765
+ id: "claude-3-5-haiku-20241022",
766
+ extends: "claude-3-5-haiku",
767
+ overrides: {
768
+ name: "Claude 3.5 Haiku (2024-10-22)"
394
769
  }
395
770
  }
396
771
  ]
@@ -407,6 +782,7 @@ var meta_models_default = {
407
782
  providers: ["groq"],
408
783
  can: ["chat", "text-in", "text-out", "json-out", "function-out"],
409
784
  context: {
785
+ type: "token",
410
786
  total: 8192,
411
787
  maxOutput: 4096
412
788
  }
@@ -418,6 +794,7 @@ var meta_models_default = {
418
794
  providers: ["groq"],
419
795
  can: ["chat", "text-in", "text-out", "json-out", "function-out"],
420
796
  context: {
797
+ type: "token",
421
798
  total: 8192,
422
799
  maxOutput: 4096
423
800
  }
@@ -429,6 +806,7 @@ var meta_models_default = {
429
806
  providers: ["groq"],
430
807
  can: ["chat", "text-in", "text-out", "img-in"],
431
808
  context: {
809
+ type: "token",
432
810
  total: 4096,
433
811
  maxOutput: 4096
434
812
  }
@@ -440,6 +818,7 @@ var meta_models_default = {
440
818
  providers: ["groq"],
441
819
  can: ["chat", "text-in", "text-out", "img-in"],
442
820
  context: {
821
+ type: "token",
443
822
  total: 4096,
444
823
  maxOutput: 4096
445
824
  }
@@ -451,6 +830,7 @@ var meta_models_default = {
451
830
  providers: ["groq"],
452
831
  can: ["chat", "text-in", "text-out"],
453
832
  context: {
833
+ type: "token",
454
834
  total: 4096,
455
835
  maxOutput: 4096
456
836
  }
@@ -475,6 +855,7 @@ var mistral_models_default = {
475
855
  "function-out"
476
856
  ],
477
857
  context: {
858
+ type: "token",
478
859
  total: 32768,
479
860
  maxOutput: 4096
480
861
  }
@@ -492,6 +873,7 @@ var mistral_models_default = {
492
873
  "function-out"
493
874
  ],
494
875
  context: {
876
+ type: "token",
495
877
  total: 32768,
496
878
  maxOutput: 4096
497
879
  }
@@ -507,6 +889,7 @@ var mistral_models_default = {
507
889
  "text-out"
508
890
  ],
509
891
  context: {
892
+ type: "token",
510
893
  total: 32768,
511
894
  maxOutput: 4096
512
895
  }
@@ -522,6 +905,7 @@ var mistral_models_default = {
522
905
  "text-out"
523
906
  ],
524
907
  context: {
908
+ type: "token",
525
909
  total: 32768,
526
910
  maxOutput: 4096
527
911
  }
@@ -537,6 +921,7 @@ var mistral_models_default = {
537
921
  "text-out"
538
922
  ],
539
923
  context: {
924
+ type: "token",
540
925
  total: 32768,
541
926
  maxOutput: 4096
542
927
  }
@@ -555,6 +940,7 @@ var google_models_default = {
555
940
  providers: ["google"],
556
941
  can: ["chat", "text-in", "text-out", "json-out", "function-out", "img-in", "sound-in", "reason"],
557
942
  context: {
943
+ type: "token",
558
944
  total: 1048576,
559
945
  maxOutput: 8192
560
946
  },
@@ -567,6 +953,7 @@ var google_models_default = {
567
953
  providers: ["google"],
568
954
  can: ["chat", "text-in", "text-out", "json-out", "function-out", "img-in", "sound-in"],
569
955
  context: {
956
+ type: "token",
570
957
  total: 1048576,
571
958
  maxOutput: 8192
572
959
  },
@@ -579,6 +966,7 @@ var google_models_default = {
579
966
  providers: ["google"],
580
967
  can: ["chat", "text-in", "text-out", "json-out", "function-out", "img-in", "sound-in"],
581
968
  context: {
969
+ type: "token",
582
970
  total: 2097152,
583
971
  maxOutput: 8192
584
972
  }
@@ -590,6 +978,7 @@ var google_models_default = {
590
978
  providers: ["google"],
591
979
  can: ["chat", "text-in", "text-out", "json-out", "function-out", "img-in", "sound-in"],
592
980
  context: {
981
+ type: "token",
593
982
  total: 2097152,
594
983
  maxOutput: 8192
595
984
  }
@@ -601,6 +990,7 @@ var google_models_default = {
601
990
  providers: ["google"],
602
991
  can: ["chat", "text-in", "text-out", "json-out", "function-out", "img-in", "sound-in", "reason"],
603
992
  context: {
993
+ type: "token",
604
994
  total: 2097152,
605
995
  maxOutput: 8192
606
996
  },
@@ -613,6 +1003,7 @@ var google_models_default = {
613
1003
  providers: ["google"],
614
1004
  can: ["text-in", "vectors-out"],
615
1005
  context: {
1006
+ type: "token",
616
1007
  total: 2048,
617
1008
  maxOutput: 768
618
1009
  }
@@ -624,6 +1015,7 @@ var google_models_default = {
624
1015
  providers: ["google"],
625
1016
  can: ["chat", "text-in", "text-out", "json-out", "function-out"],
626
1017
  context: {
1018
+ type: "token",
627
1019
  total: 8192,
628
1020
  maxOutput: 4096
629
1021
  }
@@ -635,6 +1027,7 @@ var google_models_default = {
635
1027
  providers: ["google"],
636
1028
  can: ["chat", "text-in", "text-out", "json-out", "function-out"],
637
1029
  context: {
1030
+ type: "token",
638
1031
  total: 8192,
639
1032
  maxOutput: 4096
640
1033
  }
@@ -659,6 +1052,7 @@ var deepseek_models_default = {
659
1052
  "function-out"
660
1053
  ],
661
1054
  context: {
1055
+ type: "token",
662
1056
  total: 131072,
663
1057
  maxOutput: 8192
664
1058
  }
@@ -677,6 +1071,7 @@ var deepseek_models_default = {
677
1071
  "reason"
678
1072
  ],
679
1073
  context: {
1074
+ type: "token",
680
1075
  total: 131072,
681
1076
  maxOutput: 8192
682
1077
  }
@@ -696,6 +1091,7 @@ var xai_models_default = {
696
1091
  providers: ["xai"],
697
1092
  can: ["chat", "text-in", "text-out", "img-in"],
698
1093
  context: {
1094
+ type: "token",
699
1095
  total: 32768,
700
1096
  maxOutput: 4096
701
1097
  },
@@ -709,6 +1105,7 @@ var xai_models_default = {
709
1105
  providers: ["xai"],
710
1106
  can: ["chat", "text-in", "text-out"],
711
1107
  context: {
1108
+ type: "token",
712
1109
  total: 131072,
713
1110
  maxOutput: 4096
714
1111
  },
@@ -722,6 +1119,7 @@ var xai_models_default = {
722
1119
  providers: ["xai"],
723
1120
  can: ["chat", "text-in", "text-out", "img-in"],
724
1121
  context: {
1122
+ type: "token",
725
1123
  total: 8192,
726
1124
  maxOutput: 4096
727
1125
  }
@@ -734,6 +1132,7 @@ var xai_models_default = {
734
1132
  providers: ["xai"],
735
1133
  can: ["chat", "text-in", "text-out"],
736
1134
  context: {
1135
+ type: "token",
737
1136
  total: 131072,
738
1137
  maxOutput: 4096
739
1138
  }
@@ -753,6 +1152,7 @@ var cohere_models_default = {
753
1152
  providers: ["cohere"],
754
1153
  can: ["chat", "text-in", "text-out", "reason", "function-out"],
755
1154
  context: {
1155
+ type: "token",
756
1156
  total: 128e3,
757
1157
  maxOutput: 4096
758
1158
  }
@@ -765,6 +1165,7 @@ var cohere_models_default = {
765
1165
  providers: ["cohere", "bedrock", "azure", "oracle"],
766
1166
  can: ["chat", "text-in", "text-out", "reason", "function-out"],
767
1167
  context: {
1168
+ type: "token",
768
1169
  total: 128e3,
769
1170
  maxOutput: 4096
770
1171
  },
@@ -778,6 +1179,7 @@ var cohere_models_default = {
778
1179
  providers: ["cohere", "bedrock", "azure", "oracle"],
779
1180
  can: ["chat", "text-in", "text-out", "reason", "function-out"],
780
1181
  context: {
1182
+ type: "token",
781
1183
  total: 128e3,
782
1184
  maxOutput: 4096
783
1185
  },
@@ -791,6 +1193,7 @@ var cohere_models_default = {
791
1193
  providers: ["cohere", "bedrock", "oracle"],
792
1194
  can: ["chat", "text-in", "text-out"],
793
1195
  context: {
1196
+ type: "token",
794
1197
  total: 4096,
795
1198
  maxOutput: 4096
796
1199
  }
@@ -803,6 +1206,7 @@ var cohere_models_default = {
803
1206
  providers: ["cohere", "bedrock", "oracle"],
804
1207
  can: ["chat", "text-in", "text-out"],
805
1208
  context: {
1209
+ type: "token",
806
1210
  total: 4096,
807
1211
  maxOutput: 4096
808
1212
  }
@@ -815,6 +1219,7 @@ var cohere_models_default = {
815
1219
  providers: ["cohere", "bedrock", "azure", "oracle"],
816
1220
  can: ["text-in", "img-in", "vectors-out"],
817
1221
  context: {
1222
+ type: "token",
818
1223
  total: 512,
819
1224
  maxOutput: 1024
820
1225
  }
@@ -827,6 +1232,7 @@ var cohere_models_default = {
827
1232
  providers: ["cohere", "oracle"],
828
1233
  can: ["text-in", "img-in", "vectors-out"],
829
1234
  context: {
1235
+ type: "token",
830
1236
  total: 512,
831
1237
  maxOutput: 384
832
1238
  }
@@ -839,6 +1245,7 @@ var cohere_models_default = {
839
1245
  providers: ["cohere", "bedrock", "azure", "oracle"],
840
1246
  can: ["text-in", "img-in", "vectors-out"],
841
1247
  context: {
1248
+ type: "token",
842
1249
  total: 512,
843
1250
  maxOutput: 1024
844
1251
  }
@@ -851,6 +1258,7 @@ var cohere_models_default = {
851
1258
  providers: ["cohere", "oracle"],
852
1259
  can: ["text-in", "img-in", "vectors-out"],
853
1260
  context: {
1261
+ type: "token",
854
1262
  total: 512,
855
1263
  maxOutput: 384
856
1264
  }
@@ -863,6 +1271,7 @@ var cohere_models_default = {
863
1271
  providers: ["cohere", "bedrock", "azure"],
864
1272
  can: ["text-in", "text-out"],
865
1273
  context: {
1274
+ type: "token",
866
1275
  total: 4096,
867
1276
  maxOutput: null
868
1277
  }
@@ -875,6 +1284,7 @@ var cohere_models_default = {
875
1284
  providers: ["cohere", "azure"],
876
1285
  can: ["text-in", "text-out"],
877
1286
  context: {
1287
+ type: "token",
878
1288
  total: 4096,
879
1289
  maxOutput: null
880
1290
  }
@@ -887,6 +1297,7 @@ var cohere_models_default = {
887
1297
  providers: ["cohere", "azure"],
888
1298
  can: ["text-in", "text-out"],
889
1299
  context: {
1300
+ type: "token",
890
1301
  total: 4096,
891
1302
  maxOutput: null
892
1303
  }
@@ -906,6 +1317,19 @@ function validateModel(raw) {
906
1317
  throw new Error(`Model ${field} must be a string`);
907
1318
  }
908
1319
  }
1320
+ if (model.extends !== void 0 && typeof model.extends !== "string") {
1321
+ throw new Error("Model extends must be a string");
1322
+ }
1323
+ if (model.overrides !== void 0) {
1324
+ if (typeof model.overrides !== "object" || model.overrides === null) {
1325
+ throw new Error("Model overrides must be an object");
1326
+ }
1327
+ const validOverrideFields = ["name", "creator", "license", "providers", "can", "languages", "aliases", "context"];
1328
+ const invalidFields = Object.keys(model.overrides).filter((field) => !validOverrideFields.includes(field));
1329
+ if (invalidFields.length > 0) {
1330
+ throw new Error(`Invalid override fields: ${invalidFields.join(", ")}`);
1331
+ }
1332
+ }
909
1333
  if (!Array.isArray(model.providers)) {
910
1334
  throw new Error("Model providers must be an array");
911
1335
  }
@@ -947,6 +1371,16 @@ function validateModel(raw) {
947
1371
  if (typeof context.maxOutput !== "number") {
948
1372
  throw new Error("Image model context.maxOutput must be a number");
949
1373
  }
1374
+ } else if (context.type === "embedding") {
1375
+ if (typeof context.total !== "number") {
1376
+ throw new Error("Embedding model context.total must be a number");
1377
+ }
1378
+ if (typeof context.unit !== "string") {
1379
+ throw new Error("Embedding model context.unit must be a string");
1380
+ }
1381
+ if (typeof context.dimensions !== "number") {
1382
+ throw new Error("Embedding model context.dimensions must be a number");
1383
+ }
950
1384
  } else {
951
1385
  if (typeof context.total !== "number" && context.total !== null) {
952
1386
  throw new Error("Token model context.total must be a number or null");
@@ -964,8 +1398,41 @@ function validateModel(raw) {
964
1398
  can: model.can,
965
1399
  context: model.context,
966
1400
  ...model.languages ? { languages: model.languages } : {},
967
- ...model.aliases ? { aliases: model.aliases } : {}
1401
+ ...model.aliases ? { aliases: model.aliases } : {},
1402
+ ...model.extends ? { extends: model.extends } : {},
1403
+ ...model.overrides ? { overrides: model.overrides } : {}
1404
+ };
1405
+ }
1406
+ function resolveModel(model, allModels2, visited = /* @__PURE__ */ new Set()) {
1407
+ if (!model.extends) {
1408
+ return model;
1409
+ }
1410
+ if (visited.has(model.id)) {
1411
+ throw new Error(`Circular dependency detected for model ${model.id}`);
1412
+ }
1413
+ visited.add(model.id);
1414
+ const baseModel = allModels2[model.extends];
1415
+ if (!baseModel) {
1416
+ throw new Error(`Base model ${model.extends} not found for ${model.id}`);
1417
+ }
1418
+ const resolvedBase = resolveModel(baseModel, allModels2, visited);
1419
+ if (!model.overrides) {
1420
+ return {
1421
+ ...resolvedBase,
1422
+ id: model.id,
1423
+ extends: model.extends
1424
+ };
1425
+ }
1426
+ const resolved = {
1427
+ ...resolvedBase,
1428
+ ...model.overrides,
1429
+ id: model.id,
1430
+ extends: model.extends
968
1431
  };
1432
+ if (!resolved.name || !resolved.creator || !resolved.license || !resolved.providers || !resolved.can || !resolved.context) {
1433
+ throw new Error(`Missing required fields in resolved model ${model.id}`);
1434
+ }
1435
+ return resolved;
969
1436
  }
970
1437
  function buildAllModels() {
971
1438
  const allModelData = [
@@ -979,12 +1446,29 @@ function buildAllModels() {
979
1446
  cohere_models_default
980
1447
  ];
981
1448
  const allModels2 = allModelData.flatMap(
982
- (data) => data.models.map((model) => ({
983
- ...model,
984
- creator: data.creator
985
- }))
1449
+ (data) => data.models.map((model) => {
1450
+ if (typeof model.id !== "string") {
1451
+ throw new Error(`Model id must be a string`);
1452
+ }
1453
+ if (model.extends !== void 0 && typeof model.extends !== "string") {
1454
+ throw new Error("Model extends must be a string");
1455
+ }
1456
+ if (model.overrides !== void 0 && (typeof model.overrides !== "object" || model.overrides === null)) {
1457
+ throw new Error("Model overrides must be an object");
1458
+ }
1459
+ return {
1460
+ ...model,
1461
+ creator: data.creator
1462
+ };
1463
+ })
1464
+ );
1465
+ const modelMap = Object.fromEntries(
1466
+ allModels2.map((model) => [model.id, model])
986
1467
  );
987
- return allModels2.map((model) => validateModel(model));
1468
+ const resolvedModels = allModels2.map(
1469
+ (model) => resolveModel(model, modelMap)
1470
+ );
1471
+ return resolvedModels.map((model) => validateModel(model));
988
1472
  }
989
1473
 
990
1474
  // src/data/providers/openai-provider.json
@@ -1232,7 +1716,10 @@ var AIModels = class _AIModels extends ModelCollection {
1232
1716
  }
1233
1717
  /** Get all providers that can serve a specific model */
1234
1718
  getProvidersForModel(modelId) {
1235
- const model = this.id(modelId);
1719
+ let model = this.id(modelId);
1720
+ if (!model) {
1721
+ model = this.find((m) => m.aliases?.includes(modelId));
1722
+ }
1236
1723
  if (!model) return [];
1237
1724
  return providersData.providers.filter(
1238
1725
  (p) => model.providers.includes(p.id)