@shop-os/modelkit 0.1.9 → 0.1.11

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
@@ -182,8 +182,7 @@ var Catalog = class _Catalog {
182
182
  };
183
183
 
184
184
  // src/catalog/image.ts
185
- var IMAGE_USAGE = { unit: "images", modality: "IMAGE" };
186
- var IMAGE_GENERATE_EDIT = { imageGenerate: true, imageEdit: true };
185
+ var IMAGE_USAGE = { unit: "images" };
187
186
  var GEMINI_RATIOS = [
188
187
  "1:1",
189
188
  "2:3",
@@ -215,8 +214,7 @@ function geminiImage(id, label, aliases, sizes, display, exposure) {
215
214
  defaults: { size: "1K", aspectRatio: "1:1" },
216
215
  usage: { ...IMAGE_USAGE, slug: "gemini" },
217
216
  pricingKind: "image_size",
218
- display,
219
- capabilities: { ...IMAGE_GENERATE_EDIT }
217
+ display
220
218
  };
221
219
  return model;
222
220
  }
@@ -303,8 +301,7 @@ var IMAGE_MODELS = [
303
301
  provider: "openai",
304
302
  description: "The most capable model for image editing and complex creative instructions. Excels at text rendering, visual consistency, design generation, and iterative refinement.",
305
303
  logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/1204b494-8962-4f7f-af5e-699a8bdc98e3_compressed.png"
306
- },
307
- capabilities: { ...IMAGE_GENERATE_EDIT }
304
+ }
308
305
  },
309
306
  {
310
307
  // Same Images API surface as gpt-image-2 plus the "xhigh" and "max" quality tiers.
@@ -338,8 +335,7 @@ var IMAGE_MODELS = [
338
335
  display: {
339
336
  provider: "openai",
340
337
  description: "OpenAI's most capable GPT Image 2.5 tier, built for editing precision; takes text and image input and outputs images in low, medium, high, xhigh, or max quality."
341
- },
342
- capabilities: { ...IMAGE_GENERATE_EDIT }
338
+ }
343
339
  },
344
340
  {
345
341
  // Same Images API surface as gpt-image-2 plus the "xhigh" and "max" quality tiers.
@@ -373,8 +369,7 @@ var IMAGE_MODELS = [
373
369
  display: {
374
370
  provider: "openai",
375
371
  description: "OpenAI's fastest GPT Image 2.5 tier for high-quality everyday image generation and editing; takes text and image input and outputs images."
376
- },
377
- capabilities: { ...IMAGE_GENERATE_EDIT }
372
+ }
378
373
  },
379
374
  {
380
375
  // Cowork allows 7 ratios; trigger-workflows allows 9 (adds 3:2, 9:21, drops 4:5/5:4).
@@ -412,8 +407,7 @@ var IMAGE_MODELS = [
412
407
  provider: "meta",
413
408
  description: "Meta's image model with built-in world knowledge and strong prompt adherence. Great for concept-rich scenes, realistic compositions, and reference-guided edits.",
414
409
  logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/characters/1787909065794-k9a7zz.png"
415
- },
416
- capabilities: { ...IMAGE_GENERATE_EDIT }
410
+ }
417
411
  },
418
412
  {
419
413
  id: "seedream-5-0-pro",
@@ -437,9 +431,9 @@ var IMAGE_MODELS = [
437
431
  pricingKind: "image_size",
438
432
  display: {
439
433
  provider: "bytedance",
434
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/3bba5d81-4e57-4e71-911b-cdfa05acca2c_compressed.png",
440
435
  description: "ByteDance Seedream 5.0 Pro text-to-image and multi-reference image-to-image (up to 10 inputs) with region editing; outputs 1K, 1.5K, or 2K."
441
- },
442
- capabilities: { ...IMAGE_GENERATE_EDIT }
436
+ }
443
437
  },
444
438
  {
445
439
  id: "seedream-4.5",
@@ -476,8 +470,7 @@ var IMAGE_MODELS = [
476
470
  display: {
477
471
  provider: "bytedance",
478
472
  description: "ByteDance Seedream 4.5 text-to-image and image-to-image with up to 14 reference images and batch image-set generation; outputs 2K or 4K."
479
- },
480
- capabilities: { ...IMAGE_GENERATE_EDIT }
473
+ }
481
474
  },
482
475
  {
483
476
  id: "flux-2-pro",
@@ -499,9 +492,9 @@ var IMAGE_MODELS = [
499
492
  pricingKind: "image_size",
500
493
  display: {
501
494
  provider: "black-forest-labs",
495
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/flux.png",
502
496
  description: "Black Forest Labs FLUX.2 [pro] text-to-image and multi-reference editing model served via Prodia; takes a prompt and up to 8 input images and outputs up to 4096x4096."
503
- },
504
- capabilities: { ...IMAGE_GENERATE_EDIT }
497
+ }
505
498
  },
506
499
  {
507
500
  // Prodia's gemini-3-pro jobs take aspect_ratio + resolution (1K/2K/4K), not
@@ -527,8 +520,7 @@ var IMAGE_MODELS = [
527
520
  display: {
528
521
  provider: "google",
529
522
  description: "Google Gemini 3 Pro image generation and editing served via Prodia; takes a prompt plus up to 3 reference images and outputs 1K, 2K, or 4K."
530
- },
531
- capabilities: { ...IMAGE_GENERATE_EDIT }
523
+ }
532
524
  },
533
525
  {
534
526
  // Nano Banana (img2img.v2) is flat-rate with aspect_ratio only; 3:2, 4:5,
@@ -553,8 +545,7 @@ var IMAGE_MODELS = [
553
545
  display: {
554
546
  provider: "google",
555
547
  description: "Google Nano Banana image generation and editing served via Prodia; takes a prompt plus 1-3 input images and matches the first input's aspect ratio in roughly 8 seconds."
556
- },
557
- capabilities: { ...IMAGE_GENERATE_EDIT }
548
+ }
558
549
  },
559
550
  {
560
551
  // WAN 2.7 takes `images` (up to 9) and a `size` enum whose exact values
@@ -575,13 +566,12 @@ var IMAGE_MODELS = [
575
566
  supports: []
576
567
  },
577
568
  defaults: { size: "1K", aspectRatio: "1:1" },
578
- usage: { unit: "compute_seconds", modality: "IMAGE" },
569
+ usage: { unit: "compute_seconds" },
579
570
  pricingKind: "image_size",
580
571
  display: {
581
572
  provider: "alibaba",
582
573
  description: "Alibaba Wan 2.7 Image Pro text-to-image and image-editing model; takes a prompt plus up to 9 reference images and generates up to 4K (4096x4096)."
583
- },
584
- capabilities: { ...IMAGE_GENERATE_EDIT }
574
+ }
585
575
  },
586
576
  {
587
577
  // Qwen Image 2 Pro has aspect_ratio but no size input; resolution follows
@@ -603,13 +593,12 @@ var IMAGE_MODELS = [
603
593
  supports: []
604
594
  },
605
595
  defaults: { aspectRatio: "1:1" },
606
- usage: { unit: "compute_seconds", modality: "IMAGE" },
596
+ usage: { unit: "compute_seconds" },
607
597
  pricingKind: "image_size",
608
598
  display: {
609
599
  provider: "alibaba",
610
600
  description: "Alibaba Qwen Image 2 Pro unified text-to-image and editing model; takes a prompt plus an optional single reference image and generates native 2K output."
611
- },
612
- capabilities: { ...IMAGE_GENERATE_EDIT }
601
+ }
613
602
  },
614
603
  {
615
604
  // Qwen Image Edit Plus takes aspect_ratio (or match_input_image) and
@@ -631,17 +620,17 @@ var IMAGE_MODELS = [
631
620
  supports: ["outputFormat"]
632
621
  },
633
622
  defaults: { outputFormat: "png" },
634
- usage: { unit: "compute_seconds", modality: "IMAGE" },
623
+ usage: { unit: "compute_seconds" },
635
624
  pricingKind: "image_size",
636
625
  display: {
637
626
  provider: "alibaba",
638
627
  description: "Alibaba Qwen Image Edit Plus with Lightning and a skin-retouching LoRA; takes one or more reference images plus an edit prompt and outputs webp, jpg, or png."
639
- },
640
- capabilities: { ...IMAGE_GENERATE_EDIT }
628
+ }
641
629
  }
642
630
  ];
643
631
 
644
632
  // src/catalog/other.ts
633
+ var GOOGLE_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
645
634
  var OTHER_MODELS = [
646
635
  {
647
636
  id: "lyria-3-clip-preview",
@@ -658,10 +647,11 @@ var OTHER_MODELS = [
658
647
  supports: []
659
648
  },
660
649
  defaults: {},
661
- usage: { unit: "images", modality: "AUDIO" },
650
+ usage: { unit: "images" },
662
651
  pricingKind: "flat",
663
652
  display: {
664
653
  provider: "google",
654
+ logo: GOOGLE_LOGO,
665
655
  description: "Google Lyria 3 Clip short music clips, loops, and previews; takes text and up to 10 image prompts and returns a fixed 30-second MP3 plus lyrics."
666
656
  },
667
657
  capabilities: {}
@@ -680,10 +670,11 @@ var OTHER_MODELS = [
680
670
  supports: []
681
671
  },
682
672
  defaults: {},
683
- usage: { unit: "images", modality: "AUDIO" },
673
+ usage: { unit: "images" },
684
674
  pricingKind: "flat",
685
675
  display: {
686
676
  provider: "google",
677
+ logo: GOOGLE_LOGO,
687
678
  description: "Google Lyria 3 Pro flagship music model for full-length songs with verses, choruses, and bridges; takes text and up to 10 image prompts and returns MP3 plus lyrics."
688
679
  },
689
680
  capabilities: {}
@@ -702,7 +693,7 @@ var OTHER_MODELS = [
702
693
  supports: ["seed", "negativePrompt"]
703
694
  },
704
695
  defaults: {},
705
- usage: { unit: "compute_seconds", modality: "AUDIO" },
696
+ usage: { unit: "compute_seconds" },
706
697
  pricingKind: "flat",
707
698
  display: {
708
699
  provider: "google",
@@ -725,7 +716,7 @@ var OTHER_MODELS = [
725
716
  supports: ["seed", "negativePrompt"]
726
717
  },
727
718
  defaults: { durationSeconds: 8 },
728
- usage: { unit: "compute_seconds", modality: "AUDIO" },
719
+ usage: { unit: "compute_seconds" },
729
720
  pricingKind: "flat",
730
721
  display: {
731
722
  provider: "mmaudio",
@@ -748,7 +739,7 @@ var OTHER_MODELS = [
748
739
  },
749
740
  defaults: { durationSeconds: 15, instrumental: true },
750
741
  // Replicate's run() does not report predict_time; billed by generated length.
751
- usage: { unit: "seconds", modality: "AUDIO" },
742
+ usage: { unit: "seconds" },
752
743
  pricingKind: "flat",
753
744
  display: {
754
745
  provider: "elevenlabs",
@@ -771,13 +762,13 @@ var OTHER_MODELS = [
771
762
  supports: ["scaleFactor", "outputFormat", "upscale"]
772
763
  },
773
764
  defaults: { scaleFactor: 2, outputFormat: "png" },
774
- usage: { unit: "compute_seconds", modality: "IMAGE" },
765
+ usage: { unit: "compute_seconds" },
775
766
  pricingKind: "flat",
776
767
  display: {
777
768
  provider: "topaz",
769
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/topazlabs.png",
778
770
  description: "Topaz Labs AI image upscaling on Replicate; takes one input image and upscales up to 6x with selectable enhancement models and optional face enhancement."
779
- },
780
- capabilities: { imageEdit: true }
771
+ }
781
772
  },
782
773
  {
783
774
  id: "bg-remove",
@@ -794,19 +785,30 @@ var OTHER_MODELS = [
794
785
  supports: []
795
786
  },
796
787
  defaults: {},
797
- usage: { unit: "images", modality: "IMAGE" },
788
+ usage: { unit: "images" },
798
789
  pricingKind: "flat",
799
790
  display: {
800
791
  provider: "prodia",
801
792
  description: "Prodia background removal; takes one input image and returns a PNG cut-out of the subject plus an optional black-and-white mask."
802
- },
803
- capabilities: { imageEdit: true }
793
+ }
804
794
  }
805
795
  ];
806
796
 
807
797
  // src/catalog/text.ts
808
- var TEXT_USAGE = { unit: "tokens", modality: "TEXT" };
798
+ var TEXT_USAGE = { unit: "tokens" };
799
+ var CDN = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image";
800
+ var PROVIDER_LOGOS = {
801
+ anthropic: `${CDN}/25fad392-188c-4829-a3d0-c4fa02d1c8cd.png`,
802
+ openai: `${CDN}/1204b494-8962-4f7f-af5e-699a8bdc98e3.png`,
803
+ google: `${CDN}/192485d2-a76a-4657-9c06-930b2c70badd.png`,
804
+ deepseek: `${CDN}/9b7406d2-a696-4558-ab79-90a37e3f4574.png`,
805
+ xai: `${CDN}/858b7fcc-9bd5-411d-aea1-a7b35ecfffab.png`,
806
+ moonshot: `${CDN}/5a1e2eae-3474-4fac-9c74-a93f41ee6f67.png`,
807
+ minimax: `${CDN}/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png`
808
+ };
809
809
  function text(id, label, providerModelId, extra) {
810
+ const display = extra?.display;
811
+ const logo = display && !display.logo ? PROVIDER_LOGOS[display.provider] : void 0;
810
812
  return {
811
813
  id,
812
814
  aliases: [],
@@ -820,7 +822,8 @@ function text(id, label, providerModelId, extra) {
820
822
  defaults: {},
821
823
  usage: { ...TEXT_USAGE },
822
824
  pricingKind: "token",
823
- ...extra
825
+ ...extra,
826
+ ...display && logo ? { display: { ...display, logo } } : {}
824
827
  };
825
828
  }
826
829
  var ANTHROPIC_THINKING = {
@@ -839,7 +842,7 @@ var TEXT_MODELS = [
839
842
  costTier: 2,
840
843
  description: "OpenAI GPT-4o flagship multimodal model; text and image input, 128K-token context."
841
844
  },
842
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 128e3 }
845
+ capabilities: { vision: true, contextWindow: 128e3 }
843
846
  }),
844
847
  text("gpt-4o-mini", "GPT-4o mini", "gpt-4o-mini", {
845
848
  exposure: "internal",
@@ -848,7 +851,7 @@ var TEXT_MODELS = [
848
851
  costTier: 1,
849
852
  description: "OpenAI GPT-4o mini fast, low-cost multimodal model; text and image input, 128K-token context."
850
853
  },
851
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 128e3 }
854
+ capabilities: { vision: true, contextWindow: 128e3 }
852
855
  }),
853
856
  text("gpt-5.1", "GPT-5.1", "gpt-5.1", {
854
857
  exposure: "catalog",
@@ -857,7 +860,7 @@ var TEXT_MODELS = [
857
860
  costTier: 3,
858
861
  description: "OpenAI GPT-5.1 reasoning model for coding and agentic tasks; text and image input, 400K-token context."
859
862
  },
860
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 4e5 }
863
+ capabilities: { vision: true, contextWindow: 4e5 }
861
864
  }),
862
865
  text("gpt-5.2", "GPT-5.2", "gpt-5.2", {
863
866
  exposure: "catalog",
@@ -866,7 +869,7 @@ var TEXT_MODELS = [
866
869
  costTier: 3,
867
870
  description: "OpenAI GPT-5.2 reasoning model for complex professional work; text and image input, 400K-token context."
868
871
  },
869
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 4e5 }
872
+ capabilities: { vision: true, contextWindow: 4e5 }
870
873
  }),
871
874
  // 1.05M-token context: https://platform.openai.com/docs/models/gpt-5.4
872
875
  text("gpt-5.4", "GPT-5.4", "gpt-5.4", {
@@ -878,8 +881,6 @@ var TEXT_MODELS = [
878
881
  },
879
882
  capabilities: {
880
883
  vision: true,
881
- tools: true,
882
- structuredOutput: true,
883
884
  contextWindow: 105e4
884
885
  }
885
886
  }),
@@ -892,7 +893,7 @@ var TEXT_MODELS = [
892
893
  costTier: 1,
893
894
  description: "OpenAI GPT-5.4 mini efficient reasoning model for high-volume workloads; text and image input, 400K-token context."
894
895
  },
895
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 4e5 }
896
+ capabilities: { vision: true, contextWindow: 4e5 }
896
897
  }),
897
898
  text("gpt-5.5", "GPT-5.5", "gpt-5.5", {
898
899
  exposure: "catalog",
@@ -903,15 +904,13 @@ var TEXT_MODELS = [
903
904
  },
904
905
  capabilities: {
905
906
  vision: true,
906
- tools: true,
907
- structuredOutput: true,
908
907
  contextWindow: 105e4
909
908
  }
910
909
  }),
911
910
  text("gpt-5.6-luna", "GPT-5.6 Luna", "gpt-5.6-luna", {
912
- providerOptions: OPENAI_REASONING,
913
911
  exposure: "catalog",
914
912
  display: {
913
+ chat: { providerOptions: OPENAI_REASONING },
915
914
  provider: "openai",
916
915
  costTier: 1,
917
916
  description: "OpenAI GPT-5.6 Luna cost-optimized tier of the GPT-5.6 reasoning family; text and image input, 1.05M-token context."
@@ -919,15 +918,13 @@ var TEXT_MODELS = [
919
918
  capabilities: {
920
919
  reasoning: true,
921
920
  vision: true,
922
- tools: true,
923
- structuredOutput: true,
924
921
  contextWindow: 105e4
925
922
  }
926
923
  }),
927
924
  text("gpt-5.6-terra", "GPT-5.6 Terra", "gpt-5.6-terra", {
928
- providerOptions: OPENAI_REASONING,
929
925
  exposure: "catalog",
930
926
  display: {
927
+ chat: { providerOptions: OPENAI_REASONING },
931
928
  provider: "openai",
932
929
  costTier: 2,
933
930
  description: "OpenAI GPT-5.6 Terra balanced tier of the GPT-5.6 reasoning family; text and image input, 1.05M-token context."
@@ -935,15 +932,13 @@ var TEXT_MODELS = [
935
932
  capabilities: {
936
933
  reasoning: true,
937
934
  vision: true,
938
- tools: true,
939
- structuredOutput: true,
940
935
  contextWindow: 105e4
941
936
  }
942
937
  }),
943
938
  text("gpt-5.6-sol", "GPT-5.6 Sol", "gpt-5.6-sol", {
944
- providerOptions: OPENAI_REASONING,
945
939
  exposure: "catalog",
946
940
  display: {
941
+ chat: { providerOptions: OPENAI_REASONING },
947
942
  provider: "openai",
948
943
  costTier: 3,
949
944
  description: "OpenAI GPT-5.6 Sol flagship tier of the GPT-5.6 reasoning family; text and image input, 1.05M-token context."
@@ -951,8 +946,6 @@ var TEXT_MODELS = [
951
946
  capabilities: {
952
947
  reasoning: true,
953
948
  vision: true,
954
- tools: true,
955
- structuredOutput: true,
956
949
  contextWindow: 105e4
957
950
  }
958
951
  }),
@@ -965,11 +958,10 @@ var TEXT_MODELS = [
965
958
  costTier: 2,
966
959
  description: "Anthropic Claude Sonnet 4.5 (legacy) balanced model; text and image input, 200K-token context."
967
960
  },
968
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 2e5 }
961
+ capabilities: { vision: true, contextWindow: 2e5 }
969
962
  }),
970
963
  // Anthropic retired the dated 4.0 ids; callers that still send them get 4.6.
971
964
  text("claude-sonnet-4-6", "Claude Sonnet 4.6", "claude-sonnet-4-6", {
972
- providerOptions: ANTHROPIC_THINKING,
973
965
  exposure: "catalog",
974
966
  aliases: [
975
967
  "claude-sonnet-4.6",
@@ -978,6 +970,7 @@ var TEXT_MODELS = [
978
970
  "claude-sonnet-4-20250514"
979
971
  ],
980
972
  display: {
973
+ chat: { providerOptions: ANTHROPIC_THINKING },
981
974
  provider: "anthropic",
982
975
  costTier: 2,
983
976
  description: "Anthropic Claude Sonnet 4.6 (legacy) balanced model; text and image input, 1M-token context."
@@ -985,15 +978,13 @@ var TEXT_MODELS = [
985
978
  capabilities: {
986
979
  reasoning: true,
987
980
  vision: true,
988
- tools: true,
989
- structuredOutput: true,
990
981
  contextWindow: 1e6
991
982
  }
992
983
  }),
993
984
  text("claude-sonnet-5", "Claude Sonnet 5", "claude-sonnet-5", {
994
- providerOptions: ANTHROPIC_ADAPTIVE,
995
985
  exposure: "catalog",
996
986
  display: {
987
+ chat: { providerOptions: ANTHROPIC_ADAPTIVE },
997
988
  provider: "anthropic",
998
989
  costTier: 3,
999
990
  description: "Anthropic Claude Sonnet 5 current balanced model; text and image input, 1M-token context."
@@ -1001,16 +992,14 @@ var TEXT_MODELS = [
1001
992
  capabilities: {
1002
993
  reasoning: true,
1003
994
  vision: true,
1004
- tools: true,
1005
- structuredOutput: true,
1006
995
  contextWindow: 1e6
1007
996
  }
1008
997
  }),
1009
998
  text("claude-opus-4-8", "Claude Opus 4.8", "claude-opus-4-8", {
1010
- providerOptions: ANTHROPIC_ADAPTIVE,
1011
999
  exposure: "catalog",
1012
1000
  aliases: ["claude-opus-4.8", "claude-opus-4", "claude-opus-4.0", "claude-opus-4-20250514"],
1013
1001
  display: {
1002
+ chat: { providerOptions: ANTHROPIC_ADAPTIVE },
1014
1003
  provider: "anthropic",
1015
1004
  costTier: 3,
1016
1005
  description: "Anthropic Claude Opus 4.8 (legacy) frontier model; text and image input, 1M-token context."
@@ -1018,16 +1007,14 @@ var TEXT_MODELS = [
1018
1007
  capabilities: {
1019
1008
  reasoning: true,
1020
1009
  vision: true,
1021
- tools: true,
1022
- structuredOutput: true,
1023
1010
  contextWindow: 1e6
1024
1011
  }
1025
1012
  }),
1026
1013
  text("claude-haiku-4-5", "Claude Haiku 4.5", "claude-haiku-4-5", {
1027
- providerOptions: ANTHROPIC_THINKING,
1028
1014
  exposure: "catalog",
1029
1015
  aliases: ["claude-haiku-4.5", "claude-haiku-4-5-20251001", "claude-haiku-4"],
1030
1016
  display: {
1017
+ chat: { providerOptions: ANTHROPIC_THINKING },
1031
1018
  provider: "anthropic",
1032
1019
  costTier: 1,
1033
1020
  description: "Anthropic Claude Haiku 4.5 fast model with near-frontier intelligence; text and image input, 200K-token context."
@@ -1035,8 +1022,6 @@ var TEXT_MODELS = [
1035
1022
  capabilities: {
1036
1023
  reasoning: true,
1037
1024
  vision: true,
1038
- tools: true,
1039
- structuredOutput: true,
1040
1025
  contextWindow: 2e5
1041
1026
  }
1042
1027
  }),
@@ -1050,8 +1035,6 @@ var TEXT_MODELS = [
1050
1035
  },
1051
1036
  capabilities: {
1052
1037
  vision: true,
1053
- tools: true,
1054
- structuredOutput: true,
1055
1038
  contextWindow: 1e6
1056
1039
  }
1057
1040
  }),
@@ -1064,8 +1047,6 @@ var TEXT_MODELS = [
1064
1047
  },
1065
1048
  capabilities: {
1066
1049
  vision: true,
1067
- tools: true,
1068
- structuredOutput: true,
1069
1050
  contextWindow: 1e6
1070
1051
  }
1071
1052
  }),
@@ -1078,8 +1059,6 @@ var TEXT_MODELS = [
1078
1059
  },
1079
1060
  capabilities: {
1080
1061
  vision: true,
1081
- tools: true,
1082
- structuredOutput: true,
1083
1062
  contextWindow: 1048576
1084
1063
  }
1085
1064
  }),
@@ -1092,8 +1071,6 @@ var TEXT_MODELS = [
1092
1071
  },
1093
1072
  capabilities: {
1094
1073
  vision: true,
1095
- tools: true,
1096
- structuredOutput: true,
1097
1074
  contextWindow: 1048576
1098
1075
  }
1099
1076
  }),
@@ -1106,8 +1083,6 @@ var TEXT_MODELS = [
1106
1083
  },
1107
1084
  capabilities: {
1108
1085
  vision: true,
1109
- tools: true,
1110
- structuredOutput: true,
1111
1086
  contextWindow: 1048576
1112
1087
  }
1113
1088
  }),
@@ -1120,8 +1095,6 @@ var TEXT_MODELS = [
1120
1095
  },
1121
1096
  capabilities: {
1122
1097
  vision: true,
1123
- tools: true,
1124
- structuredOutput: true,
1125
1098
  contextWindow: 1048576
1126
1099
  }
1127
1100
  }),
@@ -1134,8 +1107,6 @@ var TEXT_MODELS = [
1134
1107
  },
1135
1108
  capabilities: {
1136
1109
  vision: true,
1137
- tools: true,
1138
- structuredOutput: true,
1139
1110
  contextWindow: 1048576
1140
1111
  }
1141
1112
  }),
@@ -1149,8 +1120,6 @@ var TEXT_MODELS = [
1149
1120
  },
1150
1121
  capabilities: {
1151
1122
  vision: true,
1152
- tools: true,
1153
- structuredOutput: true,
1154
1123
  contextWindow: 1048576
1155
1124
  }
1156
1125
  }),
@@ -1163,8 +1132,6 @@ var TEXT_MODELS = [
1163
1132
  },
1164
1133
  capabilities: {
1165
1134
  vision: true,
1166
- tools: true,
1167
- structuredOutput: true,
1168
1135
  contextWindow: 1048576
1169
1136
  }
1170
1137
  }),
@@ -1183,8 +1150,6 @@ var TEXT_MODELS = [
1183
1150
  },
1184
1151
  capabilities: {
1185
1152
  vision: true,
1186
- tools: true,
1187
- structuredOutput: true,
1188
1153
  contextWindow: 1048576
1189
1154
  }
1190
1155
  }),
@@ -1197,8 +1162,6 @@ var TEXT_MODELS = [
1197
1162
  },
1198
1163
  capabilities: {
1199
1164
  vision: true,
1200
- tools: false,
1201
- structuredOutput: true,
1202
1165
  contextWindow: 128e3
1203
1166
  }
1204
1167
  }),
@@ -1211,8 +1174,6 @@ var TEXT_MODELS = [
1211
1174
  },
1212
1175
  capabilities: {
1213
1176
  vision: true,
1214
- tools: false,
1215
- structuredOutput: true,
1216
1177
  contextWindow: 2e5
1217
1178
  }
1218
1179
  }),
@@ -1225,8 +1186,6 @@ var TEXT_MODELS = [
1225
1186
  },
1226
1187
  capabilities: {
1227
1188
  vision: true,
1228
- tools: false,
1229
- structuredOutput: true,
1230
1189
  contextWindow: 128e3
1231
1190
  }
1232
1191
  }),
@@ -1234,10 +1193,10 @@ var TEXT_MODELS = [
1234
1193
  // Flash rates (https://api-docs.deepseek.com/news/news260910/); the old id
1235
1194
  // stays an alias so stored selections keep resolving.
1236
1195
  text("deepseek-flash", "DeepSeek V4.1 Flash", "deepseek-flash", {
1237
- providerOptions: DEEPSEEK_THINKING,
1238
1196
  aliases: ["deepseek-v4-flash"],
1239
1197
  exposure: "catalog",
1240
1198
  display: {
1199
+ chat: { providerOptions: DEEPSEEK_THINKING },
1241
1200
  provider: "deepseek",
1242
1201
  costTier: 1,
1243
1202
  recommended: true,
@@ -1246,15 +1205,13 @@ var TEXT_MODELS = [
1246
1205
  capabilities: {
1247
1206
  reasoning: true,
1248
1207
  vision: true,
1249
- tools: true,
1250
- structuredOutput: true,
1251
1208
  contextWindow: 1e6
1252
1209
  }
1253
1210
  }),
1254
1211
  text("deepseek-v4-pro", "DeepSeek V4 Pro", "deepseek-v4-pro", {
1255
- providerOptions: DEEPSEEK_THINKING,
1256
1212
  exposure: "catalog",
1257
1213
  display: {
1214
+ chat: { providerOptions: DEEPSEEK_THINKING },
1258
1215
  provider: "deepseek",
1259
1216
  costTier: 2,
1260
1217
  description: "DeepSeek V4 Pro thinking/non-thinking text model with tool calls and JSON output (no vision); 1M-token context and up to 384K output tokens."
@@ -1262,8 +1219,6 @@ var TEXT_MODELS = [
1262
1219
  capabilities: {
1263
1220
  reasoning: true,
1264
1221
  vision: false,
1265
- tools: true,
1266
- structuredOutput: true,
1267
1222
  contextWindow: 1e6
1268
1223
  }
1269
1224
  }),
@@ -1277,16 +1232,16 @@ var TEXT_MODELS = [
1277
1232
  },
1278
1233
  capabilities: {
1279
1234
  vision: true,
1280
- tools: true,
1281
- structuredOutput: true,
1282
1235
  contextWindow: 1e6
1283
1236
  }
1284
1237
  }),
1285
1238
  // Moonshot retired kimi-k2.5 on 2026-08-31 and no longer publishes its specs.
1286
1239
  text("kimi-k2.5", "Kimi K2.5", "kimi-k2.5", {
1287
- defaults: { temperature: 1 },
1288
- exposure: "catalog",
1240
+ lifecycle: "deprecated",
1241
+ replacedBy: "kimi-k3",
1242
+ exposure: "internal",
1289
1243
  display: {
1244
+ chat: { temperature: 1 },
1290
1245
  provider: "moonshot",
1291
1246
  costTier: 2,
1292
1247
  description: "Moonshot Kimi K2.5; the provider retired the model on 2026-08-31 and calls now return a model-not-found error."
@@ -1294,9 +1249,9 @@ var TEXT_MODELS = [
1294
1249
  capabilities: {}
1295
1250
  }),
1296
1251
  text("kimi-k3", "Kimi K3", "kimi-k3", {
1297
- defaults: { temperature: 1 },
1298
1252
  exposure: "catalog",
1299
1253
  display: {
1254
+ chat: { temperature: 1 },
1300
1255
  provider: "moonshot",
1301
1256
  costTier: 2,
1302
1257
  description: "Moonshot Kimi K3 flagship model with native visual understanding and always-on thinking; text, image, and video input, 1M-token context."
@@ -1304,8 +1259,6 @@ var TEXT_MODELS = [
1304
1259
  capabilities: {
1305
1260
  reasoning: true,
1306
1261
  vision: true,
1307
- tools: true,
1308
- structuredOutput: true,
1309
1262
  contextWindow: 1e6
1310
1263
  }
1311
1264
  }),
@@ -1319,12 +1272,12 @@ var TEXT_MODELS = [
1319
1272
  costTier: 2,
1320
1273
  description: "MiniMax M3 frontier multimodal model for agentic reasoning, tool use, and coding; text, image, and video input, 1M-token context."
1321
1274
  },
1322
- capabilities: { vision: true, tools: true, contextWindow: 1e6 }
1275
+ capabilities: { vision: true, contextWindow: 1e6 }
1323
1276
  })
1324
1277
  ];
1325
1278
 
1326
1279
  // src/catalog/video.ts
1327
- var VIDEO_USAGE = { unit: "seconds", modality: "VIDEO" };
1280
+ var VIDEO_USAGE = { unit: "seconds" };
1328
1281
  var SEEDANCE_RATIOS = ["21:9", "16:9", "4:3", "1:1", "3:4", "9:16", "adaptive"];
1329
1282
  var KLING_RATIOS = ["16:9", "9:16", "1:1", "adaptive"];
1330
1283
  var OMNI_RATIOS = ["16:9", "9:16"];
@@ -1333,7 +1286,8 @@ var H3_RATIOS = ["21:9", "16:9", "4:3", "1:1", "3:4", "9:16"];
1333
1286
  var H3_REFERENCE_RATIOS = ["adaptive", ...H3_RATIOS];
1334
1287
  var NEGATIVE_PROMPT = "blur, distort, and low quality";
1335
1288
  var FRAMES_EXCLUDE_REFERENCES = { framesExcludeReferences: true };
1336
- var GOOGLE_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
1289
+ var BYTEDANCE_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/3bba5d81-4e57-4e71-911b-cdfa05acca2c_compressed.png";
1290
+ var GOOGLE_LOGO2 = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
1337
1291
  var VIDEO_MODELS = [
1338
1292
  {
1339
1293
  id: "veo-3.1",
@@ -1362,7 +1316,7 @@ var VIDEO_MODELS = [
1362
1316
  display: {
1363
1317
  provider: "google",
1364
1318
  description: "Google's highest-quality video generation model. Supports up to 4K resolution and 8-second clips with reference image conditioning.",
1365
- logo: GOOGLE_LOGO
1319
+ logo: GOOGLE_LOGO2
1366
1320
  },
1367
1321
  capabilities: { ...FRAMES_EXCLUDE_REFERENCES }
1368
1322
  },
@@ -1454,7 +1408,7 @@ var VIDEO_MODELS = [
1454
1408
  display: {
1455
1409
  provider: "google",
1456
1410
  description: "Google's conversational video model with native audio, human support, and natural language editing. Aspect ratio only \u2014 resolution and duration are model-determined.",
1457
- logo: GOOGLE_LOGO
1411
+ logo: GOOGLE_LOGO2
1458
1412
  },
1459
1413
  capabilities: { acceptsSourceVideo: true }
1460
1414
  },
@@ -1479,6 +1433,7 @@ var VIDEO_MODELS = [
1479
1433
  pricingKind: "video_per_second",
1480
1434
  display: {
1481
1435
  provider: "google",
1436
+ logo: GOOGLE_LOGO2,
1482
1437
  description: "Google Gemini Omni Flash 1.1 conversational video generation and editing; text, image, and up to 10-second video input, 3-10 second output at up to 4K and 24 FPS."
1483
1438
  },
1484
1439
  capabilities: { acceptsSourceVideo: true }
@@ -1496,7 +1451,7 @@ var VIDEO_MODELS = [
1496
1451
  constraints: {
1497
1452
  aspectRatios: [...SEEDANCE_RATIOS],
1498
1453
  resolutions: ["480p", "720p", "1080p", "4k"],
1499
- durations: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1454
+ durations: { min: 4, max: 15 },
1500
1455
  durationPresets: [4, 6, 8, 10, 12, 15],
1501
1456
  references: { images: 9, videos: 3, audios: 3, audioOnly: false },
1502
1457
  ratioIgnoredWith: ["firstFrame"],
@@ -1513,7 +1468,7 @@ var VIDEO_MODELS = [
1513
1468
  display: {
1514
1469
  provider: "bytedance",
1515
1470
  description: "High-quality AI video generation with reference image conditioning. Supports 4-15 second clips with human preprocessing.",
1516
- logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/3bba5d81-4e57-4e71-911b-cdfa05acca2c_compressed.png"
1471
+ logo: BYTEDANCE_LOGO
1517
1472
  },
1518
1473
  capabilities: { acceptsSourceVideo: true, ...FRAMES_EXCLUDE_REFERENCES }
1519
1474
  },
@@ -1529,7 +1484,7 @@ var VIDEO_MODELS = [
1529
1484
  constraints: {
1530
1485
  aspectRatios: [...SEEDANCE_RATIOS],
1531
1486
  resolutions: ["480p", "720p"],
1532
- durations: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1487
+ durations: { min: 4, max: 15 },
1533
1488
  references: { images: 9, videos: 3, audios: 3, audioOnly: false },
1534
1489
  ratioIgnoredWith: ["firstFrame"],
1535
1490
  supports: ["generateAudio", "seed", "lastFrame", "watermark"]
@@ -1544,6 +1499,7 @@ var VIDEO_MODELS = [
1544
1499
  pricingKind: "video_per_second",
1545
1500
  display: {
1546
1501
  provider: "bytedance",
1502
+ logo: BYTEDANCE_LOGO,
1547
1503
  description: "Speed- and cost-optimized ByteDance Seedance 2.0 Fast; text plus image, video, and audio references to generate or edit 4-15 second clips."
1548
1504
  },
1549
1505
  capabilities: { acceptsSourceVideo: true, ...FRAMES_EXCLUDE_REFERENCES }
@@ -1576,6 +1532,7 @@ var VIDEO_MODELS = [
1576
1532
  pricingKind: "video_per_second",
1577
1533
  display: {
1578
1534
  provider: "bytedance",
1535
+ logo: BYTEDANCE_LOGO,
1579
1536
  description: "ByteDance Seedance 2.5 for long-form storytelling and omni-reference generation/editing; up to 50 reference assets and 4-30 second clips at up to 1080p."
1580
1537
  },
1581
1538
  capabilities: { acceptsSourceVideo: true, ...FRAMES_EXCLUDE_REFERENCES }
@@ -1600,7 +1557,7 @@ var VIDEO_MODELS = [
1600
1557
  },
1601
1558
  // No resolution default: xAI picks its own unless the caller asks.
1602
1559
  defaults: { durationSeconds: 8, aspectRatio: "16:9" },
1603
- usage: { unit: "reported_cost_usd", modality: "VIDEO" },
1560
+ usage: { unit: "reported_cost_usd", slug: "grok" },
1604
1561
  pricingKind: "video_per_second",
1605
1562
  display: {
1606
1563
  provider: "xai",
@@ -1630,10 +1587,11 @@ var VIDEO_MODELS = [
1630
1587
  cfgScale: 0.5,
1631
1588
  negativePrompt: NEGATIVE_PROMPT
1632
1589
  },
1633
- usage: { ...VIDEO_USAGE, slug: "grok" },
1590
+ usage: { ...VIDEO_USAGE },
1634
1591
  pricingKind: "video_per_second",
1635
1592
  display: {
1636
1593
  provider: "kuaishou",
1594
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/kling-color.png",
1637
1595
  description: "Kuaishou Kling 2.5 Turbo Pro image-to-video; animates a single input image from a text prompt with an optional end image, 5- or 10-second clips."
1638
1596
  },
1639
1597
  capabilities: { ...FRAMES_EXCLUDE_REFERENCES }
@@ -1664,6 +1622,7 @@ var VIDEO_MODELS = [
1664
1622
  pricingKind: "video_per_second",
1665
1623
  display: {
1666
1624
  provider: "kuaishou",
1625
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/kling-color.png",
1667
1626
  description: "Kuaishou Kling 3.0 Pro image-to-video; a required start image plus a text prompt (or multi-shot prompts) with optional end image and native audio, 3-15 second clips."
1668
1627
  },
1669
1628
  capabilities: { ...FRAMES_EXCLUDE_REFERENCES }
@@ -1697,10 +1656,11 @@ var VIDEO_MODELS = [
1697
1656
  supports: ["generateAudio", "lastFrame"]
1698
1657
  },
1699
1658
  defaults: { durationSeconds: 5, aspectRatio: "16:9", generateAudio: false, mode: "pro" },
1700
- usage: { unit: "compute_seconds", modality: "VIDEO" },
1659
+ usage: { unit: "compute_seconds" },
1701
1660
  pricingKind: "video_per_second",
1702
1661
  display: {
1703
1662
  provider: "kuaishou",
1663
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/kling-color.png",
1704
1664
  description: "Kuaishou Kling Video 3.0 Omni unified generation and editing from text, start/end images, up to 7 reference images, and reference video; up to 15 seconds at up to 1080p."
1705
1665
  },
1706
1666
  capabilities: {}
@@ -1730,6 +1690,7 @@ var VIDEO_MODELS = [
1730
1690
  pricingKind: "video_per_second",
1731
1691
  display: {
1732
1692
  provider: "minimax",
1693
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png",
1733
1694
  description: "MiniMax H3 multimodal video model for text-to-video, image-to-video (first/last frame), and reference-to-video with native audio, up to 2K."
1734
1695
  },
1735
1696
  capabilities: { ...FRAMES_EXCLUDE_REFERENCES }
@@ -1759,6 +1720,7 @@ var VIDEO_MODELS = [
1759
1720
  pricingKind: "video_per_second",
1760
1721
  display: {
1761
1722
  provider: "minimax",
1723
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png",
1762
1724
  description: "High-speed MiniMax H3 Max variant for text-to-video and image-to-video (first/last frame) only, up to 768p."
1763
1725
  },
1764
1726
  capabilities: { ...FRAMES_EXCLUDE_REFERENCES }
@@ -1789,6 +1751,7 @@ var VIDEO_MODELS = [
1789
1751
  pricingKind: "video_per_second",
1790
1752
  display: {
1791
1753
  provider: "minimax",
1754
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png",
1792
1755
  description: "MiniMax H3 reference-to-video mode guided by up to 9 reference images, 3 reference videos, and 3 audio clips; reference and image-to-video inputs cannot be mixed."
1793
1756
  },
1794
1757
  capabilities: {}
@@ -1819,6 +1782,7 @@ var VIDEO_MODELS = [
1819
1782
  pricingKind: "video_per_second",
1820
1783
  display: {
1821
1784
  provider: "minimax",
1785
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png",
1822
1786
  description: "MiniMax H3 Max reference-to-video on fal; conditions on reference images, videos, and audio. MiniMax's own docs do not list a reference mode for H3 Max."
1823
1787
  },
1824
1788
  capabilities: {}
@@ -1844,6 +1808,7 @@ var VIDEO_MODELS = [
1844
1808
  pricingKind: "video_per_second",
1845
1809
  display: {
1846
1810
  provider: "kuaishou",
1811
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/kling-color.png",
1847
1812
  description: "Kuaishou Kling O1 Reference Video-to-Video; a prompt plus a 3-10 second reference video (optional reference images) generates 3-10 second clips preserving motion and camera language."
1848
1813
  },
1849
1814
  capabilities: { acceptsSourceVideo: true }
@@ -1863,10 +1828,11 @@ var VIDEO_MODELS = [
1863
1828
  supports: ["lastFrame"]
1864
1829
  },
1865
1830
  defaults: { durationSeconds: 6, resolution: "768p" },
1866
- usage: { unit: "compute_seconds", modality: "VIDEO" },
1831
+ usage: { unit: "compute_seconds" },
1867
1832
  pricingKind: "video_per_second",
1868
1833
  display: {
1869
1834
  provider: "minimax",
1835
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png",
1870
1836
  description: "MiniMax Hailuo 02 text-to-video and image-to-video model with realistic physics and strong prompt following; outputs 768p at 6 or 10 seconds."
1871
1837
  },
1872
1838
  capabilities: {}
@@ -2514,7 +2480,7 @@ function passthroughTextModel(model) {
2514
2480
  exposure: "internal",
2515
2481
  constraints: {},
2516
2482
  defaults: {},
2517
- usage: { unit: "tokens", modality: "TEXT" },
2483
+ usage: { unit: "tokens" },
2518
2484
  pricingKind: "token"
2519
2485
  };
2520
2486
  }