@dexto/llm 1.10.1 → 1.10.3

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.cjs CHANGED
@@ -23,17 +23,20 @@ __export(index_exports, {
23
23
  ANTHROPIC_BETA_HEADER: () => ANTHROPIC_BETA_HEADER,
24
24
  ANTHROPIC_INTERLEAVED_THINKING_BETA: () => ANTHROPIC_INTERLEAVED_THINKING_BETA,
25
25
  DEFAULT_MAX_INPUT_TOKENS: () => DEFAULT_MAX_INPUT_TOKENS,
26
+ DEFAULT_MODEL_REGISTRY: () => DEFAULT_MODEL_REGISTRY,
26
27
  LLM_PRICING_STATUSES: () => LLM_PRICING_STATUSES,
27
28
  LLM_PROVIDERS: () => LLM_PROVIDERS,
28
29
  LLM_REGISTRY: () => LLM_REGISTRY,
29
30
  LlmCatalogError: () => LlmCatalogError,
30
31
  MIME_TYPE_TO_FILE_TYPE: () => MIME_TYPE_TO_FILE_TYPE,
32
+ ModelRegistry: () => ModelRegistry,
31
33
  SUPPORTED_FILE_TYPES: () => SUPPORTED_FILE_TYPES,
32
34
  acceptsAnyModel: () => acceptsAnyModel,
33
35
  buildGoogleReasoningProfile: () => buildGoogleReasoningProfile,
34
36
  calculateCost: () => calculateCost,
35
37
  calculateCostBreakdown: () => calculateCostBreakdown,
36
38
  coerceOpenAIReasoningEffort: () => coerceOpenAIReasoningEffort,
39
+ createModelRegistry: () => createModelRegistry,
37
40
  getAllModelsForProvider: () => getAllModelsForProvider,
38
41
  getAllSupportedModels: () => getAllSupportedModels,
39
42
  getAllowedMimeTypes: () => getAllowedMimeTypes,
@@ -1007,6 +1010,29 @@ var MODELS_BY_PROVIDER = {
1007
1010
  unit: "per_million_tokens"
1008
1011
  }
1009
1012
  },
1013
+ {
1014
+ name: "gpt-realtime-2.1",
1015
+ displayName: "GPT-Realtime-2.1",
1016
+ maxInputTokens: 96e3,
1017
+ supportedFileTypes: ["pdf", "image", "audio", "document"],
1018
+ reasoning: true,
1019
+ supportsTemperature: false,
1020
+ supportsToolCall: true,
1021
+ releaseDate: "2026-07-06",
1022
+ modalities: {
1023
+ input: ["text", "audio", "image"],
1024
+ output: ["text", "audio"]
1025
+ },
1026
+ pricing: {
1027
+ inputPerM: 4,
1028
+ outputPerM: 24,
1029
+ cacheReadPerM: 0.4,
1030
+ inputAudioPerM: 32,
1031
+ outputAudioPerM: 64,
1032
+ currency: "USD",
1033
+ unit: "per_million_tokens"
1034
+ }
1035
+ },
1010
1036
  {
1011
1037
  name: "o1",
1012
1038
  displayName: "o1",
@@ -1896,16 +1922,16 @@ var MODELS_BY_PROVIDER = {
1896
1922
  reasoning: true,
1897
1923
  supportsTemperature: true,
1898
1924
  supportsToolCall: true,
1899
- releaseDate: "2025-09-25",
1925
+ releaseDate: "2026-05-19",
1900
1926
  modalities: {
1901
- input: ["text", "image", "audio", "video", "pdf"],
1927
+ input: ["text", "image", "video", "audio", "pdf"],
1902
1928
  output: ["text"]
1903
1929
  },
1904
1930
  pricing: {
1905
- inputPerM: 0.3,
1906
- outputPerM: 2.5,
1907
- cacheReadPerM: 0.075,
1908
- inputAudioPerM: 1,
1931
+ inputPerM: 1.5,
1932
+ outputPerM: 9,
1933
+ cacheReadPerM: 0.15,
1934
+ inputAudioPerM: 1.5,
1909
1935
  currency: "USD",
1910
1936
  unit: "per_million_tokens"
1911
1937
  }
@@ -1918,15 +1944,16 @@ var MODELS_BY_PROVIDER = {
1918
1944
  reasoning: true,
1919
1945
  supportsTemperature: true,
1920
1946
  supportsToolCall: true,
1921
- releaseDate: "2025-09-25",
1947
+ releaseDate: "2026-05-07",
1922
1948
  modalities: {
1923
- input: ["text", "image", "audio", "video", "pdf"],
1949
+ input: ["text", "image", "video", "audio", "pdf"],
1924
1950
  output: ["text"]
1925
1951
  },
1926
1952
  pricing: {
1927
- inputPerM: 0.1,
1928
- outputPerM: 0.4,
1953
+ inputPerM: 0.25,
1954
+ outputPerM: 1.5,
1929
1955
  cacheReadPerM: 0.025,
1956
+ inputAudioPerM: 0.5,
1930
1957
  currency: "USD",
1931
1958
  unit: "per_million_tokens"
1932
1959
  }
@@ -3197,6 +3224,10 @@ var MODELS_BY_PROVIDER = {
3197
3224
  cacheReadPerM: 0.2,
3198
3225
  cacheWritePerM: 0.375,
3199
3226
  reasoningPerM: 12,
3227
+ contextOver200kPerM: {
3228
+ inputPerM: 4,
3229
+ outputPerM: 18
3230
+ },
3200
3231
  currency: "USD",
3201
3232
  unit: "per_million_tokens"
3202
3233
  }
@@ -3204,10 +3235,10 @@ var MODELS_BY_PROVIDER = {
3204
3235
  {
3205
3236
  name: "~moonshotai/kimi-latest",
3206
3237
  displayName: "MoonshotAI Kimi Latest",
3207
- maxInputTokens: 262144,
3238
+ maxInputTokens: 1048576,
3208
3239
  supportedFileTypes: ["image"],
3209
3240
  reasoning: true,
3210
- supportsTemperature: true,
3241
+ supportsTemperature: false,
3211
3242
  supportsToolCall: true,
3212
3243
  releaseDate: "2026-04-27",
3213
3244
  modalities: {
@@ -3215,9 +3246,9 @@ var MODELS_BY_PROVIDER = {
3215
3246
  output: ["text"]
3216
3247
  },
3217
3248
  pricing: {
3218
- inputPerM: 0.66,
3219
- outputPerM: 3.41,
3220
- cacheReadPerM: 0.15,
3249
+ inputPerM: 3,
3250
+ outputPerM: 15,
3251
+ cacheReadPerM: 0.3,
3221
3252
  currency: "USD",
3222
3253
  unit: "per_million_tokens"
3223
3254
  }
@@ -3722,7 +3753,7 @@ var MODELS_BY_PROVIDER = {
3722
3753
  reasoning: true,
3723
3754
  supportsTemperature: false,
3724
3755
  supportsToolCall: true,
3725
- releaseDate: "2026-05-12",
3756
+ releaseDate: "2026-04-16",
3726
3757
  modalities: {
3727
3758
  input: ["text", "image", "pdf"],
3728
3759
  output: ["text"]
@@ -3766,7 +3797,7 @@ var MODELS_BY_PROVIDER = {
3766
3797
  reasoning: true,
3767
3798
  supportsTemperature: false,
3768
3799
  supportsToolCall: true,
3769
- releaseDate: "2026-05-27",
3800
+ releaseDate: "2026-05-28",
3770
3801
  modalities: {
3771
3802
  input: ["text", "image", "pdf"],
3772
3803
  output: ["text"]
@@ -3880,26 +3911,6 @@ var MODELS_BY_PROVIDER = {
3880
3911
  unit: "per_million_tokens"
3881
3912
  }
3882
3913
  },
3883
- {
3884
- name: "arcee-ai/coder-large",
3885
- displayName: "Coder Large",
3886
- maxInputTokens: 32768,
3887
- supportedFileTypes: [],
3888
- reasoning: false,
3889
- supportsTemperature: true,
3890
- supportsToolCall: false,
3891
- releaseDate: "2025-05-05",
3892
- modalities: {
3893
- input: ["text"],
3894
- output: ["text"]
3895
- },
3896
- pricing: {
3897
- inputPerM: 0.5,
3898
- outputPerM: 0.8,
3899
- currency: "USD",
3900
- unit: "per_million_tokens"
3901
- }
3902
- },
3903
3914
  {
3904
3915
  name: "arcee-ai/trinity-large-thinking",
3905
3916
  displayName: "Trinity Large Thinking",
@@ -3921,26 +3932,6 @@ var MODELS_BY_PROVIDER = {
3921
3932
  unit: "per_million_tokens"
3922
3933
  }
3923
3934
  },
3924
- {
3925
- name: "arcee-ai/trinity-mini",
3926
- displayName: "Trinity Mini",
3927
- maxInputTokens: 131072,
3928
- supportedFileTypes: [],
3929
- reasoning: true,
3930
- supportsTemperature: true,
3931
- supportsToolCall: true,
3932
- releaseDate: "2025-12-01",
3933
- modalities: {
3934
- input: ["text"],
3935
- output: ["text"]
3936
- },
3937
- pricing: {
3938
- inputPerM: 0.045,
3939
- outputPerM: 0.15,
3940
- currency: "USD",
3941
- unit: "per_million_tokens"
3942
- }
3943
- },
3944
3935
  {
3945
3936
  name: "arcee-ai/virtuoso-large",
3946
3937
  displayName: "Virtuoso Large",
@@ -4276,8 +4267,8 @@ var MODELS_BY_PROVIDER = {
4276
4267
  output: ["text"]
4277
4268
  },
4278
4269
  pricing: {
4279
- inputPerM: 0.24,
4280
- outputPerM: 0.9,
4270
+ inputPerM: 0.27,
4271
+ outputPerM: 1.12,
4281
4272
  cacheReadPerM: 0.135,
4282
4273
  currency: "USD",
4283
4274
  unit: "per_million_tokens"
@@ -4297,8 +4288,8 @@ var MODELS_BY_PROVIDER = {
4297
4288
  output: ["text"]
4298
4289
  },
4299
4290
  pricing: {
4300
- inputPerM: 0.21,
4301
- outputPerM: 0.79,
4291
+ inputPerM: 0.25,
4292
+ outputPerM: 0.95,
4302
4293
  cacheReadPerM: 0.13,
4303
4294
  currency: "USD",
4304
4295
  unit: "per_million_tokens"
@@ -4368,7 +4359,7 @@ var MODELS_BY_PROVIDER = {
4368
4359
  {
4369
4360
  name: "deepseek/deepseek-v3.1-terminus",
4370
4361
  displayName: "DeepSeek V3.1 Terminus",
4371
- maxInputTokens: 163840,
4362
+ maxInputTokens: 131072,
4372
4363
  supportedFileTypes: [],
4373
4364
  reasoning: true,
4374
4365
  supportsTemperature: true,
@@ -4380,8 +4371,8 @@ var MODELS_BY_PROVIDER = {
4380
4371
  },
4381
4372
  pricing: {
4382
4373
  inputPerM: 0.27,
4383
- outputPerM: 0.95,
4384
- cacheReadPerM: 0.13,
4374
+ outputPerM: 1,
4375
+ cacheReadPerM: 0.135,
4385
4376
  currency: "USD",
4386
4377
  unit: "per_million_tokens"
4387
4378
  }
@@ -4389,7 +4380,7 @@ var MODELS_BY_PROVIDER = {
4389
4380
  {
4390
4381
  name: "deepseek/deepseek-v3.2",
4391
4382
  displayName: "DeepSeek V3.2",
4392
- maxInputTokens: 131072,
4383
+ maxInputTokens: 163840,
4393
4384
  supportedFileTypes: [],
4394
4385
  reasoning: true,
4395
4386
  supportsTemperature: true,
@@ -4400,9 +4391,9 @@ var MODELS_BY_PROVIDER = {
4400
4391
  output: ["text"]
4401
4392
  },
4402
4393
  pricing: {
4403
- inputPerM: 0.2288,
4404
- outputPerM: 0.3432,
4405
- cacheReadPerM: 0.02288,
4394
+ inputPerM: 0.269,
4395
+ outputPerM: 0.4,
4396
+ cacheReadPerM: 0.1345,
4406
4397
  currency: "USD",
4407
4398
  unit: "per_million_tokens"
4408
4399
  }
@@ -4445,9 +4436,9 @@ var MODELS_BY_PROVIDER = {
4445
4436
  },
4446
4437
  supportsInterleaved: true,
4447
4438
  pricing: {
4448
- inputPerM: 0.09,
4449
- outputPerM: 0.18,
4450
- cacheReadPerM: 0.018,
4439
+ inputPerM: 0.098,
4440
+ outputPerM: 0.196,
4441
+ cacheReadPerM: 0.02,
4451
4442
  currency: "USD",
4452
4443
  unit: "per_million_tokens"
4453
4444
  }
@@ -4643,16 +4634,16 @@ var MODELS_BY_PROVIDER = {
4643
4634
  },
4644
4635
  {
4645
4636
  name: "google/gemini-3-pro-image",
4646
- displayName: "Nano Banana Pro (Gemini 3 Pro Image)",
4637
+ displayName: "Nano Banana Pro",
4647
4638
  maxInputTokens: 65536,
4648
4639
  supportedFileTypes: ["image", "document"],
4649
4640
  reasoning: true,
4650
4641
  supportsTemperature: true,
4651
4642
  supportsToolCall: true,
4652
- releaseDate: "2026-06-18",
4643
+ releaseDate: "2026-05-28",
4653
4644
  modalities: {
4654
- input: ["image", "text"],
4655
- output: ["image", "text"]
4645
+ input: ["text", "image"],
4646
+ output: ["text", "image"]
4656
4647
  },
4657
4648
  pricing: {
4658
4649
  inputPerM: 2,
@@ -4689,16 +4680,16 @@ var MODELS_BY_PROVIDER = {
4689
4680
  },
4690
4681
  {
4691
4682
  name: "google/gemini-3.1-flash-image",
4692
- displayName: "Nano Banana 2 (Gemini 3.1 Flash Image)",
4683
+ displayName: "Nano Banana 2",
4693
4684
  maxInputTokens: 131072,
4694
4685
  supportedFileTypes: ["image", "document"],
4695
4686
  reasoning: true,
4696
4687
  supportsTemperature: true,
4697
4688
  supportsToolCall: false,
4698
- releaseDate: "2026-06-18",
4689
+ releaseDate: "2026-05-28",
4699
4690
  modalities: {
4700
- input: ["image", "text"],
4701
- output: ["image", "text"]
4691
+ input: ["text", "image"],
4692
+ output: ["text", "image"]
4702
4693
  },
4703
4694
  pricing: {
4704
4695
  inputPerM: 0.5,
@@ -4933,7 +4924,8 @@ var MODELS_BY_PROVIDER = {
4933
4924
  },
4934
4925
  pricing: {
4935
4926
  inputPerM: 0.08,
4936
- outputPerM: 0.16,
4927
+ outputPerM: 0.45,
4928
+ cacheReadPerM: 0.04,
4937
4929
  currency: "USD",
4938
4930
  unit: "per_million_tokens"
4939
4931
  }
@@ -4992,8 +4984,8 @@ var MODELS_BY_PROVIDER = {
4992
4984
  output: ["text"]
4993
4985
  },
4994
4986
  pricing: {
4995
- inputPerM: 0.06,
4996
- outputPerM: 0.33,
4987
+ inputPerM: 0.1,
4988
+ outputPerM: 0.3,
4997
4989
  currency: "USD",
4998
4990
  unit: "per_million_tokens"
4999
4991
  }
@@ -5032,9 +5024,9 @@ var MODELS_BY_PROVIDER = {
5032
5024
  output: ["text"]
5033
5025
  },
5034
5026
  pricing: {
5035
- inputPerM: 0.12,
5036
- outputPerM: 0.35,
5037
- cacheReadPerM: 0.09,
5027
+ inputPerM: 0.22,
5028
+ outputPerM: 0.55,
5029
+ cacheReadPerM: 0.12,
5038
5030
  currency: "USD",
5039
5031
  unit: "per_million_tokens"
5040
5032
  }
@@ -5285,62 +5277,64 @@ var MODELS_BY_PROVIDER = {
5285
5277
  }
5286
5278
  },
5287
5279
  {
5288
- name: "kwaipilot/kat-coder-pro-v2",
5289
- displayName: "KAT-Coder-Pro V2",
5280
+ name: "kwaipilot/kat-coder-air-v2.5",
5281
+ displayName: "KAT-Coder-Air V2.5",
5290
5282
  maxInputTokens: 256e3,
5291
5283
  supportedFileTypes: [],
5292
5284
  reasoning: false,
5293
5285
  supportsTemperature: true,
5294
5286
  supportsToolCall: true,
5295
- releaseDate: "2026-03-27",
5287
+ releaseDate: "2026-07-10",
5296
5288
  modalities: {
5297
5289
  input: ["text"],
5298
5290
  output: ["text"]
5299
5291
  },
5300
5292
  pricing: {
5301
- inputPerM: 0.3,
5302
- outputPerM: 1.2,
5303
- cacheReadPerM: 0.06,
5293
+ inputPerM: 0.15,
5294
+ outputPerM: 0.6,
5295
+ cacheReadPerM: 0.03,
5304
5296
  currency: "USD",
5305
5297
  unit: "per_million_tokens"
5306
5298
  }
5307
5299
  },
5308
5300
  {
5309
- name: "liquid/lfm-2.5-1.2b-instruct:free",
5310
- displayName: "LFM2.5-1.2B-Instruct (free)",
5311
- maxInputTokens: 32768,
5301
+ name: "kwaipilot/kat-coder-pro-v2",
5302
+ displayName: "KAT-Coder-Pro V2",
5303
+ maxInputTokens: 256e3,
5312
5304
  supportedFileTypes: [],
5313
5305
  reasoning: false,
5314
5306
  supportsTemperature: true,
5315
- supportsToolCall: false,
5316
- releaseDate: "2026-01-20",
5307
+ supportsToolCall: true,
5308
+ releaseDate: "2026-03-27",
5317
5309
  modalities: {
5318
5310
  input: ["text"],
5319
5311
  output: ["text"]
5320
5312
  },
5321
5313
  pricing: {
5322
- inputPerM: 0,
5323
- outputPerM: 0,
5314
+ inputPerM: 0.3,
5315
+ outputPerM: 1.2,
5316
+ cacheReadPerM: 0.06,
5324
5317
  currency: "USD",
5325
5318
  unit: "per_million_tokens"
5326
5319
  }
5327
5320
  },
5328
5321
  {
5329
- name: "liquid/lfm-2.5-1.2b-thinking:free",
5330
- displayName: "LFM2.5-1.2B-Thinking (free)",
5331
- maxInputTokens: 32768,
5322
+ name: "kwaipilot/kat-coder-pro-v2.5",
5323
+ displayName: "KAT-Coder-Pro V2.5",
5324
+ maxInputTokens: 256e3,
5332
5325
  supportedFileTypes: [],
5333
- reasoning: true,
5326
+ reasoning: false,
5334
5327
  supportsTemperature: true,
5335
5328
  supportsToolCall: true,
5336
- releaseDate: "2026-01-20",
5329
+ releaseDate: "2026-07-10",
5337
5330
  modalities: {
5338
5331
  input: ["text"],
5339
5332
  output: ["text"]
5340
5333
  },
5341
5334
  pricing: {
5342
- inputPerM: 0,
5343
- outputPerM: 0,
5335
+ inputPerM: 0.74,
5336
+ outputPerM: 2.96,
5337
+ cacheReadPerM: 0.15,
5344
5338
  currency: "USD",
5345
5339
  unit: "per_million_tokens"
5346
5340
  }
@@ -5365,26 +5359,6 @@ var MODELS_BY_PROVIDER = {
5365
5359
  unit: "per_million_tokens"
5366
5360
  }
5367
5361
  },
5368
- {
5369
- name: "meta-llama/llama-3-8b-instruct",
5370
- displayName: "Llama 3 8B Instruct",
5371
- maxInputTokens: 8192,
5372
- supportedFileTypes: [],
5373
- reasoning: false,
5374
- supportsTemperature: true,
5375
- supportsToolCall: false,
5376
- releaseDate: "2024-04-18",
5377
- modalities: {
5378
- input: ["text"],
5379
- output: ["text"]
5380
- },
5381
- pricing: {
5382
- inputPerM: 0.14,
5383
- outputPerM: 0.14,
5384
- currency: "USD",
5385
- unit: "per_million_tokens"
5386
- }
5387
- },
5388
5362
  {
5389
5363
  name: "meta-llama/llama-3.1-70b-instruct",
5390
5364
  displayName: "Llama 3.1 70B Instruct",
@@ -5419,8 +5393,9 @@ var MODELS_BY_PROVIDER = {
5419
5393
  output: ["text"]
5420
5394
  },
5421
5395
  pricing: {
5422
- inputPerM: 0.02,
5423
- outputPerM: 0.03,
5396
+ inputPerM: 0.05,
5397
+ outputPerM: 0.08,
5398
+ cacheReadPerM: 0.025,
5424
5399
  currency: "USD",
5425
5400
  unit: "per_million_tokens"
5426
5401
  }
@@ -5519,8 +5494,8 @@ var MODELS_BY_PROVIDER = {
5519
5494
  output: ["text"]
5520
5495
  },
5521
5496
  pricing: {
5522
- inputPerM: 0.1,
5523
- outputPerM: 0.32,
5497
+ inputPerM: 0.13,
5498
+ outputPerM: 0.4,
5524
5499
  currency: "USD",
5525
5500
  unit: "per_million_tokens"
5526
5501
  }
@@ -5559,8 +5534,8 @@ var MODELS_BY_PROVIDER = {
5559
5534
  output: ["text"]
5560
5535
  },
5561
5536
  pricing: {
5562
- inputPerM: 0.15,
5563
- outputPerM: 0.6,
5537
+ inputPerM: 0.2,
5538
+ outputPerM: 0.8,
5564
5539
  currency: "USD",
5565
5540
  unit: "per_million_tokens"
5566
5541
  }
@@ -5605,6 +5580,27 @@ var MODELS_BY_PROVIDER = {
5605
5580
  unit: "per_million_tokens"
5606
5581
  }
5607
5582
  },
5583
+ {
5584
+ name: "meta/muse-spark-1.1",
5585
+ displayName: "Muse Spark 1.1",
5586
+ maxInputTokens: 1048576,
5587
+ supportedFileTypes: ["pdf", "image", "audio", "video"],
5588
+ reasoning: true,
5589
+ supportsTemperature: true,
5590
+ supportsToolCall: true,
5591
+ releaseDate: "2026-04-08",
5592
+ modalities: {
5593
+ input: ["text", "image", "video", "pdf", "audio"],
5594
+ output: ["text"]
5595
+ },
5596
+ pricing: {
5597
+ inputPerM: 1.25,
5598
+ outputPerM: 4.25,
5599
+ cacheReadPerM: 0.15,
5600
+ currency: "USD",
5601
+ unit: "per_million_tokens"
5602
+ }
5603
+ },
5608
5604
  {
5609
5605
  name: "microsoft/phi-4",
5610
5606
  displayName: "Phi 4",
@@ -5679,7 +5675,7 @@ var MODELS_BY_PROVIDER = {
5679
5675
  output: ["text"]
5680
5676
  },
5681
5677
  pricing: {
5682
- inputPerM: 0.4,
5678
+ inputPerM: 0.55,
5683
5679
  outputPerM: 2.2,
5684
5680
  currency: "USD",
5685
5681
  unit: "per_million_tokens"
@@ -5794,8 +5790,9 @@ var MODELS_BY_PROVIDER = {
5794
5790
  output: ["text"]
5795
5791
  },
5796
5792
  pricing: {
5797
- inputPerM: 0.24,
5798
- outputPerM: 0.96,
5793
+ inputPerM: 0.3,
5794
+ outputPerM: 1.2,
5795
+ cacheReadPerM: 0.06,
5799
5796
  currency: "USD",
5800
5797
  unit: "per_million_tokens"
5801
5798
  }
@@ -6067,7 +6064,7 @@ var MODELS_BY_PROVIDER = {
6067
6064
  },
6068
6065
  pricing: {
6069
6066
  inputPerM: 0.02,
6070
- outputPerM: 0.03,
6067
+ outputPerM: 0.04,
6071
6068
  currency: "USD",
6072
6069
  unit: "per_million_tokens"
6073
6070
  }
@@ -6157,7 +6154,7 @@ var MODELS_BY_PROVIDER = {
6157
6154
  {
6158
6155
  name: "mistralai/mistral-small-3.2-24b-instruct",
6159
6156
  displayName: "Mistral Small 3.2 24B",
6160
- maxInputTokens: 128e3,
6157
+ maxInputTokens: 131072,
6161
6158
  supportedFileTypes: ["image"],
6162
6159
  reasoning: false,
6163
6160
  supportsTemperature: true,
@@ -6168,8 +6165,9 @@ var MODELS_BY_PROVIDER = {
6168
6165
  output: ["text"]
6169
6166
  },
6170
6167
  pricing: {
6171
- inputPerM: 0.075,
6172
- outputPerM: 0.2,
6168
+ inputPerM: 0.1,
6169
+ outputPerM: 0.3,
6170
+ cacheReadPerM: 0.01,
6173
6171
  currency: "USD",
6174
6172
  unit: "per_million_tokens"
6175
6173
  }
@@ -6276,7 +6274,6 @@ var MODELS_BY_PROVIDER = {
6276
6274
  pricing: {
6277
6275
  inputPerM: 0.6,
6278
6276
  outputPerM: 2.5,
6279
- cacheReadPerM: 0.15,
6280
6277
  currency: "USD",
6281
6278
  unit: "per_million_tokens"
6282
6279
  }
@@ -6299,9 +6296,9 @@ var MODELS_BY_PROVIDER = {
6299
6296
  },
6300
6297
  supportsInterleaved: true,
6301
6298
  pricing: {
6302
- inputPerM: 0.375,
6303
- outputPerM: 2.025,
6304
- cacheReadPerM: 0.203,
6299
+ inputPerM: 0.57,
6300
+ outputPerM: 2.85,
6301
+ cacheReadPerM: 0.095,
6305
6302
  currency: "USD",
6306
6303
  unit: "per_million_tokens"
6307
6304
  }
@@ -6324,9 +6321,9 @@ var MODELS_BY_PROVIDER = {
6324
6321
  },
6325
6322
  supportsInterleaved: true,
6326
6323
  pricing: {
6327
- inputPerM: 0.66,
6328
- outputPerM: 3.41,
6329
- cacheReadPerM: 0.15,
6324
+ inputPerM: 0.95,
6325
+ outputPerM: 4,
6326
+ cacheReadPerM: 0.16,
6330
6327
  currency: "USD",
6331
6328
  unit: "per_million_tokens"
6332
6329
  }
@@ -6345,9 +6342,30 @@ var MODELS_BY_PROVIDER = {
6345
6342
  output: ["text"]
6346
6343
  },
6347
6344
  pricing: {
6348
- inputPerM: 0.72,
6349
- outputPerM: 3.49,
6350
- cacheReadPerM: 0.159,
6345
+ inputPerM: 0.75,
6346
+ outputPerM: 3.5,
6347
+ cacheReadPerM: 0.16,
6348
+ currency: "USD",
6349
+ unit: "per_million_tokens"
6350
+ }
6351
+ },
6352
+ {
6353
+ name: "moonshotai/kimi-k3",
6354
+ displayName: "Kimi K3",
6355
+ maxInputTokens: 1048576,
6356
+ supportedFileTypes: ["image"],
6357
+ reasoning: true,
6358
+ supportsTemperature: false,
6359
+ supportsToolCall: true,
6360
+ releaseDate: "2026-07-16",
6361
+ modalities: {
6362
+ input: ["text", "image"],
6363
+ output: ["text"]
6364
+ },
6365
+ pricing: {
6366
+ inputPerM: 3,
6367
+ outputPerM: 15,
6368
+ cacheReadPerM: 0.3,
6351
6369
  currency: "USD",
6352
6370
  unit: "per_million_tokens"
6353
6371
  }
@@ -6628,8 +6646,9 @@ var MODELS_BY_PROVIDER = {
6628
6646
  output: ["text"]
6629
6647
  },
6630
6648
  pricing: {
6631
- inputPerM: 0.08,
6632
- outputPerM: 0.45,
6649
+ inputPerM: 0.21,
6650
+ outputPerM: 0.455,
6651
+ cacheReadPerM: 0.06,
6633
6652
  currency: "USD",
6634
6653
  unit: "per_million_tokens"
6635
6654
  }
@@ -6668,9 +6687,9 @@ var MODELS_BY_PROVIDER = {
6668
6687
  output: ["text"]
6669
6688
  },
6670
6689
  pricing: {
6671
- inputPerM: 0.5,
6672
- outputPerM: 2.2,
6673
- cacheReadPerM: 0.1,
6690
+ inputPerM: 0.6,
6691
+ outputPerM: 3.6,
6692
+ cacheReadPerM: 0.2,
6674
6693
  currency: "USD",
6675
6694
  unit: "per_million_tokens"
6676
6695
  }
@@ -6974,6 +6993,7 @@ var MODELS_BY_PROVIDER = {
6974
6993
  pricing: {
6975
6994
  inputPerM: 2.5,
6976
6995
  outputPerM: 10,
6996
+ cacheReadPerM: 1.25,
6977
6997
  currency: "USD",
6978
6998
  unit: "per_million_tokens"
6979
6999
  }
@@ -7264,7 +7284,7 @@ var MODELS_BY_PROVIDER = {
7264
7284
  pricing: {
7265
7285
  inputPerM: 0.05,
7266
7286
  outputPerM: 0.4,
7267
- cacheReadPerM: 0.01,
7287
+ cacheReadPerM: 5e-3,
7268
7288
  currency: "USD",
7269
7289
  unit: "per_million_tokens"
7270
7290
  }
@@ -7305,7 +7325,7 @@ var MODELS_BY_PROVIDER = {
7305
7325
  pricing: {
7306
7326
  inputPerM: 1.25,
7307
7327
  outputPerM: 10,
7308
- cacheReadPerM: 0.13,
7328
+ cacheReadPerM: 0.125,
7309
7329
  currency: "USD",
7310
7330
  unit: "per_million_tokens"
7311
7331
  }
@@ -7326,7 +7346,7 @@ var MODELS_BY_PROVIDER = {
7326
7346
  pricing: {
7327
7347
  inputPerM: 1.25,
7328
7348
  outputPerM: 10,
7329
- cacheReadPerM: 0.13,
7349
+ cacheReadPerM: 0.125,
7330
7350
  currency: "USD",
7331
7351
  unit: "per_million_tokens"
7332
7352
  }
@@ -7347,7 +7367,7 @@ var MODELS_BY_PROVIDER = {
7347
7367
  pricing: {
7348
7368
  inputPerM: 1.25,
7349
7369
  outputPerM: 10,
7350
- cacheReadPerM: 0.13,
7370
+ cacheReadPerM: 0.125,
7351
7371
  currency: "USD",
7352
7372
  unit: "per_million_tokens"
7353
7373
  }
@@ -7871,28 +7891,8 @@ var MODELS_BY_PROVIDER = {
7871
7891
  output: ["text"]
7872
7892
  },
7873
7893
  pricing: {
7874
- inputPerM: 0.036,
7875
- outputPerM: 0.18,
7876
- currency: "USD",
7877
- unit: "per_million_tokens"
7878
- }
7879
- },
7880
- {
7881
- name: "openai/gpt-oss-120b:free",
7882
- displayName: "gpt-oss-120b (free)",
7883
- maxInputTokens: 131072,
7884
- supportedFileTypes: [],
7885
- reasoning: true,
7886
- supportsTemperature: true,
7887
- supportsToolCall: true,
7888
- releaseDate: "2025-08-05",
7889
- modalities: {
7890
- input: ["text"],
7891
- output: ["text"]
7892
- },
7893
- pricing: {
7894
- inputPerM: 0,
7895
- outputPerM: 0,
7894
+ inputPerM: 0.037,
7895
+ outputPerM: 0.17,
7896
7896
  currency: "USD",
7897
7897
  unit: "per_million_tokens"
7898
7898
  }
@@ -7911,8 +7911,9 @@ var MODELS_BY_PROVIDER = {
7911
7911
  output: ["text"]
7912
7912
  },
7913
7913
  pricing: {
7914
- inputPerM: 0.029,
7915
- outputPerM: 0.14,
7914
+ inputPerM: 0.03,
7915
+ outputPerM: 0.13,
7916
+ cacheReadPerM: 0.03,
7916
7917
  currency: "USD",
7917
7918
  unit: "per_million_tokens"
7918
7919
  }
@@ -8648,7 +8649,7 @@ var MODELS_BY_PROVIDER = {
8648
8649
  },
8649
8650
  pricing: {
8650
8651
  inputPerM: 0.09,
8651
- outputPerM: 0.1,
8652
+ outputPerM: 0.55,
8652
8653
  currency: "USD",
8653
8654
  unit: "per_million_tokens"
8654
8655
  }
@@ -8696,7 +8697,7 @@ var MODELS_BY_PROVIDER = {
8696
8697
  {
8697
8698
  name: "qwen/qwen3-30b-a3b-instruct-2507",
8698
8699
  displayName: "Qwen3 30B A3B Instruct 2507",
8699
- maxInputTokens: 131072,
8700
+ maxInputTokens: 262144,
8700
8701
  supportedFileTypes: [],
8701
8702
  reasoning: false,
8702
8703
  supportsTemperature: true,
@@ -8707,8 +8708,8 @@ var MODELS_BY_PROVIDER = {
8707
8708
  output: ["text"]
8708
8709
  },
8709
8710
  pricing: {
8710
- inputPerM: 0.04815,
8711
- outputPerM: 0.19305,
8711
+ inputPerM: 0.1,
8712
+ outputPerM: 0.3,
8712
8713
  currency: "USD",
8713
8714
  unit: "per_million_tokens"
8714
8715
  }
@@ -8787,8 +8788,9 @@ var MODELS_BY_PROVIDER = {
8787
8788
  output: ["text"]
8788
8789
  },
8789
8790
  pricing: {
8790
- inputPerM: 0.22,
8791
- outputPerM: 1.8,
8791
+ inputPerM: 0.3,
8792
+ outputPerM: 1,
8793
+ cacheReadPerM: 0.1,
8792
8794
  currency: "USD",
8793
8795
  unit: "per_million_tokens"
8794
8796
  }
@@ -8954,8 +8956,9 @@ var MODELS_BY_PROVIDER = {
8954
8956
  output: ["text"]
8955
8957
  },
8956
8958
  pricing: {
8957
- inputPerM: 0.09,
8959
+ inputPerM: 0.1,
8958
8960
  outputPerM: 1.1,
8961
+ cacheReadPerM: 0.07,
8959
8962
  currency: "USD",
8960
8963
  unit: "per_million_tokens"
8961
8964
  }
@@ -9003,7 +9006,7 @@ var MODELS_BY_PROVIDER = {
9003
9006
  {
9004
9007
  name: "qwen/qwen3-vl-235b-a22b-instruct",
9005
9008
  displayName: "Qwen3 VL 235B A22B Instruct",
9006
- maxInputTokens: 262144,
9009
+ maxInputTokens: 131072,
9007
9010
  supportedFileTypes: ["image"],
9008
9011
  reasoning: false,
9009
9012
  supportsTemperature: true,
@@ -9014,9 +9017,9 @@ var MODELS_BY_PROVIDER = {
9014
9017
  output: ["text"]
9015
9018
  },
9016
9019
  pricing: {
9017
- inputPerM: 0.2,
9018
- outputPerM: 0.88,
9019
- cacheReadPerM: 0.11,
9020
+ inputPerM: 0.21,
9021
+ outputPerM: 1.9,
9022
+ cacheReadPerM: 0.1,
9020
9023
  currency: "USD",
9021
9024
  unit: "per_million_tokens"
9022
9025
  }
@@ -9197,7 +9200,6 @@ var MODELS_BY_PROVIDER = {
9197
9200
  pricing: {
9198
9201
  inputPerM: 0.14,
9199
9202
  outputPerM: 1,
9200
- cacheReadPerM: 0.05,
9201
9203
  currency: "USD",
9202
9204
  unit: "per_million_tokens"
9203
9205
  }
@@ -9205,7 +9207,7 @@ var MODELS_BY_PROVIDER = {
9205
9207
  {
9206
9208
  name: "qwen/qwen3.5-397b-a17b",
9207
9209
  displayName: "Qwen3.5 397B-A17B",
9208
- maxInputTokens: 256e3,
9210
+ maxInputTokens: 262144,
9209
9211
  supportedFileTypes: ["image", "video"],
9210
9212
  reasoning: true,
9211
9213
  supportsTemperature: true,
@@ -9216,9 +9218,9 @@ var MODELS_BY_PROVIDER = {
9216
9218
  output: ["text"]
9217
9219
  },
9218
9220
  pricing: {
9219
- inputPerM: 0.385,
9220
- outputPerM: 2.45,
9221
- cacheReadPerM: 0.111,
9221
+ inputPerM: 0.45,
9222
+ outputPerM: 3,
9223
+ cacheReadPerM: 0.225,
9222
9224
  currency: "USD",
9223
9225
  unit: "per_million_tokens"
9224
9226
  }
@@ -9318,9 +9320,8 @@ var MODELS_BY_PROVIDER = {
9318
9320
  output: ["text"]
9319
9321
  },
9320
9322
  pricing: {
9321
- inputPerM: 0.285,
9322
- outputPerM: 2.4,
9323
- cacheReadPerM: 0.15,
9323
+ inputPerM: 0.45,
9324
+ outputPerM: 2.7,
9324
9325
  currency: "USD",
9325
9326
  unit: "per_million_tokens"
9326
9327
  }
@@ -9422,10 +9423,10 @@ var MODELS_BY_PROVIDER = {
9422
9423
  output: ["text"]
9423
9424
  },
9424
9425
  pricing: {
9425
- inputPerM: 1.25,
9426
- outputPerM: 3.75,
9427
- cacheReadPerM: 0.25,
9428
- cacheWritePerM: 1.5625,
9426
+ inputPerM: 1.475,
9427
+ outputPerM: 4.425,
9428
+ cacheReadPerM: 0.295,
9429
+ cacheWritePerM: 1.84375,
9429
9430
  currency: "USD",
9430
9431
  unit: "per_million_tokens"
9431
9432
  }
@@ -9573,26 +9574,6 @@ var MODELS_BY_PROVIDER = {
9573
9574
  unit: "per_million_tokens"
9574
9575
  }
9575
9576
  },
9576
- {
9577
- name: "sao10k/l3.1-70b-hanami-x1",
9578
- displayName: "Llama 3.1 70B Hanami x1",
9579
- maxInputTokens: 16e3,
9580
- supportedFileTypes: [],
9581
- reasoning: false,
9582
- supportsTemperature: true,
9583
- supportsToolCall: false,
9584
- releaseDate: "2025-01-08",
9585
- modalities: {
9586
- input: ["text"],
9587
- output: ["text"]
9588
- },
9589
- pricing: {
9590
- inputPerM: 3,
9591
- outputPerM: 3,
9592
- currency: "USD",
9593
- unit: "per_million_tokens"
9594
- }
9595
- },
9596
9577
  {
9597
9578
  name: "sao10k/l3.1-euryale-70b",
9598
9579
  displayName: "Llama 3.1 Euryale 70B v2.2",
@@ -9708,9 +9689,9 @@ var MODELS_BY_PROVIDER = {
9708
9689
  output: ["text"]
9709
9690
  },
9710
9691
  pricing: {
9711
- inputPerM: 0.14,
9712
- outputPerM: 0.58,
9713
- cacheReadPerM: 0.035,
9692
+ inputPerM: 0.2,
9693
+ outputPerM: 0.8,
9694
+ cacheReadPerM: 0.05,
9714
9695
  currency: "USD",
9715
9696
  unit: "per_million_tokens"
9716
9697
  }
@@ -10030,9 +10011,9 @@ var MODELS_BY_PROVIDER = {
10030
10011
  },
10031
10012
  supportsInterleaved: true,
10032
10013
  pricing: {
10033
- inputPerM: 0.105,
10014
+ inputPerM: 0.14,
10034
10015
  outputPerM: 0.28,
10035
- cacheReadPerM: 0.028,
10016
+ cacheReadPerM: 28e-4,
10036
10017
  currency: "USD",
10037
10018
  unit: "per_million_tokens"
10038
10019
  }
@@ -10139,9 +10120,9 @@ var MODELS_BY_PROVIDER = {
10139
10120
  output: ["text"]
10140
10121
  },
10141
10122
  pricing: {
10142
- inputPerM: 0.43,
10143
- outputPerM: 1.74,
10144
- cacheReadPerM: 0.08,
10123
+ inputPerM: 0.5,
10124
+ outputPerM: 2,
10125
+ cacheReadPerM: 0.1,
10145
10126
  currency: "USD",
10146
10127
  unit: "per_million_tokens"
10147
10128
  }
@@ -10195,7 +10176,7 @@ var MODELS_BY_PROVIDER = {
10195
10176
  {
10196
10177
  name: "z-ai/glm-4.7-flash",
10197
10178
  displayName: "GLM-4.7-Flash",
10198
- maxInputTokens: 202752,
10179
+ maxInputTokens: 2e5,
10199
10180
  supportedFileTypes: [],
10200
10181
  reasoning: true,
10201
10182
  supportsTemperature: true,
@@ -10210,9 +10191,8 @@ var MODELS_BY_PROVIDER = {
10210
10191
  },
10211
10192
  supportsInterleaved: true,
10212
10193
  pricing: {
10213
- inputPerM: 0.06,
10194
+ inputPerM: 0.0605,
10214
10195
  outputPerM: 0.4,
10215
- cacheReadPerM: 0.01,
10216
10196
  currency: "USD",
10217
10197
  unit: "per_million_tokens"
10218
10198
  }
@@ -10235,9 +10215,9 @@ var MODELS_BY_PROVIDER = {
10235
10215
  },
10236
10216
  supportsInterleaved: true,
10237
10217
  pricing: {
10238
- inputPerM: 0.6,
10239
- outputPerM: 1.92,
10240
- cacheReadPerM: 0.12,
10218
+ inputPerM: 0.95,
10219
+ outputPerM: 3.15,
10220
+ cacheReadPerM: 0.19,
10241
10221
  currency: "USD",
10242
10222
  unit: "per_million_tokens"
10243
10223
  }
@@ -10245,7 +10225,7 @@ var MODELS_BY_PROVIDER = {
10245
10225
  {
10246
10226
  name: "z-ai/glm-5-turbo",
10247
10227
  displayName: "GLM-5-Turbo",
10248
- maxInputTokens: 262144,
10228
+ maxInputTokens: 202752,
10249
10229
  supportedFileTypes: [],
10250
10230
  reasoning: true,
10251
10231
  supportsTemperature: true,
@@ -10310,9 +10290,9 @@ var MODELS_BY_PROVIDER = {
10310
10290
  },
10311
10291
  supportsInterleaved: true,
10312
10292
  pricing: {
10313
- inputPerM: 0.54,
10314
- outputPerM: 1.76,
10315
- cacheReadPerM: 0.1,
10293
+ inputPerM: 0.9338,
10294
+ outputPerM: 2.9348,
10295
+ cacheReadPerM: 0.17342,
10316
10296
  currency: "USD",
10317
10297
  unit: "per_million_tokens"
10318
10298
  }
@@ -10733,6 +10713,26 @@ var MODELS_BY_PROVIDER = {
10733
10713
  unit: "per_million_tokens"
10734
10714
  }
10735
10715
  },
10716
+ {
10717
+ name: "gemini-2.5-flash-image",
10718
+ displayName: "Nano Banana",
10719
+ maxInputTokens: 32768,
10720
+ supportedFileTypes: ["image", "document"],
10721
+ reasoning: false,
10722
+ supportsTemperature: true,
10723
+ supportsToolCall: false,
10724
+ releaseDate: "2025-08-26",
10725
+ modalities: {
10726
+ input: ["text", "image"],
10727
+ output: ["text", "image"]
10728
+ },
10729
+ pricing: {
10730
+ inputPerM: 0.3,
10731
+ outputPerM: 30,
10732
+ currency: "USD",
10733
+ unit: "per_million_tokens"
10734
+ }
10735
+ },
10736
10736
  {
10737
10737
  name: "gemini-2.5-flash-lite",
10738
10738
  displayName: "Gemini 2.5 Flash-Lite",
@@ -10843,6 +10843,46 @@ var MODELS_BY_PROVIDER = {
10843
10843
  },
10844
10844
  default: true
10845
10845
  },
10846
+ {
10847
+ name: "gemini-3-pro-image",
10848
+ displayName: "Nano Banana Pro",
10849
+ maxInputTokens: 65536,
10850
+ supportedFileTypes: ["image", "document"],
10851
+ reasoning: true,
10852
+ supportsTemperature: true,
10853
+ supportsToolCall: false,
10854
+ releaseDate: "2026-05-28",
10855
+ modalities: {
10856
+ input: ["text", "image"],
10857
+ output: ["text", "image"]
10858
+ },
10859
+ pricing: {
10860
+ inputPerM: 2,
10861
+ outputPerM: 120,
10862
+ currency: "USD",
10863
+ unit: "per_million_tokens"
10864
+ }
10865
+ },
10866
+ {
10867
+ name: "gemini-3.1-flash-image",
10868
+ displayName: "Nano Banana 2",
10869
+ maxInputTokens: 131072,
10870
+ supportedFileTypes: ["pdf", "image", "video", "document"],
10871
+ reasoning: true,
10872
+ supportsTemperature: true,
10873
+ supportsToolCall: false,
10874
+ releaseDate: "2026-05-28",
10875
+ modalities: {
10876
+ input: ["text", "image", "video", "pdf"],
10877
+ output: ["text", "image"]
10878
+ },
10879
+ pricing: {
10880
+ inputPerM: 0.5,
10881
+ outputPerM: 60,
10882
+ currency: "USD",
10883
+ unit: "per_million_tokens"
10884
+ }
10885
+ },
10846
10886
  {
10847
10887
  name: "gemini-3.1-flash-lite",
10848
10888
  displayName: "Gemini 3.1 Flash Lite",
@@ -10988,16 +11028,16 @@ var MODELS_BY_PROVIDER = {
10988
11028
  reasoning: true,
10989
11029
  supportsTemperature: true,
10990
11030
  supportsToolCall: true,
10991
- releaseDate: "2025-09-25",
11031
+ releaseDate: "2026-05-19",
10992
11032
  modalities: {
10993
- input: ["text", "image", "audio", "video", "pdf"],
11033
+ input: ["text", "image", "video", "audio", "pdf"],
10994
11034
  output: ["text"]
10995
11035
  },
10996
11036
  pricing: {
10997
- inputPerM: 0.3,
10998
- outputPerM: 2.5,
10999
- cacheReadPerM: 0.075,
11000
- cacheWritePerM: 0.383,
11037
+ inputPerM: 1.5,
11038
+ outputPerM: 9,
11039
+ cacheReadPerM: 0.15,
11040
+ inputAudioPerM: 1.5,
11001
11041
  currency: "USD",
11002
11042
  unit: "per_million_tokens"
11003
11043
  }
@@ -11010,15 +11050,16 @@ var MODELS_BY_PROVIDER = {
11010
11050
  reasoning: true,
11011
11051
  supportsTemperature: true,
11012
11052
  supportsToolCall: true,
11013
- releaseDate: "2025-09-25",
11053
+ releaseDate: "2026-05-07",
11014
11054
  modalities: {
11015
- input: ["text", "image", "audio", "video", "pdf"],
11055
+ input: ["text", "image", "video", "audio", "pdf"],
11016
11056
  output: ["text"]
11017
11057
  },
11018
11058
  pricing: {
11019
- inputPerM: 0.1,
11020
- outputPerM: 0.4,
11059
+ inputPerM: 0.25,
11060
+ outputPerM: 1.5,
11021
11061
  cacheReadPerM: 0.025,
11062
+ inputAudioPerM: 0.5,
11022
11063
  currency: "USD",
11023
11064
  unit: "per_million_tokens"
11024
11065
  }
@@ -12820,6 +12861,84 @@ var MODELS_BY_PROVIDER = {
12820
12861
  unit: "per_million_tokens"
12821
12862
  }
12822
12863
  },
12864
+ {
12865
+ name: "openai.gpt-5.6-luna",
12866
+ displayName: "GPT-5.6 Luna",
12867
+ maxInputTokens: 272e3,
12868
+ supportedFileTypes: ["pdf", "image"],
12869
+ reasoning: true,
12870
+ supportsTemperature: false,
12871
+ supportsToolCall: true,
12872
+ releaseDate: "2026-07-09",
12873
+ modalities: {
12874
+ input: ["text", "image", "pdf"],
12875
+ output: ["text"]
12876
+ },
12877
+ providerMetadata: {
12878
+ npm: "@ai-sdk/amazon-bedrock/mantle",
12879
+ api: "https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1"
12880
+ },
12881
+ pricing: {
12882
+ inputPerM: 1,
12883
+ outputPerM: 6,
12884
+ cacheReadPerM: 0.1,
12885
+ cacheWritePerM: 1.25,
12886
+ currency: "USD",
12887
+ unit: "per_million_tokens"
12888
+ }
12889
+ },
12890
+ {
12891
+ name: "openai.gpt-5.6-sol",
12892
+ displayName: "GPT-5.6 Sol",
12893
+ maxInputTokens: 272e3,
12894
+ supportedFileTypes: ["pdf", "image"],
12895
+ reasoning: true,
12896
+ supportsTemperature: false,
12897
+ supportsToolCall: true,
12898
+ releaseDate: "2026-07-09",
12899
+ modalities: {
12900
+ input: ["text", "image", "pdf"],
12901
+ output: ["text"]
12902
+ },
12903
+ providerMetadata: {
12904
+ npm: "@ai-sdk/amazon-bedrock/mantle",
12905
+ api: "https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1"
12906
+ },
12907
+ pricing: {
12908
+ inputPerM: 5,
12909
+ outputPerM: 30,
12910
+ cacheReadPerM: 0.5,
12911
+ cacheWritePerM: 6.25,
12912
+ currency: "USD",
12913
+ unit: "per_million_tokens"
12914
+ }
12915
+ },
12916
+ {
12917
+ name: "openai.gpt-5.6-terra",
12918
+ displayName: "GPT-5.6 Terra",
12919
+ maxInputTokens: 272e3,
12920
+ supportedFileTypes: ["pdf", "image"],
12921
+ reasoning: true,
12922
+ supportsTemperature: false,
12923
+ supportsToolCall: true,
12924
+ releaseDate: "2026-07-09",
12925
+ modalities: {
12926
+ input: ["text", "image", "pdf"],
12927
+ output: ["text"]
12928
+ },
12929
+ providerMetadata: {
12930
+ npm: "@ai-sdk/amazon-bedrock/mantle",
12931
+ api: "https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1"
12932
+ },
12933
+ pricing: {
12934
+ inputPerM: 2.5,
12935
+ outputPerM: 15,
12936
+ cacheReadPerM: 0.25,
12937
+ cacheWritePerM: 3.125,
12938
+ currency: "USD",
12939
+ unit: "per_million_tokens"
12940
+ }
12941
+ },
12823
12942
  {
12824
12943
  name: "openai.gpt-oss-120b",
12825
12944
  displayName: "gpt-oss-120b",
@@ -13635,6 +13754,10 @@ var MODELS_BY_PROVIDER = {
13635
13754
  cacheReadPerM: 0.2,
13636
13755
  cacheWritePerM: 0.375,
13637
13756
  reasoningPerM: 12,
13757
+ contextOver200kPerM: {
13758
+ inputPerM: 4,
13759
+ outputPerM: 18
13760
+ },
13638
13761
  currency: "USD",
13639
13762
  unit: "per_million_tokens"
13640
13763
  }
@@ -13642,10 +13765,10 @@ var MODELS_BY_PROVIDER = {
13642
13765
  {
13643
13766
  name: "~moonshotai/kimi-latest",
13644
13767
  displayName: "MoonshotAI Kimi Latest",
13645
- maxInputTokens: 262144,
13768
+ maxInputTokens: 1048576,
13646
13769
  supportedFileTypes: ["image"],
13647
13770
  reasoning: true,
13648
- supportsTemperature: true,
13771
+ supportsTemperature: false,
13649
13772
  supportsToolCall: true,
13650
13773
  releaseDate: "2026-04-27",
13651
13774
  modalities: {
@@ -13653,9 +13776,9 @@ var MODELS_BY_PROVIDER = {
13653
13776
  output: ["text"]
13654
13777
  },
13655
13778
  pricing: {
13656
- inputPerM: 0.66,
13657
- outputPerM: 3.41,
13658
- cacheReadPerM: 0.15,
13779
+ inputPerM: 3,
13780
+ outputPerM: 15,
13781
+ cacheReadPerM: 0.3,
13659
13782
  currency: "USD",
13660
13783
  unit: "per_million_tokens"
13661
13784
  }
@@ -14160,7 +14283,7 @@ var MODELS_BY_PROVIDER = {
14160
14283
  reasoning: true,
14161
14284
  supportsTemperature: false,
14162
14285
  supportsToolCall: true,
14163
- releaseDate: "2026-05-12",
14286
+ releaseDate: "2026-04-16",
14164
14287
  modalities: {
14165
14288
  input: ["text", "image", "pdf"],
14166
14289
  output: ["text"]
@@ -14204,7 +14327,7 @@ var MODELS_BY_PROVIDER = {
14204
14327
  reasoning: true,
14205
14328
  supportsTemperature: false,
14206
14329
  supportsToolCall: true,
14207
- releaseDate: "2026-05-27",
14330
+ releaseDate: "2026-05-28",
14208
14331
  modalities: {
14209
14332
  input: ["text", "image", "pdf"],
14210
14333
  output: ["text"]
@@ -14318,26 +14441,6 @@ var MODELS_BY_PROVIDER = {
14318
14441
  unit: "per_million_tokens"
14319
14442
  }
14320
14443
  },
14321
- {
14322
- name: "arcee-ai/coder-large",
14323
- displayName: "Coder Large",
14324
- maxInputTokens: 32768,
14325
- supportedFileTypes: [],
14326
- reasoning: false,
14327
- supportsTemperature: true,
14328
- supportsToolCall: false,
14329
- releaseDate: "2025-05-05",
14330
- modalities: {
14331
- input: ["text"],
14332
- output: ["text"]
14333
- },
14334
- pricing: {
14335
- inputPerM: 0.5,
14336
- outputPerM: 0.8,
14337
- currency: "USD",
14338
- unit: "per_million_tokens"
14339
- }
14340
- },
14341
14444
  {
14342
14445
  name: "arcee-ai/trinity-large-thinking",
14343
14446
  displayName: "Trinity Large Thinking",
@@ -14359,26 +14462,6 @@ var MODELS_BY_PROVIDER = {
14359
14462
  unit: "per_million_tokens"
14360
14463
  }
14361
14464
  },
14362
- {
14363
- name: "arcee-ai/trinity-mini",
14364
- displayName: "Trinity Mini",
14365
- maxInputTokens: 131072,
14366
- supportedFileTypes: [],
14367
- reasoning: true,
14368
- supportsTemperature: true,
14369
- supportsToolCall: true,
14370
- releaseDate: "2025-12-01",
14371
- modalities: {
14372
- input: ["text"],
14373
- output: ["text"]
14374
- },
14375
- pricing: {
14376
- inputPerM: 0.045,
14377
- outputPerM: 0.15,
14378
- currency: "USD",
14379
- unit: "per_million_tokens"
14380
- }
14381
- },
14382
14465
  {
14383
14466
  name: "arcee-ai/virtuoso-large",
14384
14467
  displayName: "Virtuoso Large",
@@ -14714,8 +14797,8 @@ var MODELS_BY_PROVIDER = {
14714
14797
  output: ["text"]
14715
14798
  },
14716
14799
  pricing: {
14717
- inputPerM: 0.24,
14718
- outputPerM: 0.9,
14800
+ inputPerM: 0.27,
14801
+ outputPerM: 1.12,
14719
14802
  cacheReadPerM: 0.135,
14720
14803
  currency: "USD",
14721
14804
  unit: "per_million_tokens"
@@ -14735,8 +14818,8 @@ var MODELS_BY_PROVIDER = {
14735
14818
  output: ["text"]
14736
14819
  },
14737
14820
  pricing: {
14738
- inputPerM: 0.21,
14739
- outputPerM: 0.79,
14821
+ inputPerM: 0.25,
14822
+ outputPerM: 0.95,
14740
14823
  cacheReadPerM: 0.13,
14741
14824
  currency: "USD",
14742
14825
  unit: "per_million_tokens"
@@ -14806,7 +14889,7 @@ var MODELS_BY_PROVIDER = {
14806
14889
  {
14807
14890
  name: "deepseek/deepseek-v3.1-terminus",
14808
14891
  displayName: "DeepSeek V3.1 Terminus",
14809
- maxInputTokens: 163840,
14892
+ maxInputTokens: 131072,
14810
14893
  supportedFileTypes: [],
14811
14894
  reasoning: true,
14812
14895
  supportsTemperature: true,
@@ -14818,8 +14901,8 @@ var MODELS_BY_PROVIDER = {
14818
14901
  },
14819
14902
  pricing: {
14820
14903
  inputPerM: 0.27,
14821
- outputPerM: 0.95,
14822
- cacheReadPerM: 0.13,
14904
+ outputPerM: 1,
14905
+ cacheReadPerM: 0.135,
14823
14906
  currency: "USD",
14824
14907
  unit: "per_million_tokens"
14825
14908
  }
@@ -14827,7 +14910,7 @@ var MODELS_BY_PROVIDER = {
14827
14910
  {
14828
14911
  name: "deepseek/deepseek-v3.2",
14829
14912
  displayName: "DeepSeek V3.2",
14830
- maxInputTokens: 131072,
14913
+ maxInputTokens: 163840,
14831
14914
  supportedFileTypes: [],
14832
14915
  reasoning: true,
14833
14916
  supportsTemperature: true,
@@ -14838,9 +14921,9 @@ var MODELS_BY_PROVIDER = {
14838
14921
  output: ["text"]
14839
14922
  },
14840
14923
  pricing: {
14841
- inputPerM: 0.2288,
14842
- outputPerM: 0.3432,
14843
- cacheReadPerM: 0.02288,
14924
+ inputPerM: 0.269,
14925
+ outputPerM: 0.4,
14926
+ cacheReadPerM: 0.1345,
14844
14927
  currency: "USD",
14845
14928
  unit: "per_million_tokens"
14846
14929
  }
@@ -14883,9 +14966,9 @@ var MODELS_BY_PROVIDER = {
14883
14966
  },
14884
14967
  supportsInterleaved: true,
14885
14968
  pricing: {
14886
- inputPerM: 0.09,
14887
- outputPerM: 0.18,
14888
- cacheReadPerM: 0.018,
14969
+ inputPerM: 0.098,
14970
+ outputPerM: 0.196,
14971
+ cacheReadPerM: 0.02,
14889
14972
  currency: "USD",
14890
14973
  unit: "per_million_tokens"
14891
14974
  }
@@ -15081,16 +15164,16 @@ var MODELS_BY_PROVIDER = {
15081
15164
  },
15082
15165
  {
15083
15166
  name: "google/gemini-3-pro-image",
15084
- displayName: "Nano Banana Pro (Gemini 3 Pro Image)",
15167
+ displayName: "Nano Banana Pro",
15085
15168
  maxInputTokens: 65536,
15086
15169
  supportedFileTypes: ["image", "document"],
15087
15170
  reasoning: true,
15088
15171
  supportsTemperature: true,
15089
15172
  supportsToolCall: true,
15090
- releaseDate: "2026-06-18",
15173
+ releaseDate: "2026-05-28",
15091
15174
  modalities: {
15092
- input: ["image", "text"],
15093
- output: ["image", "text"]
15175
+ input: ["text", "image"],
15176
+ output: ["text", "image"]
15094
15177
  },
15095
15178
  pricing: {
15096
15179
  inputPerM: 2,
@@ -15127,16 +15210,16 @@ var MODELS_BY_PROVIDER = {
15127
15210
  },
15128
15211
  {
15129
15212
  name: "google/gemini-3.1-flash-image",
15130
- displayName: "Nano Banana 2 (Gemini 3.1 Flash Image)",
15213
+ displayName: "Nano Banana 2",
15131
15214
  maxInputTokens: 131072,
15132
15215
  supportedFileTypes: ["image", "document"],
15133
15216
  reasoning: true,
15134
15217
  supportsTemperature: true,
15135
15218
  supportsToolCall: false,
15136
- releaseDate: "2026-06-18",
15219
+ releaseDate: "2026-05-28",
15137
15220
  modalities: {
15138
- input: ["image", "text"],
15139
- output: ["image", "text"]
15221
+ input: ["text", "image"],
15222
+ output: ["text", "image"]
15140
15223
  },
15141
15224
  pricing: {
15142
15225
  inputPerM: 0.5,
@@ -15371,7 +15454,8 @@ var MODELS_BY_PROVIDER = {
15371
15454
  },
15372
15455
  pricing: {
15373
15456
  inputPerM: 0.08,
15374
- outputPerM: 0.16,
15457
+ outputPerM: 0.45,
15458
+ cacheReadPerM: 0.04,
15375
15459
  currency: "USD",
15376
15460
  unit: "per_million_tokens"
15377
15461
  }
@@ -15430,8 +15514,8 @@ var MODELS_BY_PROVIDER = {
15430
15514
  output: ["text"]
15431
15515
  },
15432
15516
  pricing: {
15433
- inputPerM: 0.06,
15434
- outputPerM: 0.33,
15517
+ inputPerM: 0.1,
15518
+ outputPerM: 0.3,
15435
15519
  currency: "USD",
15436
15520
  unit: "per_million_tokens"
15437
15521
  }
@@ -15470,9 +15554,9 @@ var MODELS_BY_PROVIDER = {
15470
15554
  output: ["text"]
15471
15555
  },
15472
15556
  pricing: {
15473
- inputPerM: 0.12,
15474
- outputPerM: 0.35,
15475
- cacheReadPerM: 0.09,
15557
+ inputPerM: 0.22,
15558
+ outputPerM: 0.55,
15559
+ cacheReadPerM: 0.12,
15476
15560
  currency: "USD",
15477
15561
  unit: "per_million_tokens"
15478
15562
  }
@@ -15723,62 +15807,64 @@ var MODELS_BY_PROVIDER = {
15723
15807
  }
15724
15808
  },
15725
15809
  {
15726
- name: "kwaipilot/kat-coder-pro-v2",
15727
- displayName: "KAT-Coder-Pro V2",
15810
+ name: "kwaipilot/kat-coder-air-v2.5",
15811
+ displayName: "KAT-Coder-Air V2.5",
15728
15812
  maxInputTokens: 256e3,
15729
15813
  supportedFileTypes: [],
15730
15814
  reasoning: false,
15731
15815
  supportsTemperature: true,
15732
15816
  supportsToolCall: true,
15733
- releaseDate: "2026-03-27",
15817
+ releaseDate: "2026-07-10",
15734
15818
  modalities: {
15735
15819
  input: ["text"],
15736
15820
  output: ["text"]
15737
15821
  },
15738
15822
  pricing: {
15739
- inputPerM: 0.3,
15740
- outputPerM: 1.2,
15741
- cacheReadPerM: 0.06,
15823
+ inputPerM: 0.15,
15824
+ outputPerM: 0.6,
15825
+ cacheReadPerM: 0.03,
15742
15826
  currency: "USD",
15743
15827
  unit: "per_million_tokens"
15744
15828
  }
15745
15829
  },
15746
15830
  {
15747
- name: "liquid/lfm-2.5-1.2b-instruct:free",
15748
- displayName: "LFM2.5-1.2B-Instruct (free)",
15749
- maxInputTokens: 32768,
15831
+ name: "kwaipilot/kat-coder-pro-v2",
15832
+ displayName: "KAT-Coder-Pro V2",
15833
+ maxInputTokens: 256e3,
15750
15834
  supportedFileTypes: [],
15751
15835
  reasoning: false,
15752
15836
  supportsTemperature: true,
15753
- supportsToolCall: false,
15754
- releaseDate: "2026-01-20",
15837
+ supportsToolCall: true,
15838
+ releaseDate: "2026-03-27",
15755
15839
  modalities: {
15756
15840
  input: ["text"],
15757
15841
  output: ["text"]
15758
15842
  },
15759
15843
  pricing: {
15760
- inputPerM: 0,
15761
- outputPerM: 0,
15844
+ inputPerM: 0.3,
15845
+ outputPerM: 1.2,
15846
+ cacheReadPerM: 0.06,
15762
15847
  currency: "USD",
15763
15848
  unit: "per_million_tokens"
15764
15849
  }
15765
15850
  },
15766
15851
  {
15767
- name: "liquid/lfm-2.5-1.2b-thinking:free",
15768
- displayName: "LFM2.5-1.2B-Thinking (free)",
15769
- maxInputTokens: 32768,
15852
+ name: "kwaipilot/kat-coder-pro-v2.5",
15853
+ displayName: "KAT-Coder-Pro V2.5",
15854
+ maxInputTokens: 256e3,
15770
15855
  supportedFileTypes: [],
15771
- reasoning: true,
15856
+ reasoning: false,
15772
15857
  supportsTemperature: true,
15773
15858
  supportsToolCall: true,
15774
- releaseDate: "2026-01-20",
15859
+ releaseDate: "2026-07-10",
15775
15860
  modalities: {
15776
15861
  input: ["text"],
15777
15862
  output: ["text"]
15778
15863
  },
15779
15864
  pricing: {
15780
- inputPerM: 0,
15781
- outputPerM: 0,
15865
+ inputPerM: 0.74,
15866
+ outputPerM: 2.96,
15867
+ cacheReadPerM: 0.15,
15782
15868
  currency: "USD",
15783
15869
  unit: "per_million_tokens"
15784
15870
  }
@@ -15803,26 +15889,6 @@ var MODELS_BY_PROVIDER = {
15803
15889
  unit: "per_million_tokens"
15804
15890
  }
15805
15891
  },
15806
- {
15807
- name: "meta-llama/llama-3-8b-instruct",
15808
- displayName: "Llama 3 8B Instruct",
15809
- maxInputTokens: 8192,
15810
- supportedFileTypes: [],
15811
- reasoning: false,
15812
- supportsTemperature: true,
15813
- supportsToolCall: false,
15814
- releaseDate: "2024-04-18",
15815
- modalities: {
15816
- input: ["text"],
15817
- output: ["text"]
15818
- },
15819
- pricing: {
15820
- inputPerM: 0.14,
15821
- outputPerM: 0.14,
15822
- currency: "USD",
15823
- unit: "per_million_tokens"
15824
- }
15825
- },
15826
15892
  {
15827
15893
  name: "meta-llama/llama-3.1-70b-instruct",
15828
15894
  displayName: "Llama 3.1 70B Instruct",
@@ -15857,8 +15923,9 @@ var MODELS_BY_PROVIDER = {
15857
15923
  output: ["text"]
15858
15924
  },
15859
15925
  pricing: {
15860
- inputPerM: 0.02,
15861
- outputPerM: 0.03,
15926
+ inputPerM: 0.05,
15927
+ outputPerM: 0.08,
15928
+ cacheReadPerM: 0.025,
15862
15929
  currency: "USD",
15863
15930
  unit: "per_million_tokens"
15864
15931
  }
@@ -15957,8 +16024,8 @@ var MODELS_BY_PROVIDER = {
15957
16024
  output: ["text"]
15958
16025
  },
15959
16026
  pricing: {
15960
- inputPerM: 0.1,
15961
- outputPerM: 0.32,
16027
+ inputPerM: 0.13,
16028
+ outputPerM: 0.4,
15962
16029
  currency: "USD",
15963
16030
  unit: "per_million_tokens"
15964
16031
  }
@@ -15997,8 +16064,8 @@ var MODELS_BY_PROVIDER = {
15997
16064
  output: ["text"]
15998
16065
  },
15999
16066
  pricing: {
16000
- inputPerM: 0.15,
16001
- outputPerM: 0.6,
16067
+ inputPerM: 0.2,
16068
+ outputPerM: 0.8,
16002
16069
  currency: "USD",
16003
16070
  unit: "per_million_tokens"
16004
16071
  }
@@ -16043,6 +16110,27 @@ var MODELS_BY_PROVIDER = {
16043
16110
  unit: "per_million_tokens"
16044
16111
  }
16045
16112
  },
16113
+ {
16114
+ name: "meta/muse-spark-1.1",
16115
+ displayName: "Muse Spark 1.1",
16116
+ maxInputTokens: 1048576,
16117
+ supportedFileTypes: ["pdf", "image", "audio", "video"],
16118
+ reasoning: true,
16119
+ supportsTemperature: true,
16120
+ supportsToolCall: true,
16121
+ releaseDate: "2026-04-08",
16122
+ modalities: {
16123
+ input: ["text", "image", "video", "pdf", "audio"],
16124
+ output: ["text"]
16125
+ },
16126
+ pricing: {
16127
+ inputPerM: 1.25,
16128
+ outputPerM: 4.25,
16129
+ cacheReadPerM: 0.15,
16130
+ currency: "USD",
16131
+ unit: "per_million_tokens"
16132
+ }
16133
+ },
16046
16134
  {
16047
16135
  name: "microsoft/phi-4",
16048
16136
  displayName: "Phi 4",
@@ -16117,7 +16205,7 @@ var MODELS_BY_PROVIDER = {
16117
16205
  output: ["text"]
16118
16206
  },
16119
16207
  pricing: {
16120
- inputPerM: 0.4,
16208
+ inputPerM: 0.55,
16121
16209
  outputPerM: 2.2,
16122
16210
  currency: "USD",
16123
16211
  unit: "per_million_tokens"
@@ -16232,8 +16320,9 @@ var MODELS_BY_PROVIDER = {
16232
16320
  output: ["text"]
16233
16321
  },
16234
16322
  pricing: {
16235
- inputPerM: 0.24,
16236
- outputPerM: 0.96,
16323
+ inputPerM: 0.3,
16324
+ outputPerM: 1.2,
16325
+ cacheReadPerM: 0.06,
16237
16326
  currency: "USD",
16238
16327
  unit: "per_million_tokens"
16239
16328
  }
@@ -16505,7 +16594,7 @@ var MODELS_BY_PROVIDER = {
16505
16594
  },
16506
16595
  pricing: {
16507
16596
  inputPerM: 0.02,
16508
- outputPerM: 0.03,
16597
+ outputPerM: 0.04,
16509
16598
  currency: "USD",
16510
16599
  unit: "per_million_tokens"
16511
16600
  }
@@ -16595,7 +16684,7 @@ var MODELS_BY_PROVIDER = {
16595
16684
  {
16596
16685
  name: "mistralai/mistral-small-3.2-24b-instruct",
16597
16686
  displayName: "Mistral Small 3.2 24B",
16598
- maxInputTokens: 128e3,
16687
+ maxInputTokens: 131072,
16599
16688
  supportedFileTypes: ["image"],
16600
16689
  reasoning: false,
16601
16690
  supportsTemperature: true,
@@ -16606,8 +16695,9 @@ var MODELS_BY_PROVIDER = {
16606
16695
  output: ["text"]
16607
16696
  },
16608
16697
  pricing: {
16609
- inputPerM: 0.075,
16610
- outputPerM: 0.2,
16698
+ inputPerM: 0.1,
16699
+ outputPerM: 0.3,
16700
+ cacheReadPerM: 0.01,
16611
16701
  currency: "USD",
16612
16702
  unit: "per_million_tokens"
16613
16703
  }
@@ -16714,7 +16804,6 @@ var MODELS_BY_PROVIDER = {
16714
16804
  pricing: {
16715
16805
  inputPerM: 0.6,
16716
16806
  outputPerM: 2.5,
16717
- cacheReadPerM: 0.15,
16718
16807
  currency: "USD",
16719
16808
  unit: "per_million_tokens"
16720
16809
  }
@@ -16737,9 +16826,9 @@ var MODELS_BY_PROVIDER = {
16737
16826
  },
16738
16827
  supportsInterleaved: true,
16739
16828
  pricing: {
16740
- inputPerM: 0.375,
16741
- outputPerM: 2.025,
16742
- cacheReadPerM: 0.203,
16829
+ inputPerM: 0.57,
16830
+ outputPerM: 2.85,
16831
+ cacheReadPerM: 0.095,
16743
16832
  currency: "USD",
16744
16833
  unit: "per_million_tokens"
16745
16834
  }
@@ -16762,9 +16851,9 @@ var MODELS_BY_PROVIDER = {
16762
16851
  },
16763
16852
  supportsInterleaved: true,
16764
16853
  pricing: {
16765
- inputPerM: 0.66,
16766
- outputPerM: 3.41,
16767
- cacheReadPerM: 0.15,
16854
+ inputPerM: 0.95,
16855
+ outputPerM: 4,
16856
+ cacheReadPerM: 0.16,
16768
16857
  currency: "USD",
16769
16858
  unit: "per_million_tokens"
16770
16859
  }
@@ -16783,9 +16872,30 @@ var MODELS_BY_PROVIDER = {
16783
16872
  output: ["text"]
16784
16873
  },
16785
16874
  pricing: {
16786
- inputPerM: 0.72,
16787
- outputPerM: 3.49,
16788
- cacheReadPerM: 0.159,
16875
+ inputPerM: 0.75,
16876
+ outputPerM: 3.5,
16877
+ cacheReadPerM: 0.16,
16878
+ currency: "USD",
16879
+ unit: "per_million_tokens"
16880
+ }
16881
+ },
16882
+ {
16883
+ name: "moonshotai/kimi-k3",
16884
+ displayName: "Kimi K3",
16885
+ maxInputTokens: 1048576,
16886
+ supportedFileTypes: ["image"],
16887
+ reasoning: true,
16888
+ supportsTemperature: false,
16889
+ supportsToolCall: true,
16890
+ releaseDate: "2026-07-16",
16891
+ modalities: {
16892
+ input: ["text", "image"],
16893
+ output: ["text"]
16894
+ },
16895
+ pricing: {
16896
+ inputPerM: 3,
16897
+ outputPerM: 15,
16898
+ cacheReadPerM: 0.3,
16789
16899
  currency: "USD",
16790
16900
  unit: "per_million_tokens"
16791
16901
  }
@@ -17066,8 +17176,9 @@ var MODELS_BY_PROVIDER = {
17066
17176
  output: ["text"]
17067
17177
  },
17068
17178
  pricing: {
17069
- inputPerM: 0.08,
17070
- outputPerM: 0.45,
17179
+ inputPerM: 0.21,
17180
+ outputPerM: 0.455,
17181
+ cacheReadPerM: 0.06,
17071
17182
  currency: "USD",
17072
17183
  unit: "per_million_tokens"
17073
17184
  }
@@ -17106,9 +17217,9 @@ var MODELS_BY_PROVIDER = {
17106
17217
  output: ["text"]
17107
17218
  },
17108
17219
  pricing: {
17109
- inputPerM: 0.5,
17110
- outputPerM: 2.2,
17111
- cacheReadPerM: 0.1,
17220
+ inputPerM: 0.6,
17221
+ outputPerM: 3.6,
17222
+ cacheReadPerM: 0.2,
17112
17223
  currency: "USD",
17113
17224
  unit: "per_million_tokens"
17114
17225
  }
@@ -17412,6 +17523,7 @@ var MODELS_BY_PROVIDER = {
17412
17523
  pricing: {
17413
17524
  inputPerM: 2.5,
17414
17525
  outputPerM: 10,
17526
+ cacheReadPerM: 1.25,
17415
17527
  currency: "USD",
17416
17528
  unit: "per_million_tokens"
17417
17529
  }
@@ -17702,7 +17814,7 @@ var MODELS_BY_PROVIDER = {
17702
17814
  pricing: {
17703
17815
  inputPerM: 0.05,
17704
17816
  outputPerM: 0.4,
17705
- cacheReadPerM: 0.01,
17817
+ cacheReadPerM: 5e-3,
17706
17818
  currency: "USD",
17707
17819
  unit: "per_million_tokens"
17708
17820
  }
@@ -17743,7 +17855,7 @@ var MODELS_BY_PROVIDER = {
17743
17855
  pricing: {
17744
17856
  inputPerM: 1.25,
17745
17857
  outputPerM: 10,
17746
- cacheReadPerM: 0.13,
17858
+ cacheReadPerM: 0.125,
17747
17859
  currency: "USD",
17748
17860
  unit: "per_million_tokens"
17749
17861
  }
@@ -17764,7 +17876,7 @@ var MODELS_BY_PROVIDER = {
17764
17876
  pricing: {
17765
17877
  inputPerM: 1.25,
17766
17878
  outputPerM: 10,
17767
- cacheReadPerM: 0.13,
17879
+ cacheReadPerM: 0.125,
17768
17880
  currency: "USD",
17769
17881
  unit: "per_million_tokens"
17770
17882
  }
@@ -17785,7 +17897,7 @@ var MODELS_BY_PROVIDER = {
17785
17897
  pricing: {
17786
17898
  inputPerM: 1.25,
17787
17899
  outputPerM: 10,
17788
- cacheReadPerM: 0.13,
17900
+ cacheReadPerM: 0.125,
17789
17901
  currency: "USD",
17790
17902
  unit: "per_million_tokens"
17791
17903
  }
@@ -18309,28 +18421,8 @@ var MODELS_BY_PROVIDER = {
18309
18421
  output: ["text"]
18310
18422
  },
18311
18423
  pricing: {
18312
- inputPerM: 0.036,
18313
- outputPerM: 0.18,
18314
- currency: "USD",
18315
- unit: "per_million_tokens"
18316
- }
18317
- },
18318
- {
18319
- name: "openai/gpt-oss-120b:free",
18320
- displayName: "gpt-oss-120b (free)",
18321
- maxInputTokens: 131072,
18322
- supportedFileTypes: [],
18323
- reasoning: true,
18324
- supportsTemperature: true,
18325
- supportsToolCall: true,
18326
- releaseDate: "2025-08-05",
18327
- modalities: {
18328
- input: ["text"],
18329
- output: ["text"]
18330
- },
18331
- pricing: {
18332
- inputPerM: 0,
18333
- outputPerM: 0,
18424
+ inputPerM: 0.037,
18425
+ outputPerM: 0.17,
18334
18426
  currency: "USD",
18335
18427
  unit: "per_million_tokens"
18336
18428
  }
@@ -18349,8 +18441,9 @@ var MODELS_BY_PROVIDER = {
18349
18441
  output: ["text"]
18350
18442
  },
18351
18443
  pricing: {
18352
- inputPerM: 0.029,
18353
- outputPerM: 0.14,
18444
+ inputPerM: 0.03,
18445
+ outputPerM: 0.13,
18446
+ cacheReadPerM: 0.03,
18354
18447
  currency: "USD",
18355
18448
  unit: "per_million_tokens"
18356
18449
  }
@@ -19086,7 +19179,7 @@ var MODELS_BY_PROVIDER = {
19086
19179
  },
19087
19180
  pricing: {
19088
19181
  inputPerM: 0.09,
19089
- outputPerM: 0.1,
19182
+ outputPerM: 0.55,
19090
19183
  currency: "USD",
19091
19184
  unit: "per_million_tokens"
19092
19185
  }
@@ -19134,7 +19227,7 @@ var MODELS_BY_PROVIDER = {
19134
19227
  {
19135
19228
  name: "qwen/qwen3-30b-a3b-instruct-2507",
19136
19229
  displayName: "Qwen3 30B A3B Instruct 2507",
19137
- maxInputTokens: 131072,
19230
+ maxInputTokens: 262144,
19138
19231
  supportedFileTypes: [],
19139
19232
  reasoning: false,
19140
19233
  supportsTemperature: true,
@@ -19145,8 +19238,8 @@ var MODELS_BY_PROVIDER = {
19145
19238
  output: ["text"]
19146
19239
  },
19147
19240
  pricing: {
19148
- inputPerM: 0.04815,
19149
- outputPerM: 0.19305,
19241
+ inputPerM: 0.1,
19242
+ outputPerM: 0.3,
19150
19243
  currency: "USD",
19151
19244
  unit: "per_million_tokens"
19152
19245
  }
@@ -19225,8 +19318,9 @@ var MODELS_BY_PROVIDER = {
19225
19318
  output: ["text"]
19226
19319
  },
19227
19320
  pricing: {
19228
- inputPerM: 0.22,
19229
- outputPerM: 1.8,
19321
+ inputPerM: 0.3,
19322
+ outputPerM: 1,
19323
+ cacheReadPerM: 0.1,
19230
19324
  currency: "USD",
19231
19325
  unit: "per_million_tokens"
19232
19326
  }
@@ -19392,8 +19486,9 @@ var MODELS_BY_PROVIDER = {
19392
19486
  output: ["text"]
19393
19487
  },
19394
19488
  pricing: {
19395
- inputPerM: 0.09,
19489
+ inputPerM: 0.1,
19396
19490
  outputPerM: 1.1,
19491
+ cacheReadPerM: 0.07,
19397
19492
  currency: "USD",
19398
19493
  unit: "per_million_tokens"
19399
19494
  }
@@ -19441,7 +19536,7 @@ var MODELS_BY_PROVIDER = {
19441
19536
  {
19442
19537
  name: "qwen/qwen3-vl-235b-a22b-instruct",
19443
19538
  displayName: "Qwen3 VL 235B A22B Instruct",
19444
- maxInputTokens: 262144,
19539
+ maxInputTokens: 131072,
19445
19540
  supportedFileTypes: ["image"],
19446
19541
  reasoning: false,
19447
19542
  supportsTemperature: true,
@@ -19452,9 +19547,9 @@ var MODELS_BY_PROVIDER = {
19452
19547
  output: ["text"]
19453
19548
  },
19454
19549
  pricing: {
19455
- inputPerM: 0.2,
19456
- outputPerM: 0.88,
19457
- cacheReadPerM: 0.11,
19550
+ inputPerM: 0.21,
19551
+ outputPerM: 1.9,
19552
+ cacheReadPerM: 0.1,
19458
19553
  currency: "USD",
19459
19554
  unit: "per_million_tokens"
19460
19555
  }
@@ -19635,7 +19730,6 @@ var MODELS_BY_PROVIDER = {
19635
19730
  pricing: {
19636
19731
  inputPerM: 0.14,
19637
19732
  outputPerM: 1,
19638
- cacheReadPerM: 0.05,
19639
19733
  currency: "USD",
19640
19734
  unit: "per_million_tokens"
19641
19735
  }
@@ -19643,7 +19737,7 @@ var MODELS_BY_PROVIDER = {
19643
19737
  {
19644
19738
  name: "qwen/qwen3.5-397b-a17b",
19645
19739
  displayName: "Qwen3.5 397B-A17B",
19646
- maxInputTokens: 256e3,
19740
+ maxInputTokens: 262144,
19647
19741
  supportedFileTypes: ["image", "video"],
19648
19742
  reasoning: true,
19649
19743
  supportsTemperature: true,
@@ -19654,9 +19748,9 @@ var MODELS_BY_PROVIDER = {
19654
19748
  output: ["text"]
19655
19749
  },
19656
19750
  pricing: {
19657
- inputPerM: 0.385,
19658
- outputPerM: 2.45,
19659
- cacheReadPerM: 0.111,
19751
+ inputPerM: 0.45,
19752
+ outputPerM: 3,
19753
+ cacheReadPerM: 0.225,
19660
19754
  currency: "USD",
19661
19755
  unit: "per_million_tokens"
19662
19756
  }
@@ -19756,9 +19850,8 @@ var MODELS_BY_PROVIDER = {
19756
19850
  output: ["text"]
19757
19851
  },
19758
19852
  pricing: {
19759
- inputPerM: 0.285,
19760
- outputPerM: 2.4,
19761
- cacheReadPerM: 0.15,
19853
+ inputPerM: 0.45,
19854
+ outputPerM: 2.7,
19762
19855
  currency: "USD",
19763
19856
  unit: "per_million_tokens"
19764
19857
  }
@@ -19860,10 +19953,10 @@ var MODELS_BY_PROVIDER = {
19860
19953
  output: ["text"]
19861
19954
  },
19862
19955
  pricing: {
19863
- inputPerM: 1.25,
19864
- outputPerM: 3.75,
19865
- cacheReadPerM: 0.25,
19866
- cacheWritePerM: 1.5625,
19956
+ inputPerM: 1.475,
19957
+ outputPerM: 4.425,
19958
+ cacheReadPerM: 0.295,
19959
+ cacheWritePerM: 1.84375,
19867
19960
  currency: "USD",
19868
19961
  unit: "per_million_tokens"
19869
19962
  }
@@ -20011,26 +20104,6 @@ var MODELS_BY_PROVIDER = {
20011
20104
  unit: "per_million_tokens"
20012
20105
  }
20013
20106
  },
20014
- {
20015
- name: "sao10k/l3.1-70b-hanami-x1",
20016
- displayName: "Llama 3.1 70B Hanami x1",
20017
- maxInputTokens: 16e3,
20018
- supportedFileTypes: [],
20019
- reasoning: false,
20020
- supportsTemperature: true,
20021
- supportsToolCall: false,
20022
- releaseDate: "2025-01-08",
20023
- modalities: {
20024
- input: ["text"],
20025
- output: ["text"]
20026
- },
20027
- pricing: {
20028
- inputPerM: 3,
20029
- outputPerM: 3,
20030
- currency: "USD",
20031
- unit: "per_million_tokens"
20032
- }
20033
- },
20034
20107
  {
20035
20108
  name: "sao10k/l3.1-euryale-70b",
20036
20109
  displayName: "Llama 3.1 Euryale 70B v2.2",
@@ -20146,9 +20219,9 @@ var MODELS_BY_PROVIDER = {
20146
20219
  output: ["text"]
20147
20220
  },
20148
20221
  pricing: {
20149
- inputPerM: 0.14,
20150
- outputPerM: 0.58,
20151
- cacheReadPerM: 0.035,
20222
+ inputPerM: 0.2,
20223
+ outputPerM: 0.8,
20224
+ cacheReadPerM: 0.05,
20152
20225
  currency: "USD",
20153
20226
  unit: "per_million_tokens"
20154
20227
  }
@@ -20468,9 +20541,9 @@ var MODELS_BY_PROVIDER = {
20468
20541
  },
20469
20542
  supportsInterleaved: true,
20470
20543
  pricing: {
20471
- inputPerM: 0.105,
20544
+ inputPerM: 0.14,
20472
20545
  outputPerM: 0.28,
20473
- cacheReadPerM: 0.028,
20546
+ cacheReadPerM: 28e-4,
20474
20547
  currency: "USD",
20475
20548
  unit: "per_million_tokens"
20476
20549
  }
@@ -20577,9 +20650,9 @@ var MODELS_BY_PROVIDER = {
20577
20650
  output: ["text"]
20578
20651
  },
20579
20652
  pricing: {
20580
- inputPerM: 0.43,
20581
- outputPerM: 1.74,
20582
- cacheReadPerM: 0.08,
20653
+ inputPerM: 0.5,
20654
+ outputPerM: 2,
20655
+ cacheReadPerM: 0.1,
20583
20656
  currency: "USD",
20584
20657
  unit: "per_million_tokens"
20585
20658
  }
@@ -20633,7 +20706,7 @@ var MODELS_BY_PROVIDER = {
20633
20706
  {
20634
20707
  name: "z-ai/glm-4.7-flash",
20635
20708
  displayName: "GLM-4.7-Flash",
20636
- maxInputTokens: 202752,
20709
+ maxInputTokens: 2e5,
20637
20710
  supportedFileTypes: [],
20638
20711
  reasoning: true,
20639
20712
  supportsTemperature: true,
@@ -20648,9 +20721,8 @@ var MODELS_BY_PROVIDER = {
20648
20721
  },
20649
20722
  supportsInterleaved: true,
20650
20723
  pricing: {
20651
- inputPerM: 0.06,
20724
+ inputPerM: 0.0605,
20652
20725
  outputPerM: 0.4,
20653
- cacheReadPerM: 0.01,
20654
20726
  currency: "USD",
20655
20727
  unit: "per_million_tokens"
20656
20728
  }
@@ -20673,9 +20745,9 @@ var MODELS_BY_PROVIDER = {
20673
20745
  },
20674
20746
  supportsInterleaved: true,
20675
20747
  pricing: {
20676
- inputPerM: 0.6,
20677
- outputPerM: 1.92,
20678
- cacheReadPerM: 0.12,
20748
+ inputPerM: 0.95,
20749
+ outputPerM: 3.15,
20750
+ cacheReadPerM: 0.19,
20679
20751
  currency: "USD",
20680
20752
  unit: "per_million_tokens"
20681
20753
  }
@@ -20683,7 +20755,7 @@ var MODELS_BY_PROVIDER = {
20683
20755
  {
20684
20756
  name: "z-ai/glm-5-turbo",
20685
20757
  displayName: "GLM-5-Turbo",
20686
- maxInputTokens: 262144,
20758
+ maxInputTokens: 202752,
20687
20759
  supportedFileTypes: [],
20688
20760
  reasoning: true,
20689
20761
  supportsTemperature: true,
@@ -20748,9 +20820,9 @@ var MODELS_BY_PROVIDER = {
20748
20820
  },
20749
20821
  supportsInterleaved: true,
20750
20822
  pricing: {
20751
- inputPerM: 0.54,
20752
- outputPerM: 1.76,
20753
- cacheReadPerM: 0.1,
20823
+ inputPerM: 0.9338,
20824
+ outputPerM: 2.9348,
20825
+ cacheReadPerM: 0.17342,
20754
20826
  currency: "USD",
20755
20827
  unit: "per_million_tokens"
20756
20828
  }
@@ -20881,6 +20953,31 @@ function unknownModel(provider, model) {
20881
20953
  function modelProviderUnknown(model) {
20882
20954
  return new LlmCatalogError("MODEL_UNKNOWN", `Could not infer provider for model '${model}'`);
20883
20955
  }
20956
+ var MODEL_PRICING_FIELDS = [
20957
+ "inputPerM",
20958
+ "outputPerM",
20959
+ "cacheReadPerM",
20960
+ "cacheWritePerM",
20961
+ "reasoningPerM",
20962
+ "inputAudioPerM",
20963
+ "outputAudioPerM"
20964
+ ];
20965
+ var LONG_CONTEXT_PRICING_FIELDS = [
20966
+ "inputTokensAbove",
20967
+ "inputPerM",
20968
+ "outputPerM",
20969
+ "cacheReadPerM",
20970
+ "cacheWritePerM"
20971
+ ];
20972
+ var MODEL_BOOLEAN_FIELDS = [
20973
+ "default",
20974
+ "reasoning",
20975
+ "supportsTemperature",
20976
+ "supportsInterleaved",
20977
+ "supportsToolCall"
20978
+ ];
20979
+ var MODEL_STRING_FIELDS = ["displayName", "releaseDate", "status"];
20980
+ var MODEL_MODALITIES = ["text", "audio", "image", "video", "pdf"];
20884
20981
  function getNormalizedModelIdForLookup(model) {
20885
20982
  const stripped = stripBedrockRegionPrefix(model);
20886
20983
  return stripped.toLowerCase();
@@ -21108,6 +21205,302 @@ var LLM_REGISTRY = {
21108
21205
  supportsAllRegistryModels: true
21109
21206
  }
21110
21207
  };
21208
+ var ModelRegistry = class {
21209
+ #providers;
21210
+ constructor(providers) {
21211
+ validateRegistryProviders(providers);
21212
+ this.#providers = cloneRegistryProviders(providers);
21213
+ }
21214
+ /**
21215
+ * Replaces the active provider snapshot after validating and cloning it.
21216
+ *
21217
+ * Hosts that refresh the bundled registry can update the shared default instance without
21218
+ * exposing mutable provider records to consumers that already hold a ModelRegistry reference.
21219
+ */
21220
+ replaceProviders(providers) {
21221
+ validateRegistryProviders(providers);
21222
+ this.#providers = cloneRegistryProviders(providers);
21223
+ }
21224
+ getProvider(provider) {
21225
+ return cloneProviderInfo(this.#providers[provider]);
21226
+ }
21227
+ getModel(provider, model) {
21228
+ const modelInfo = findModelInfoInRegistry(this.#providers, provider, model);
21229
+ return modelInfo === null ? null : cloneModelInfo(modelInfo);
21230
+ }
21231
+ getModelCapabilities(provider, model) {
21232
+ const modelInfo = this.getModel(provider, model);
21233
+ if (modelInfo === null) return null;
21234
+ return {
21235
+ maxInputTokens: modelInfo.maxInputTokens,
21236
+ reasoning: modelInfo.reasoning === true,
21237
+ supportedFileTypes: [...modelInfo.supportedFileTypes],
21238
+ supportsInterleaved: modelInfo.supportsInterleaved === true,
21239
+ supportsTemperature: modelInfo.supportsTemperature === true,
21240
+ supportsToolCall: modelInfo.supportsToolCall === true,
21241
+ ...modelInfo.modalities ? {
21242
+ modalities: {
21243
+ input: [...modelInfo.modalities.input],
21244
+ output: [...modelInfo.modalities.output]
21245
+ }
21246
+ } : {}
21247
+ };
21248
+ }
21249
+ getSupportedModels(provider) {
21250
+ return this.#providers[provider].models.map((model) => model.name);
21251
+ }
21252
+ getDefaultModelForProvider(provider) {
21253
+ const models = this.#providers[provider].models;
21254
+ const explicit = models.find((model) => model.default)?.name;
21255
+ if (explicit) return explicit;
21256
+ if (models.length === 0) return null;
21257
+ return [...models].sort((left, right) => left.name.localeCompare(right.name))[0]?.name ?? null;
21258
+ }
21259
+ getMaxInputTokensForModel(provider, model, logger) {
21260
+ const modelInfo = findModelInfoInRegistry(this.#providers, provider, model);
21261
+ if (!modelInfo) {
21262
+ const supportedModels = this.getSupportedModels(provider).join(", ");
21263
+ logger?.error(
21264
+ `Model '${model}' not found for provider '${provider}' in LLM registry. Supported models: ${supportedModels}`
21265
+ );
21266
+ throw unknownModel(provider, model);
21267
+ }
21268
+ logger?.debug(`Found max tokens for ${provider}/${model}: ${modelInfo.maxInputTokens}`);
21269
+ return modelInfo.maxInputTokens;
21270
+ }
21271
+ getModelPricing(provider, model) {
21272
+ if (this.acceptsAnyModel(provider)) return void 0;
21273
+ const modelInfo = findModelInfoInRegistry(this.#providers, provider, model);
21274
+ return modelInfo?.pricing ? cloneModelInfo(modelInfo).pricing : void 0;
21275
+ }
21276
+ isReasoningCapableModel(model, provider) {
21277
+ const registryProvider = (() => {
21278
+ if (model.includes("/")) return "openrouter";
21279
+ if (provider) return provider;
21280
+ try {
21281
+ return this.getProviderFromModel(model);
21282
+ } catch {
21283
+ return void 0;
21284
+ }
21285
+ })();
21286
+ if (registryProvider) {
21287
+ const modelInfo = findModelInfoInRegistry(this.#providers, registryProvider, model);
21288
+ if (modelInfo?.reasoning === true) return true;
21289
+ if (modelInfo?.reasoning === false) return false;
21290
+ }
21291
+ const modelIdForHeuristics = model.includes("/") ? model.split("/").pop() ?? model : model;
21292
+ const modelLower = modelIdForHeuristics.toLowerCase();
21293
+ if (modelLower.includes("codex")) return true;
21294
+ if (modelLower.startsWith("o1") || modelLower.startsWith("o3") || modelLower.startsWith("o4")) {
21295
+ return true;
21296
+ }
21297
+ if (modelLower.includes("gpt-5")) return true;
21298
+ if (modelLower.includes("gemini-2.5") || modelLower.includes("gemini-3")) return true;
21299
+ return false;
21300
+ }
21301
+ getProviderFromModel(model) {
21302
+ if (model.includes("/")) throw modelProviderUnknown(model);
21303
+ const normalizedModel = getNormalizedModelIdForLookup(model);
21304
+ for (const provider of LLM_PROVIDERS) {
21305
+ const info = this.#providers[provider];
21306
+ if (info.models.some((candidate) => candidate.name.toLowerCase() === normalizedModel)) {
21307
+ return provider;
21308
+ }
21309
+ }
21310
+ throw modelProviderUnknown(model);
21311
+ }
21312
+ acceptsAnyModel(provider) {
21313
+ return this.#providers[provider].models.length === 0;
21314
+ }
21315
+ supportsCustomModels(provider) {
21316
+ return this.#providers[provider].supportsCustomModels === true;
21317
+ }
21318
+ hasAllRegistryModelsSupport(provider) {
21319
+ return this.#providers[provider].supportsAllRegistryModels === true;
21320
+ }
21321
+ supportsBaseURL(provider) {
21322
+ return this.#providers[provider].baseURLSupport !== "none";
21323
+ }
21324
+ isValidProviderModel(provider, model) {
21325
+ const normalizedModel = getNormalizedModelIdForLookup(model);
21326
+ return this.#providers[provider].models.some(
21327
+ (candidate) => candidate.name.toLowerCase() === normalizedModel
21328
+ );
21329
+ }
21330
+ getSupportedFileTypesForModel(provider, model) {
21331
+ const providerInfo = this.#providers[provider];
21332
+ if (this.acceptsAnyModel(provider)) return [...providerInfo.supportedFileTypes];
21333
+ const modelInfo = findModelInfoInRegistry(this.#providers, provider, model);
21334
+ if (modelInfo) return [...modelInfo.supportedFileTypes];
21335
+ if (this.supportsCustomModels(provider)) return [...providerInfo.supportedFileTypes];
21336
+ throw unknownModel(provider, model);
21337
+ }
21338
+ getAllModelsForProvider(provider) {
21339
+ const providerInfo = this.#providers[provider];
21340
+ const ownModels = providerInfo.models.map((model) => ({
21341
+ ...cloneModelInfo(model),
21342
+ originalProvider: provider
21343
+ }));
21344
+ if (!providerInfo.supportsAllRegistryModels || provider === "openrouter") {
21345
+ return ownModels;
21346
+ }
21347
+ const seen = new Set(ownModels.map((model) => model.name.toLowerCase()));
21348
+ const inherited = this.#providers.openrouter.models.filter((model) => !seen.has(model.name.toLowerCase())).map((model) => ({
21349
+ ...cloneModelInfo(model),
21350
+ originalProvider: "openrouter"
21351
+ }));
21352
+ return [...ownModels, ...inherited];
21353
+ }
21354
+ };
21355
+ function createModelRegistry(providers) {
21356
+ return new ModelRegistry(providers);
21357
+ }
21358
+ var DEFAULT_MODEL_REGISTRY = createModelRegistry(LLM_REGISTRY);
21359
+ function cloneRegistryProviders(providers) {
21360
+ const cloned = { ...providers };
21361
+ for (const provider of LLM_PROVIDERS) {
21362
+ cloned[provider] = cloneProviderInfo(providers[provider]);
21363
+ }
21364
+ return cloned;
21365
+ }
21366
+ function validateRegistryProviders(providers) {
21367
+ for (const provider of LLM_PROVIDERS) {
21368
+ const providerInfo = providers[provider];
21369
+ if (!isRecord(providerInfo) || !Array.isArray(providerInfo.models) || !["none", "optional", "required"].includes(providerInfo.baseURLSupport) || !Array.isArray(providerInfo.supportedFileTypes) || !providerInfo.supportedFileTypes.every(isSupportedFileType)) {
21370
+ throw new LlmCatalogError(
21371
+ "REGISTRY_INVALID",
21372
+ `Invalid registry provider definition for '${provider}'`
21373
+ );
21374
+ }
21375
+ if (providerInfo.supportsCustomModels !== void 0 && typeof providerInfo.supportsCustomModels !== "boolean" || providerInfo.supportsAllRegistryModels !== void 0 && typeof providerInfo.supportsAllRegistryModels !== "boolean" || providerInfo.modelsDev !== void 0 && !isValidModelsDevMetadata(providerInfo.modelsDev)) {
21376
+ throw new LlmCatalogError(
21377
+ "REGISTRY_INVALID",
21378
+ `Invalid registry provider metadata for '${provider}'`
21379
+ );
21380
+ }
21381
+ const modelNames = /* @__PURE__ */ new Set();
21382
+ for (const [modelIndex, model] of providerInfo.models.entries()) {
21383
+ const modelObject = isRecord(model) ? model : null;
21384
+ const modelName = modelObject && typeof modelObject.name === "string" ? modelObject.name : `<index ${modelIndex}>`;
21385
+ if (!modelObject || typeof modelObject.name !== "string" || modelObject.name.trim().length === 0 || !Number.isInteger(modelObject.maxInputTokens) || modelObject.maxInputTokens < 0 || !Array.isArray(modelObject.supportedFileTypes) || !modelObject.supportedFileTypes.every(isSupportedFileType)) {
21386
+ throw new LlmCatalogError(
21387
+ "REGISTRY_INVALID",
21388
+ `Invalid registry model definition for '${provider}/${modelName}'`
21389
+ );
21390
+ }
21391
+ const normalizedModelName = modelObject.name.toLowerCase();
21392
+ if (modelNames.has(normalizedModelName)) {
21393
+ throw new LlmCatalogError(
21394
+ "REGISTRY_INVALID",
21395
+ `Duplicate registry model definition for '${provider}/${modelObject.name}'`
21396
+ );
21397
+ }
21398
+ modelNames.add(normalizedModelName);
21399
+ if (!isValidModelMetadata(modelObject)) {
21400
+ throw new LlmCatalogError(
21401
+ "REGISTRY_INVALID",
21402
+ `Invalid registry metadata for '${provider}/${modelObject.name}'`
21403
+ );
21404
+ }
21405
+ if (!isValidModelPricing(modelObject.pricing)) {
21406
+ throw new LlmCatalogError(
21407
+ "REGISTRY_INVALID",
21408
+ `Invalid registry pricing for '${provider}/${modelName}'`
21409
+ );
21410
+ }
21411
+ }
21412
+ }
21413
+ }
21414
+ function isSupportedFileType(value) {
21415
+ return typeof value === "string" && SUPPORTED_FILE_TYPES.some((supportedFileType) => supportedFileType === value);
21416
+ }
21417
+ function isRecord(value) {
21418
+ return typeof value === "object" && value !== null;
21419
+ }
21420
+ function isValidPricingNumber(value) {
21421
+ return typeof value === "number" && Number.isFinite(value) && value >= 0;
21422
+ }
21423
+ function isValidModelsDevMetadata(value) {
21424
+ if (!isRecord(value) || !Array.isArray(value.env) || !value.env.every(isString)) {
21425
+ return false;
21426
+ }
21427
+ return ["npm", "api", "doc"].every(
21428
+ (field) => value[field] === void 0 || isString(value[field])
21429
+ );
21430
+ }
21431
+ function isValidModelMetadata(value) {
21432
+ if (!MODEL_BOOLEAN_FIELDS.every(
21433
+ (field) => value[field] === void 0 || typeof value[field] === "boolean"
21434
+ ) || !MODEL_STRING_FIELDS.every((field) => value[field] === void 0 || isString(value[field]))) {
21435
+ return false;
21436
+ }
21437
+ if (value.modalities !== void 0 && !isValidModelModalities(value.modalities)) {
21438
+ return false;
21439
+ }
21440
+ if (value.providerMetadata !== void 0 && !isValidProviderMetadata(value.providerMetadata)) {
21441
+ return false;
21442
+ }
21443
+ if (value.interleaved !== void 0 && !isValidInterleavedMetadata(value.interleaved)) {
21444
+ return false;
21445
+ }
21446
+ return true;
21447
+ }
21448
+ function isValidModelModalities(value) {
21449
+ if (!isRecord(value) || !Array.isArray(value.input) || !Array.isArray(value.output)) {
21450
+ return false;
21451
+ }
21452
+ return value.input.every(isSupportedModelModality) && value.output.every(isSupportedModelModality);
21453
+ }
21454
+ function isValidProviderMetadata(value) {
21455
+ return isRecord(value) && ["npm", "api"].every((field) => value[field] === void 0 || isString(value[field]));
21456
+ }
21457
+ function isValidInterleavedMetadata(value) {
21458
+ return value === true || isRecord(value) && (value.field === void 0 || isString(value.field));
21459
+ }
21460
+ function isSupportedModelModality(value) {
21461
+ return typeof value === "string" && MODEL_MODALITIES.some((modality) => modality === value);
21462
+ }
21463
+ function isString(value) {
21464
+ return typeof value === "string";
21465
+ }
21466
+ function isValidModelPricing(value) {
21467
+ if (value === void 0) return true;
21468
+ if (!isRecord(value)) return false;
21469
+ if (value.currency !== void 0 && value.currency !== "USD") return false;
21470
+ if (value.unit !== void 0 && value.unit !== "per_million_tokens") return false;
21471
+ for (const field of MODEL_PRICING_FIELDS) {
21472
+ if (field in value && !isValidPricingNumber(value[field])) return false;
21473
+ }
21474
+ if (!isValidPricingNumber(value.inputPerM) || !isValidPricingNumber(value.outputPerM)) {
21475
+ return false;
21476
+ }
21477
+ const longContextPricing = value.contextOver200kPerM;
21478
+ if (longContextPricing === void 0) return true;
21479
+ if (!isRecord(longContextPricing)) return false;
21480
+ const inputTokensAbove = longContextPricing.inputTokensAbove;
21481
+ if (inputTokensAbove !== void 0 && (typeof inputTokensAbove !== "number" || !Number.isInteger(inputTokensAbove) || inputTokensAbove < 0)) {
21482
+ return false;
21483
+ }
21484
+ for (const field of LONG_CONTEXT_PRICING_FIELDS) {
21485
+ if (field in longContextPricing && !isValidPricingNumber(longContextPricing[field])) {
21486
+ return false;
21487
+ }
21488
+ }
21489
+ return isValidPricingNumber(longContextPricing.inputPerM) && isValidPricingNumber(longContextPricing.outputPerM);
21490
+ }
21491
+ function findModelInfoInRegistry(providers, provider, model) {
21492
+ const normalizedModel = getNormalizedModelIdForLookup(model);
21493
+ const direct = providers[provider].models.find(
21494
+ (candidate) => candidate.name.toLowerCase() === normalizedModel
21495
+ );
21496
+ if (direct) return direct;
21497
+ if (provider !== "openrouter" && providers[provider].supportsAllRegistryModels && model.includes("/")) {
21498
+ return providers.openrouter.models.find(
21499
+ (candidate) => candidate.name.toLowerCase() === normalizedModel
21500
+ ) ?? null;
21501
+ }
21502
+ return null;
21503
+ }
21111
21504
  function cloneModelInfo(model) {
21112
21505
  return {
21113
21506
  ...model,
@@ -21272,9 +21665,8 @@ function supportsCustomModels(provider) {
21272
21665
  const providerInfo = LLM_REGISTRY[provider];
21273
21666
  return providerInfo.supportsCustomModels === true;
21274
21667
  }
21275
- function hasAllRegistryModelsSupport(provider) {
21276
- const providerInfo = LLM_REGISTRY[provider];
21277
- return providerInfo.supportsAllRegistryModels === true;
21668
+ function hasAllRegistryModelsSupport(provider, registry = DEFAULT_MODEL_REGISTRY) {
21669
+ return registry.hasAllRegistryModelsSupport(provider);
21278
21670
  }
21279
21671
  var OPENROUTER_PREFIX_BY_PROVIDER = {
21280
21672
  openai: "openai",
@@ -21285,8 +21677,8 @@ var OPENROUTER_PREFIX_BY_PROVIDER = {
21285
21677
  minimax: "minimax",
21286
21678
  glm: "z-ai"
21287
21679
  };
21288
- function getOpenRouterModelIdSet() {
21289
- return new Set(LLM_REGISTRY.openrouter.models.map((m) => m.name.toLowerCase()));
21680
+ function getOpenRouterModelIdSet(registry) {
21681
+ return new Set(registry.getSupportedModels("openrouter").map((model) => model.toLowerCase()));
21290
21682
  }
21291
21683
  function getOpenRouterCandidateModelIds(model, originalProvider) {
21292
21684
  if (model.includes("/")) return [model];
@@ -21305,8 +21697,8 @@ function getOpenRouterCandidateModelIds(model, originalProvider) {
21305
21697
  }
21306
21698
  return [`${prefix}/${model}`];
21307
21699
  }
21308
- function pickExistingOpenRouterModelId(candidates) {
21309
- const openrouterSet = getOpenRouterModelIdSet();
21700
+ function pickExistingOpenRouterModelId(candidates, registry) {
21701
+ const openrouterSet = getOpenRouterModelIdSet(registry);
21310
21702
  for (const candidate of candidates) {
21311
21703
  if (openrouterSet.has(candidate.toLowerCase())) {
21312
21704
  return candidate;
@@ -21367,11 +21759,11 @@ function getAllModelsForProvider(provider) {
21367
21759
  }
21368
21760
  return allModels;
21369
21761
  }
21370
- function transformModelNameForProvider(model, originalProvider, targetProvider) {
21371
- if (!hasAllRegistryModelsSupport(targetProvider)) {
21762
+ function transformModelNameForProvider(model, originalProvider, targetProvider, registry = DEFAULT_MODEL_REGISTRY) {
21763
+ if (!hasAllRegistryModelsSupport(targetProvider, registry)) {
21372
21764
  return model;
21373
21765
  }
21374
- if (hasAllRegistryModelsSupport(originalProvider)) {
21766
+ if (hasAllRegistryModelsSupport(originalProvider, registry)) {
21375
21767
  return model;
21376
21768
  }
21377
21769
  if (model.includes("/")) {
@@ -21379,7 +21771,7 @@ function transformModelNameForProvider(model, originalProvider, targetProvider)
21379
21771
  }
21380
21772
  const candidates = getOpenRouterCandidateModelIds(model, originalProvider);
21381
21773
  if (candidates.length === 0) return model;
21382
- return pickExistingOpenRouterModelId(candidates) ?? candidates[0];
21774
+ return pickExistingOpenRouterModelId(candidates, registry) ?? candidates[0];
21383
21775
  }
21384
21776
  function isModelValidForProvider(provider, model) {
21385
21777
  const providerInfo = LLM_REGISTRY[provider];
@@ -21429,11 +21821,11 @@ function getSupportedFileTypesForModel(provider, model) {
21429
21821
  }
21430
21822
  throw unknownModel(provider, model);
21431
21823
  }
21432
- function modelSupportsFileType(provider, model, fileType) {
21433
- const supportedTypes = getSupportedFileTypesForModel(provider, model);
21824
+ function modelSupportsFileType(provider, model, fileType, registry = DEFAULT_MODEL_REGISTRY) {
21825
+ const supportedTypes = registry === DEFAULT_MODEL_REGISTRY ? getSupportedFileTypesForModel(provider, model) : registry.getSupportedFileTypesForModel(provider, model);
21434
21826
  return supportedTypes.includes(fileType);
21435
21827
  }
21436
- function validateModelFileSupport(provider, model, mimeType) {
21828
+ function validateModelFileSupport(provider, model, mimeType, registry = DEFAULT_MODEL_REGISTRY) {
21437
21829
  const baseMimeType = mimeType.toLowerCase().split(";")[0]?.trim() || mimeType.toLowerCase();
21438
21830
  const fileType = MIME_TYPE_TO_FILE_TYPE[baseMimeType];
21439
21831
  if (!fileType) {
@@ -21443,7 +21835,7 @@ function validateModelFileSupport(provider, model, mimeType) {
21443
21835
  };
21444
21836
  }
21445
21837
  try {
21446
- if (!modelSupportsFileType(provider, model, fileType)) {
21838
+ if (!modelSupportsFileType(provider, model, fileType, registry)) {
21447
21839
  return {
21448
21840
  isSupported: false,
21449
21841
  fileType,
@@ -21551,7 +21943,7 @@ function getModelPricing(provider, model) {
21551
21943
  return void 0;
21552
21944
  }
21553
21945
  const modelInfo = findModelInfo(provider, model);
21554
- return modelInfo?.pricing;
21946
+ return modelInfo?.pricing ? cloneModelInfo(modelInfo).pricing : void 0;
21555
21947
  }
21556
21948
  function getModelDisplayName(model, provider) {
21557
21949
  if (provider) {
@@ -21570,7 +21962,10 @@ function getModelDisplayName(model, provider) {
21570
21962
  return model;
21571
21963
  }
21572
21964
  }
21573
- function isReasoningCapableModel(model, provider) {
21965
+ function isReasoningCapableModel(model, provider, registry = DEFAULT_MODEL_REGISTRY) {
21966
+ if (registry !== DEFAULT_MODEL_REGISTRY) {
21967
+ return registry.isReasoningCapableModel(model, provider);
21968
+ }
21574
21969
  const registryProvider = (() => {
21575
21970
  if (model.includes("/")) return "openrouter";
21576
21971
  if (provider) return provider;
@@ -22095,38 +22490,38 @@ var GOOGLE_PROFILE_CONFIG = {
22095
22490
  supportsBudgetTokensForBudgetParadigm: true,
22096
22491
  supportsBudgetTokensForThinkingLevelParadigm: false
22097
22492
  };
22098
- function isAnthropicStyleReasoningCapable(provider, model) {
22099
- return isReasoningCapableModel(model, provider) || parseClaudeVersion(model) !== null || isAnthropicAdaptiveThinkingModel(model);
22493
+ function isAnthropicStyleReasoningCapable(provider, model, registry) {
22494
+ return registry.isReasoningCapableModel(model, provider) || parseClaudeVersion(model) !== null || isAnthropicAdaptiveThinkingModel(model);
22100
22495
  }
22101
- function getNativeReasoningProfile(provider, model) {
22496
+ function getNativeReasoningProfile(provider, model, registry) {
22102
22497
  switch (provider) {
22103
22498
  case "openai":
22104
- if (!isReasoningCapableModel(model, "openai")) {
22499
+ if (!registry.isReasoningCapableModel(model, "openai")) {
22105
22500
  return nonCapableProfile();
22106
22501
  }
22107
22502
  return buildOpenAIReasoningProfile(model);
22108
22503
  case "anthropic":
22109
- if (!isAnthropicStyleReasoningCapable("anthropic", model)) {
22504
+ if (!isAnthropicStyleReasoningCapable("anthropic", model, registry)) {
22110
22505
  return nonCapableProfile();
22111
22506
  }
22112
22507
  return buildAnthropicReasoningProfile({ model, ...ANTHROPIC_PROFILE_CONFIG });
22113
22508
  case "bedrock":
22114
- if (!isReasoningCapableModel(model, "bedrock") && !model.toLowerCase().includes("nova")) {
22509
+ if (!registry.isReasoningCapableModel(model, "bedrock") && !model.toLowerCase().includes("nova")) {
22115
22510
  return nonCapableProfile();
22116
22511
  }
22117
22512
  return buildBedrockReasoningProfile(model);
22118
22513
  case "google":
22119
- if (!isReasoningCapableModel(model, "google")) {
22514
+ if (!registry.isReasoningCapableModel(model, "google")) {
22120
22515
  return nonCapableProfile();
22121
22516
  }
22122
22517
  return buildGoogleReasoningProfile({ model, ...GOOGLE_PROFILE_CONFIG });
22123
22518
  case "vertex":
22124
- if (!isAnthropicStyleReasoningCapable("vertex", model)) {
22519
+ if (!isAnthropicStyleReasoningCapable("vertex", model, registry)) {
22125
22520
  return nonCapableProfile();
22126
22521
  }
22127
22522
  return buildVertexReasoningProfile(model);
22128
22523
  case "openai-compatible":
22129
- if (!isReasoningCapableModel(model, "openai-compatible")) {
22524
+ if (!registry.isReasoningCapableModel(model, "openai-compatible")) {
22130
22525
  return nonCapableProfile();
22131
22526
  }
22132
22527
  return buildOpenAICompatibleReasoningProfile();
@@ -22151,16 +22546,20 @@ function toGatewayReasoningProfile(nativeProfile) {
22151
22546
  ...defaultVariant !== void 0 && { defaultVariant }
22152
22547
  };
22153
22548
  }
22154
- function getReasoningProfile(provider, model) {
22549
+ function getReasoningProfile(provider, model, registry = DEFAULT_MODEL_REGISTRY) {
22155
22550
  if (isOpenRouterGatewayProvider(provider)) {
22156
22551
  const target = getOpenRouterReasoningTarget(model);
22157
22552
  if (!target) {
22158
22553
  return nonCapableProfile();
22159
22554
  }
22160
- const nativeProfile = getNativeReasoningProfile(target.upstreamProvider, target.modelId);
22555
+ const nativeProfile = getNativeReasoningProfile(
22556
+ target.upstreamProvider,
22557
+ target.modelId,
22558
+ registry
22559
+ );
22161
22560
  return toGatewayReasoningProfile(nativeProfile);
22162
22561
  }
22163
- return getNativeReasoningProfile(provider, model);
22562
+ return getNativeReasoningProfile(provider, model, registry);
22164
22563
  }
22165
22564
  function supportsReasoningVariant(profile, variant) {
22166
22565
  return profile.variants.some((entry) => entry.id === variant);
@@ -22170,17 +22569,20 @@ function supportsReasoningVariant(profile, variant) {
22170
22569
  ANTHROPIC_BETA_HEADER,
22171
22570
  ANTHROPIC_INTERLEAVED_THINKING_BETA,
22172
22571
  DEFAULT_MAX_INPUT_TOKENS,
22572
+ DEFAULT_MODEL_REGISTRY,
22173
22573
  LLM_PRICING_STATUSES,
22174
22574
  LLM_PROVIDERS,
22175
22575
  LLM_REGISTRY,
22176
22576
  LlmCatalogError,
22177
22577
  MIME_TYPE_TO_FILE_TYPE,
22578
+ ModelRegistry,
22178
22579
  SUPPORTED_FILE_TYPES,
22179
22580
  acceptsAnyModel,
22180
22581
  buildGoogleReasoningProfile,
22181
22582
  calculateCost,
22182
22583
  calculateCostBreakdown,
22183
22584
  coerceOpenAIReasoningEffort,
22585
+ createModelRegistry,
22184
22586
  getAllModelsForProvider,
22185
22587
  getAllSupportedModels,
22186
22588
  getAllowedMimeTypes,