@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/catalog.js CHANGED
@@ -96,8 +96,7 @@ var Catalog = class _Catalog {
96
96
  };
97
97
 
98
98
  // src/catalog/image.ts
99
- var IMAGE_USAGE = { unit: "images", modality: "IMAGE" };
100
- var IMAGE_GENERATE_EDIT = { imageGenerate: true, imageEdit: true };
99
+ var IMAGE_USAGE = { unit: "images" };
101
100
  var GEMINI_RATIOS = [
102
101
  "1:1",
103
102
  "2:3",
@@ -129,8 +128,7 @@ function geminiImage(id, label, aliases, sizes, display, exposure) {
129
128
  defaults: { size: "1K", aspectRatio: "1:1" },
130
129
  usage: { ...IMAGE_USAGE, slug: "gemini" },
131
130
  pricingKind: "image_size",
132
- display,
133
- capabilities: { ...IMAGE_GENERATE_EDIT }
131
+ display
134
132
  };
135
133
  return model;
136
134
  }
@@ -217,8 +215,7 @@ var IMAGE_MODELS = [
217
215
  provider: "openai",
218
216
  description: "The most capable model for image editing and complex creative instructions. Excels at text rendering, visual consistency, design generation, and iterative refinement.",
219
217
  logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/1204b494-8962-4f7f-af5e-699a8bdc98e3_compressed.png"
220
- },
221
- capabilities: { ...IMAGE_GENERATE_EDIT }
218
+ }
222
219
  },
223
220
  {
224
221
  // Same Images API surface as gpt-image-2 plus the "xhigh" and "max" quality tiers.
@@ -252,8 +249,7 @@ var IMAGE_MODELS = [
252
249
  display: {
253
250
  provider: "openai",
254
251
  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."
255
- },
256
- capabilities: { ...IMAGE_GENERATE_EDIT }
252
+ }
257
253
  },
258
254
  {
259
255
  // Same Images API surface as gpt-image-2 plus the "xhigh" and "max" quality tiers.
@@ -287,8 +283,7 @@ var IMAGE_MODELS = [
287
283
  display: {
288
284
  provider: "openai",
289
285
  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."
290
- },
291
- capabilities: { ...IMAGE_GENERATE_EDIT }
286
+ }
292
287
  },
293
288
  {
294
289
  // Cowork allows 7 ratios; trigger-workflows allows 9 (adds 3:2, 9:21, drops 4:5/5:4).
@@ -326,8 +321,7 @@ var IMAGE_MODELS = [
326
321
  provider: "meta",
327
322
  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.",
328
323
  logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/characters/1787909065794-k9a7zz.png"
329
- },
330
- capabilities: { ...IMAGE_GENERATE_EDIT }
324
+ }
331
325
  },
332
326
  {
333
327
  id: "seedream-5-0-pro",
@@ -351,9 +345,9 @@ var IMAGE_MODELS = [
351
345
  pricingKind: "image_size",
352
346
  display: {
353
347
  provider: "bytedance",
348
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/3bba5d81-4e57-4e71-911b-cdfa05acca2c_compressed.png",
354
349
  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."
355
- },
356
- capabilities: { ...IMAGE_GENERATE_EDIT }
350
+ }
357
351
  },
358
352
  {
359
353
  id: "seedream-4.5",
@@ -390,8 +384,7 @@ var IMAGE_MODELS = [
390
384
  display: {
391
385
  provider: "bytedance",
392
386
  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."
393
- },
394
- capabilities: { ...IMAGE_GENERATE_EDIT }
387
+ }
395
388
  },
396
389
  {
397
390
  id: "flux-2-pro",
@@ -413,9 +406,9 @@ var IMAGE_MODELS = [
413
406
  pricingKind: "image_size",
414
407
  display: {
415
408
  provider: "black-forest-labs",
409
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/flux.png",
416
410
  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."
417
- },
418
- capabilities: { ...IMAGE_GENERATE_EDIT }
411
+ }
419
412
  },
420
413
  {
421
414
  // Prodia's gemini-3-pro jobs take aspect_ratio + resolution (1K/2K/4K), not
@@ -441,8 +434,7 @@ var IMAGE_MODELS = [
441
434
  display: {
442
435
  provider: "google",
443
436
  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."
444
- },
445
- capabilities: { ...IMAGE_GENERATE_EDIT }
437
+ }
446
438
  },
447
439
  {
448
440
  // Nano Banana (img2img.v2) is flat-rate with aspect_ratio only; 3:2, 4:5,
@@ -467,8 +459,7 @@ var IMAGE_MODELS = [
467
459
  display: {
468
460
  provider: "google",
469
461
  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."
470
- },
471
- capabilities: { ...IMAGE_GENERATE_EDIT }
462
+ }
472
463
  },
473
464
  {
474
465
  // WAN 2.7 takes `images` (up to 9) and a `size` enum whose exact values
@@ -489,13 +480,12 @@ var IMAGE_MODELS = [
489
480
  supports: []
490
481
  },
491
482
  defaults: { size: "1K", aspectRatio: "1:1" },
492
- usage: { unit: "compute_seconds", modality: "IMAGE" },
483
+ usage: { unit: "compute_seconds" },
493
484
  pricingKind: "image_size",
494
485
  display: {
495
486
  provider: "alibaba",
496
487
  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)."
497
- },
498
- capabilities: { ...IMAGE_GENERATE_EDIT }
488
+ }
499
489
  },
500
490
  {
501
491
  // Qwen Image 2 Pro has aspect_ratio but no size input; resolution follows
@@ -517,13 +507,12 @@ var IMAGE_MODELS = [
517
507
  supports: []
518
508
  },
519
509
  defaults: { aspectRatio: "1:1" },
520
- usage: { unit: "compute_seconds", modality: "IMAGE" },
510
+ usage: { unit: "compute_seconds" },
521
511
  pricingKind: "image_size",
522
512
  display: {
523
513
  provider: "alibaba",
524
514
  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."
525
- },
526
- capabilities: { ...IMAGE_GENERATE_EDIT }
515
+ }
527
516
  },
528
517
  {
529
518
  // Qwen Image Edit Plus takes aspect_ratio (or match_input_image) and
@@ -545,17 +534,17 @@ var IMAGE_MODELS = [
545
534
  supports: ["outputFormat"]
546
535
  },
547
536
  defaults: { outputFormat: "png" },
548
- usage: { unit: "compute_seconds", modality: "IMAGE" },
537
+ usage: { unit: "compute_seconds" },
549
538
  pricingKind: "image_size",
550
539
  display: {
551
540
  provider: "alibaba",
552
541
  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."
553
- },
554
- capabilities: { ...IMAGE_GENERATE_EDIT }
542
+ }
555
543
  }
556
544
  ];
557
545
 
558
546
  // src/catalog/other.ts
547
+ var GOOGLE_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
559
548
  var OTHER_MODELS = [
560
549
  {
561
550
  id: "lyria-3-clip-preview",
@@ -572,10 +561,11 @@ var OTHER_MODELS = [
572
561
  supports: []
573
562
  },
574
563
  defaults: {},
575
- usage: { unit: "images", modality: "AUDIO" },
564
+ usage: { unit: "images" },
576
565
  pricingKind: "flat",
577
566
  display: {
578
567
  provider: "google",
568
+ logo: GOOGLE_LOGO,
579
569
  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."
580
570
  },
581
571
  capabilities: {}
@@ -594,10 +584,11 @@ var OTHER_MODELS = [
594
584
  supports: []
595
585
  },
596
586
  defaults: {},
597
- usage: { unit: "images", modality: "AUDIO" },
587
+ usage: { unit: "images" },
598
588
  pricingKind: "flat",
599
589
  display: {
600
590
  provider: "google",
591
+ logo: GOOGLE_LOGO,
601
592
  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."
602
593
  },
603
594
  capabilities: {}
@@ -616,7 +607,7 @@ var OTHER_MODELS = [
616
607
  supports: ["seed", "negativePrompt"]
617
608
  },
618
609
  defaults: {},
619
- usage: { unit: "compute_seconds", modality: "AUDIO" },
610
+ usage: { unit: "compute_seconds" },
620
611
  pricingKind: "flat",
621
612
  display: {
622
613
  provider: "google",
@@ -639,7 +630,7 @@ var OTHER_MODELS = [
639
630
  supports: ["seed", "negativePrompt"]
640
631
  },
641
632
  defaults: { durationSeconds: 8 },
642
- usage: { unit: "compute_seconds", modality: "AUDIO" },
633
+ usage: { unit: "compute_seconds" },
643
634
  pricingKind: "flat",
644
635
  display: {
645
636
  provider: "mmaudio",
@@ -662,7 +653,7 @@ var OTHER_MODELS = [
662
653
  },
663
654
  defaults: { durationSeconds: 15, instrumental: true },
664
655
  // Replicate's run() does not report predict_time; billed by generated length.
665
- usage: { unit: "seconds", modality: "AUDIO" },
656
+ usage: { unit: "seconds" },
666
657
  pricingKind: "flat",
667
658
  display: {
668
659
  provider: "elevenlabs",
@@ -685,13 +676,13 @@ var OTHER_MODELS = [
685
676
  supports: ["scaleFactor", "outputFormat", "upscale"]
686
677
  },
687
678
  defaults: { scaleFactor: 2, outputFormat: "png" },
688
- usage: { unit: "compute_seconds", modality: "IMAGE" },
679
+ usage: { unit: "compute_seconds" },
689
680
  pricingKind: "flat",
690
681
  display: {
691
682
  provider: "topaz",
683
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/topazlabs.png",
692
684
  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."
693
- },
694
- capabilities: { imageEdit: true }
685
+ }
695
686
  },
696
687
  {
697
688
  id: "bg-remove",
@@ -708,19 +699,30 @@ var OTHER_MODELS = [
708
699
  supports: []
709
700
  },
710
701
  defaults: {},
711
- usage: { unit: "images", modality: "IMAGE" },
702
+ usage: { unit: "images" },
712
703
  pricingKind: "flat",
713
704
  display: {
714
705
  provider: "prodia",
715
706
  description: "Prodia background removal; takes one input image and returns a PNG cut-out of the subject plus an optional black-and-white mask."
716
- },
717
- capabilities: { imageEdit: true }
707
+ }
718
708
  }
719
709
  ];
720
710
 
721
711
  // src/catalog/text.ts
722
- var TEXT_USAGE = { unit: "tokens", modality: "TEXT" };
712
+ var TEXT_USAGE = { unit: "tokens" };
713
+ var CDN = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image";
714
+ var PROVIDER_LOGOS = {
715
+ anthropic: `${CDN}/25fad392-188c-4829-a3d0-c4fa02d1c8cd.png`,
716
+ openai: `${CDN}/1204b494-8962-4f7f-af5e-699a8bdc98e3.png`,
717
+ google: `${CDN}/192485d2-a76a-4657-9c06-930b2c70badd.png`,
718
+ deepseek: `${CDN}/9b7406d2-a696-4558-ab79-90a37e3f4574.png`,
719
+ xai: `${CDN}/858b7fcc-9bd5-411d-aea1-a7b35ecfffab.png`,
720
+ moonshot: `${CDN}/5a1e2eae-3474-4fac-9c74-a93f41ee6f67.png`,
721
+ minimax: `${CDN}/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png`
722
+ };
723
723
  function text(id, label, providerModelId, extra) {
724
+ const display = extra?.display;
725
+ const logo = display && !display.logo ? PROVIDER_LOGOS[display.provider] : void 0;
724
726
  return {
725
727
  id,
726
728
  aliases: [],
@@ -734,7 +736,8 @@ function text(id, label, providerModelId, extra) {
734
736
  defaults: {},
735
737
  usage: { ...TEXT_USAGE },
736
738
  pricingKind: "token",
737
- ...extra
739
+ ...extra,
740
+ ...display && logo ? { display: { ...display, logo } } : {}
738
741
  };
739
742
  }
740
743
  var ANTHROPIC_THINKING = {
@@ -753,7 +756,7 @@ var TEXT_MODELS = [
753
756
  costTier: 2,
754
757
  description: "OpenAI GPT-4o flagship multimodal model; text and image input, 128K-token context."
755
758
  },
756
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 128e3 }
759
+ capabilities: { vision: true, contextWindow: 128e3 }
757
760
  }),
758
761
  text("gpt-4o-mini", "GPT-4o mini", "gpt-4o-mini", {
759
762
  exposure: "internal",
@@ -762,7 +765,7 @@ var TEXT_MODELS = [
762
765
  costTier: 1,
763
766
  description: "OpenAI GPT-4o mini fast, low-cost multimodal model; text and image input, 128K-token context."
764
767
  },
765
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 128e3 }
768
+ capabilities: { vision: true, contextWindow: 128e3 }
766
769
  }),
767
770
  text("gpt-5.1", "GPT-5.1", "gpt-5.1", {
768
771
  exposure: "catalog",
@@ -771,7 +774,7 @@ var TEXT_MODELS = [
771
774
  costTier: 3,
772
775
  description: "OpenAI GPT-5.1 reasoning model for coding and agentic tasks; text and image input, 400K-token context."
773
776
  },
774
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 4e5 }
777
+ capabilities: { vision: true, contextWindow: 4e5 }
775
778
  }),
776
779
  text("gpt-5.2", "GPT-5.2", "gpt-5.2", {
777
780
  exposure: "catalog",
@@ -780,7 +783,7 @@ var TEXT_MODELS = [
780
783
  costTier: 3,
781
784
  description: "OpenAI GPT-5.2 reasoning model for complex professional work; text and image input, 400K-token context."
782
785
  },
783
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 4e5 }
786
+ capabilities: { vision: true, contextWindow: 4e5 }
784
787
  }),
785
788
  // 1.05M-token context: https://platform.openai.com/docs/models/gpt-5.4
786
789
  text("gpt-5.4", "GPT-5.4", "gpt-5.4", {
@@ -792,8 +795,6 @@ var TEXT_MODELS = [
792
795
  },
793
796
  capabilities: {
794
797
  vision: true,
795
- tools: true,
796
- structuredOutput: true,
797
798
  contextWindow: 105e4
798
799
  }
799
800
  }),
@@ -806,7 +807,7 @@ var TEXT_MODELS = [
806
807
  costTier: 1,
807
808
  description: "OpenAI GPT-5.4 mini efficient reasoning model for high-volume workloads; text and image input, 400K-token context."
808
809
  },
809
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 4e5 }
810
+ capabilities: { vision: true, contextWindow: 4e5 }
810
811
  }),
811
812
  text("gpt-5.5", "GPT-5.5", "gpt-5.5", {
812
813
  exposure: "catalog",
@@ -817,15 +818,13 @@ var TEXT_MODELS = [
817
818
  },
818
819
  capabilities: {
819
820
  vision: true,
820
- tools: true,
821
- structuredOutput: true,
822
821
  contextWindow: 105e4
823
822
  }
824
823
  }),
825
824
  text("gpt-5.6-luna", "GPT-5.6 Luna", "gpt-5.6-luna", {
826
- providerOptions: OPENAI_REASONING,
827
825
  exposure: "catalog",
828
826
  display: {
827
+ chat: { providerOptions: OPENAI_REASONING },
829
828
  provider: "openai",
830
829
  costTier: 1,
831
830
  description: "OpenAI GPT-5.6 Luna cost-optimized tier of the GPT-5.6 reasoning family; text and image input, 1.05M-token context."
@@ -833,15 +832,13 @@ var TEXT_MODELS = [
833
832
  capabilities: {
834
833
  reasoning: true,
835
834
  vision: true,
836
- tools: true,
837
- structuredOutput: true,
838
835
  contextWindow: 105e4
839
836
  }
840
837
  }),
841
838
  text("gpt-5.6-terra", "GPT-5.6 Terra", "gpt-5.6-terra", {
842
- providerOptions: OPENAI_REASONING,
843
839
  exposure: "catalog",
844
840
  display: {
841
+ chat: { providerOptions: OPENAI_REASONING },
845
842
  provider: "openai",
846
843
  costTier: 2,
847
844
  description: "OpenAI GPT-5.6 Terra balanced tier of the GPT-5.6 reasoning family; text and image input, 1.05M-token context."
@@ -849,15 +846,13 @@ var TEXT_MODELS = [
849
846
  capabilities: {
850
847
  reasoning: true,
851
848
  vision: true,
852
- tools: true,
853
- structuredOutput: true,
854
849
  contextWindow: 105e4
855
850
  }
856
851
  }),
857
852
  text("gpt-5.6-sol", "GPT-5.6 Sol", "gpt-5.6-sol", {
858
- providerOptions: OPENAI_REASONING,
859
853
  exposure: "catalog",
860
854
  display: {
855
+ chat: { providerOptions: OPENAI_REASONING },
861
856
  provider: "openai",
862
857
  costTier: 3,
863
858
  description: "OpenAI GPT-5.6 Sol flagship tier of the GPT-5.6 reasoning family; text and image input, 1.05M-token context."
@@ -865,8 +860,6 @@ var TEXT_MODELS = [
865
860
  capabilities: {
866
861
  reasoning: true,
867
862
  vision: true,
868
- tools: true,
869
- structuredOutput: true,
870
863
  contextWindow: 105e4
871
864
  }
872
865
  }),
@@ -879,11 +872,10 @@ var TEXT_MODELS = [
879
872
  costTier: 2,
880
873
  description: "Anthropic Claude Sonnet 4.5 (legacy) balanced model; text and image input, 200K-token context."
881
874
  },
882
- capabilities: { vision: true, tools: true, structuredOutput: true, contextWindow: 2e5 }
875
+ capabilities: { vision: true, contextWindow: 2e5 }
883
876
  }),
884
877
  // Anthropic retired the dated 4.0 ids; callers that still send them get 4.6.
885
878
  text("claude-sonnet-4-6", "Claude Sonnet 4.6", "claude-sonnet-4-6", {
886
- providerOptions: ANTHROPIC_THINKING,
887
879
  exposure: "catalog",
888
880
  aliases: [
889
881
  "claude-sonnet-4.6",
@@ -892,6 +884,7 @@ var TEXT_MODELS = [
892
884
  "claude-sonnet-4-20250514"
893
885
  ],
894
886
  display: {
887
+ chat: { providerOptions: ANTHROPIC_THINKING },
895
888
  provider: "anthropic",
896
889
  costTier: 2,
897
890
  description: "Anthropic Claude Sonnet 4.6 (legacy) balanced model; text and image input, 1M-token context."
@@ -899,15 +892,13 @@ var TEXT_MODELS = [
899
892
  capabilities: {
900
893
  reasoning: true,
901
894
  vision: true,
902
- tools: true,
903
- structuredOutput: true,
904
895
  contextWindow: 1e6
905
896
  }
906
897
  }),
907
898
  text("claude-sonnet-5", "Claude Sonnet 5", "claude-sonnet-5", {
908
- providerOptions: ANTHROPIC_ADAPTIVE,
909
899
  exposure: "catalog",
910
900
  display: {
901
+ chat: { providerOptions: ANTHROPIC_ADAPTIVE },
911
902
  provider: "anthropic",
912
903
  costTier: 3,
913
904
  description: "Anthropic Claude Sonnet 5 current balanced model; text and image input, 1M-token context."
@@ -915,16 +906,14 @@ var TEXT_MODELS = [
915
906
  capabilities: {
916
907
  reasoning: true,
917
908
  vision: true,
918
- tools: true,
919
- structuredOutput: true,
920
909
  contextWindow: 1e6
921
910
  }
922
911
  }),
923
912
  text("claude-opus-4-8", "Claude Opus 4.8", "claude-opus-4-8", {
924
- providerOptions: ANTHROPIC_ADAPTIVE,
925
913
  exposure: "catalog",
926
914
  aliases: ["claude-opus-4.8", "claude-opus-4", "claude-opus-4.0", "claude-opus-4-20250514"],
927
915
  display: {
916
+ chat: { providerOptions: ANTHROPIC_ADAPTIVE },
928
917
  provider: "anthropic",
929
918
  costTier: 3,
930
919
  description: "Anthropic Claude Opus 4.8 (legacy) frontier model; text and image input, 1M-token context."
@@ -932,16 +921,14 @@ var TEXT_MODELS = [
932
921
  capabilities: {
933
922
  reasoning: true,
934
923
  vision: true,
935
- tools: true,
936
- structuredOutput: true,
937
924
  contextWindow: 1e6
938
925
  }
939
926
  }),
940
927
  text("claude-haiku-4-5", "Claude Haiku 4.5", "claude-haiku-4-5", {
941
- providerOptions: ANTHROPIC_THINKING,
942
928
  exposure: "catalog",
943
929
  aliases: ["claude-haiku-4.5", "claude-haiku-4-5-20251001", "claude-haiku-4"],
944
930
  display: {
931
+ chat: { providerOptions: ANTHROPIC_THINKING },
945
932
  provider: "anthropic",
946
933
  costTier: 1,
947
934
  description: "Anthropic Claude Haiku 4.5 fast model with near-frontier intelligence; text and image input, 200K-token context."
@@ -949,8 +936,6 @@ var TEXT_MODELS = [
949
936
  capabilities: {
950
937
  reasoning: true,
951
938
  vision: true,
952
- tools: true,
953
- structuredOutput: true,
954
939
  contextWindow: 2e5
955
940
  }
956
941
  }),
@@ -964,8 +949,6 @@ var TEXT_MODELS = [
964
949
  },
965
950
  capabilities: {
966
951
  vision: true,
967
- tools: true,
968
- structuredOutput: true,
969
952
  contextWindow: 1e6
970
953
  }
971
954
  }),
@@ -978,8 +961,6 @@ var TEXT_MODELS = [
978
961
  },
979
962
  capabilities: {
980
963
  vision: true,
981
- tools: true,
982
- structuredOutput: true,
983
964
  contextWindow: 1e6
984
965
  }
985
966
  }),
@@ -992,8 +973,6 @@ var TEXT_MODELS = [
992
973
  },
993
974
  capabilities: {
994
975
  vision: true,
995
- tools: true,
996
- structuredOutput: true,
997
976
  contextWindow: 1048576
998
977
  }
999
978
  }),
@@ -1006,8 +985,6 @@ var TEXT_MODELS = [
1006
985
  },
1007
986
  capabilities: {
1008
987
  vision: true,
1009
- tools: true,
1010
- structuredOutput: true,
1011
988
  contextWindow: 1048576
1012
989
  }
1013
990
  }),
@@ -1020,8 +997,6 @@ var TEXT_MODELS = [
1020
997
  },
1021
998
  capabilities: {
1022
999
  vision: true,
1023
- tools: true,
1024
- structuredOutput: true,
1025
1000
  contextWindow: 1048576
1026
1001
  }
1027
1002
  }),
@@ -1034,8 +1009,6 @@ var TEXT_MODELS = [
1034
1009
  },
1035
1010
  capabilities: {
1036
1011
  vision: true,
1037
- tools: true,
1038
- structuredOutput: true,
1039
1012
  contextWindow: 1048576
1040
1013
  }
1041
1014
  }),
@@ -1048,8 +1021,6 @@ var TEXT_MODELS = [
1048
1021
  },
1049
1022
  capabilities: {
1050
1023
  vision: true,
1051
- tools: true,
1052
- structuredOutput: true,
1053
1024
  contextWindow: 1048576
1054
1025
  }
1055
1026
  }),
@@ -1063,8 +1034,6 @@ var TEXT_MODELS = [
1063
1034
  },
1064
1035
  capabilities: {
1065
1036
  vision: true,
1066
- tools: true,
1067
- structuredOutput: true,
1068
1037
  contextWindow: 1048576
1069
1038
  }
1070
1039
  }),
@@ -1077,8 +1046,6 @@ var TEXT_MODELS = [
1077
1046
  },
1078
1047
  capabilities: {
1079
1048
  vision: true,
1080
- tools: true,
1081
- structuredOutput: true,
1082
1049
  contextWindow: 1048576
1083
1050
  }
1084
1051
  }),
@@ -1097,8 +1064,6 @@ var TEXT_MODELS = [
1097
1064
  },
1098
1065
  capabilities: {
1099
1066
  vision: true,
1100
- tools: true,
1101
- structuredOutput: true,
1102
1067
  contextWindow: 1048576
1103
1068
  }
1104
1069
  }),
@@ -1111,8 +1076,6 @@ var TEXT_MODELS = [
1111
1076
  },
1112
1077
  capabilities: {
1113
1078
  vision: true,
1114
- tools: false,
1115
- structuredOutput: true,
1116
1079
  contextWindow: 128e3
1117
1080
  }
1118
1081
  }),
@@ -1125,8 +1088,6 @@ var TEXT_MODELS = [
1125
1088
  },
1126
1089
  capabilities: {
1127
1090
  vision: true,
1128
- tools: false,
1129
- structuredOutput: true,
1130
1091
  contextWindow: 2e5
1131
1092
  }
1132
1093
  }),
@@ -1139,8 +1100,6 @@ var TEXT_MODELS = [
1139
1100
  },
1140
1101
  capabilities: {
1141
1102
  vision: true,
1142
- tools: false,
1143
- structuredOutput: true,
1144
1103
  contextWindow: 128e3
1145
1104
  }
1146
1105
  }),
@@ -1148,10 +1107,10 @@ var TEXT_MODELS = [
1148
1107
  // Flash rates (https://api-docs.deepseek.com/news/news260910/); the old id
1149
1108
  // stays an alias so stored selections keep resolving.
1150
1109
  text("deepseek-flash", "DeepSeek V4.1 Flash", "deepseek-flash", {
1151
- providerOptions: DEEPSEEK_THINKING,
1152
1110
  aliases: ["deepseek-v4-flash"],
1153
1111
  exposure: "catalog",
1154
1112
  display: {
1113
+ chat: { providerOptions: DEEPSEEK_THINKING },
1155
1114
  provider: "deepseek",
1156
1115
  costTier: 1,
1157
1116
  recommended: true,
@@ -1160,15 +1119,13 @@ var TEXT_MODELS = [
1160
1119
  capabilities: {
1161
1120
  reasoning: true,
1162
1121
  vision: true,
1163
- tools: true,
1164
- structuredOutput: true,
1165
1122
  contextWindow: 1e6
1166
1123
  }
1167
1124
  }),
1168
1125
  text("deepseek-v4-pro", "DeepSeek V4 Pro", "deepseek-v4-pro", {
1169
- providerOptions: DEEPSEEK_THINKING,
1170
1126
  exposure: "catalog",
1171
1127
  display: {
1128
+ chat: { providerOptions: DEEPSEEK_THINKING },
1172
1129
  provider: "deepseek",
1173
1130
  costTier: 2,
1174
1131
  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."
@@ -1176,8 +1133,6 @@ var TEXT_MODELS = [
1176
1133
  capabilities: {
1177
1134
  reasoning: true,
1178
1135
  vision: false,
1179
- tools: true,
1180
- structuredOutput: true,
1181
1136
  contextWindow: 1e6
1182
1137
  }
1183
1138
  }),
@@ -1191,16 +1146,16 @@ var TEXT_MODELS = [
1191
1146
  },
1192
1147
  capabilities: {
1193
1148
  vision: true,
1194
- tools: true,
1195
- structuredOutput: true,
1196
1149
  contextWindow: 1e6
1197
1150
  }
1198
1151
  }),
1199
1152
  // Moonshot retired kimi-k2.5 on 2026-08-31 and no longer publishes its specs.
1200
1153
  text("kimi-k2.5", "Kimi K2.5", "kimi-k2.5", {
1201
- defaults: { temperature: 1 },
1202
- exposure: "catalog",
1154
+ lifecycle: "deprecated",
1155
+ replacedBy: "kimi-k3",
1156
+ exposure: "internal",
1203
1157
  display: {
1158
+ chat: { temperature: 1 },
1204
1159
  provider: "moonshot",
1205
1160
  costTier: 2,
1206
1161
  description: "Moonshot Kimi K2.5; the provider retired the model on 2026-08-31 and calls now return a model-not-found error."
@@ -1208,9 +1163,9 @@ var TEXT_MODELS = [
1208
1163
  capabilities: {}
1209
1164
  }),
1210
1165
  text("kimi-k3", "Kimi K3", "kimi-k3", {
1211
- defaults: { temperature: 1 },
1212
1166
  exposure: "catalog",
1213
1167
  display: {
1168
+ chat: { temperature: 1 },
1214
1169
  provider: "moonshot",
1215
1170
  costTier: 2,
1216
1171
  description: "Moonshot Kimi K3 flagship model with native visual understanding and always-on thinking; text, image, and video input, 1M-token context."
@@ -1218,8 +1173,6 @@ var TEXT_MODELS = [
1218
1173
  capabilities: {
1219
1174
  reasoning: true,
1220
1175
  vision: true,
1221
- tools: true,
1222
- structuredOutput: true,
1223
1176
  contextWindow: 1e6
1224
1177
  }
1225
1178
  }),
@@ -1233,12 +1186,12 @@ var TEXT_MODELS = [
1233
1186
  costTier: 2,
1234
1187
  description: "MiniMax M3 frontier multimodal model for agentic reasoning, tool use, and coding; text, image, and video input, 1M-token context."
1235
1188
  },
1236
- capabilities: { vision: true, tools: true, contextWindow: 1e6 }
1189
+ capabilities: { vision: true, contextWindow: 1e6 }
1237
1190
  })
1238
1191
  ];
1239
1192
 
1240
1193
  // src/catalog/video.ts
1241
- var VIDEO_USAGE = { unit: "seconds", modality: "VIDEO" };
1194
+ var VIDEO_USAGE = { unit: "seconds" };
1242
1195
  var SEEDANCE_RATIOS = ["21:9", "16:9", "4:3", "1:1", "3:4", "9:16", "adaptive"];
1243
1196
  var KLING_RATIOS = ["16:9", "9:16", "1:1", "adaptive"];
1244
1197
  var OMNI_RATIOS = ["16:9", "9:16"];
@@ -1247,7 +1200,8 @@ var H3_RATIOS = ["21:9", "16:9", "4:3", "1:1", "3:4", "9:16"];
1247
1200
  var H3_REFERENCE_RATIOS = ["adaptive", ...H3_RATIOS];
1248
1201
  var NEGATIVE_PROMPT = "blur, distort, and low quality";
1249
1202
  var FRAMES_EXCLUDE_REFERENCES = { framesExcludeReferences: true };
1250
- var GOOGLE_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
1203
+ var BYTEDANCE_LOGO = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/3bba5d81-4e57-4e71-911b-cdfa05acca2c_compressed.png";
1204
+ var GOOGLE_LOGO2 = "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/192485d2-a76a-4657-9c06-930b2c70badd_compressed.png";
1251
1205
  var VIDEO_MODELS = [
1252
1206
  {
1253
1207
  id: "veo-3.1",
@@ -1276,7 +1230,7 @@ var VIDEO_MODELS = [
1276
1230
  display: {
1277
1231
  provider: "google",
1278
1232
  description: "Google's highest-quality video generation model. Supports up to 4K resolution and 8-second clips with reference image conditioning.",
1279
- logo: GOOGLE_LOGO
1233
+ logo: GOOGLE_LOGO2
1280
1234
  },
1281
1235
  capabilities: { ...FRAMES_EXCLUDE_REFERENCES }
1282
1236
  },
@@ -1368,7 +1322,7 @@ var VIDEO_MODELS = [
1368
1322
  display: {
1369
1323
  provider: "google",
1370
1324
  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.",
1371
- logo: GOOGLE_LOGO
1325
+ logo: GOOGLE_LOGO2
1372
1326
  },
1373
1327
  capabilities: { acceptsSourceVideo: true }
1374
1328
  },
@@ -1393,6 +1347,7 @@ var VIDEO_MODELS = [
1393
1347
  pricingKind: "video_per_second",
1394
1348
  display: {
1395
1349
  provider: "google",
1350
+ logo: GOOGLE_LOGO2,
1396
1351
  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."
1397
1352
  },
1398
1353
  capabilities: { acceptsSourceVideo: true }
@@ -1410,7 +1365,7 @@ var VIDEO_MODELS = [
1410
1365
  constraints: {
1411
1366
  aspectRatios: [...SEEDANCE_RATIOS],
1412
1367
  resolutions: ["480p", "720p", "1080p", "4k"],
1413
- durations: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1368
+ durations: { min: 4, max: 15 },
1414
1369
  durationPresets: [4, 6, 8, 10, 12, 15],
1415
1370
  references: { images: 9, videos: 3, audios: 3, audioOnly: false },
1416
1371
  ratioIgnoredWith: ["firstFrame"],
@@ -1427,7 +1382,7 @@ var VIDEO_MODELS = [
1427
1382
  display: {
1428
1383
  provider: "bytedance",
1429
1384
  description: "High-quality AI video generation with reference image conditioning. Supports 4-15 second clips with human preprocessing.",
1430
- logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/3bba5d81-4e57-4e71-911b-cdfa05acca2c_compressed.png"
1385
+ logo: BYTEDANCE_LOGO
1431
1386
  },
1432
1387
  capabilities: { acceptsSourceVideo: true, ...FRAMES_EXCLUDE_REFERENCES }
1433
1388
  },
@@ -1443,7 +1398,7 @@ var VIDEO_MODELS = [
1443
1398
  constraints: {
1444
1399
  aspectRatios: [...SEEDANCE_RATIOS],
1445
1400
  resolutions: ["480p", "720p"],
1446
- durations: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
1401
+ durations: { min: 4, max: 15 },
1447
1402
  references: { images: 9, videos: 3, audios: 3, audioOnly: false },
1448
1403
  ratioIgnoredWith: ["firstFrame"],
1449
1404
  supports: ["generateAudio", "seed", "lastFrame", "watermark"]
@@ -1458,6 +1413,7 @@ var VIDEO_MODELS = [
1458
1413
  pricingKind: "video_per_second",
1459
1414
  display: {
1460
1415
  provider: "bytedance",
1416
+ logo: BYTEDANCE_LOGO,
1461
1417
  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."
1462
1418
  },
1463
1419
  capabilities: { acceptsSourceVideo: true, ...FRAMES_EXCLUDE_REFERENCES }
@@ -1490,6 +1446,7 @@ var VIDEO_MODELS = [
1490
1446
  pricingKind: "video_per_second",
1491
1447
  display: {
1492
1448
  provider: "bytedance",
1449
+ logo: BYTEDANCE_LOGO,
1493
1450
  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."
1494
1451
  },
1495
1452
  capabilities: { acceptsSourceVideo: true, ...FRAMES_EXCLUDE_REFERENCES }
@@ -1514,7 +1471,7 @@ var VIDEO_MODELS = [
1514
1471
  },
1515
1472
  // No resolution default: xAI picks its own unless the caller asks.
1516
1473
  defaults: { durationSeconds: 8, aspectRatio: "16:9" },
1517
- usage: { unit: "reported_cost_usd", modality: "VIDEO" },
1474
+ usage: { unit: "reported_cost_usd", slug: "grok" },
1518
1475
  pricingKind: "video_per_second",
1519
1476
  display: {
1520
1477
  provider: "xai",
@@ -1544,10 +1501,11 @@ var VIDEO_MODELS = [
1544
1501
  cfgScale: 0.5,
1545
1502
  negativePrompt: NEGATIVE_PROMPT
1546
1503
  },
1547
- usage: { ...VIDEO_USAGE, slug: "grok" },
1504
+ usage: { ...VIDEO_USAGE },
1548
1505
  pricingKind: "video_per_second",
1549
1506
  display: {
1550
1507
  provider: "kuaishou",
1508
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/kling-color.png",
1551
1509
  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."
1552
1510
  },
1553
1511
  capabilities: { ...FRAMES_EXCLUDE_REFERENCES }
@@ -1578,6 +1536,7 @@ var VIDEO_MODELS = [
1578
1536
  pricingKind: "video_per_second",
1579
1537
  display: {
1580
1538
  provider: "kuaishou",
1539
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/kling-color.png",
1581
1540
  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."
1582
1541
  },
1583
1542
  capabilities: { ...FRAMES_EXCLUDE_REFERENCES }
@@ -1611,10 +1570,11 @@ var VIDEO_MODELS = [
1611
1570
  supports: ["generateAudio", "lastFrame"]
1612
1571
  },
1613
1572
  defaults: { durationSeconds: 5, aspectRatio: "16:9", generateAudio: false, mode: "pro" },
1614
- usage: { unit: "compute_seconds", modality: "VIDEO" },
1573
+ usage: { unit: "compute_seconds" },
1615
1574
  pricingKind: "video_per_second",
1616
1575
  display: {
1617
1576
  provider: "kuaishou",
1577
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/kling-color.png",
1618
1578
  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."
1619
1579
  },
1620
1580
  capabilities: {}
@@ -1644,6 +1604,7 @@ var VIDEO_MODELS = [
1644
1604
  pricingKind: "video_per_second",
1645
1605
  display: {
1646
1606
  provider: "minimax",
1607
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png",
1647
1608
  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."
1648
1609
  },
1649
1610
  capabilities: { ...FRAMES_EXCLUDE_REFERENCES }
@@ -1673,6 +1634,7 @@ var VIDEO_MODELS = [
1673
1634
  pricingKind: "video_per_second",
1674
1635
  display: {
1675
1636
  provider: "minimax",
1637
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png",
1676
1638
  description: "High-speed MiniMax H3 Max variant for text-to-video and image-to-video (first/last frame) only, up to 768p."
1677
1639
  },
1678
1640
  capabilities: { ...FRAMES_EXCLUDE_REFERENCES }
@@ -1703,6 +1665,7 @@ var VIDEO_MODELS = [
1703
1665
  pricingKind: "video_per_second",
1704
1666
  display: {
1705
1667
  provider: "minimax",
1668
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png",
1706
1669
  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."
1707
1670
  },
1708
1671
  capabilities: {}
@@ -1733,6 +1696,7 @@ var VIDEO_MODELS = [
1733
1696
  pricingKind: "video_per_second",
1734
1697
  display: {
1735
1698
  provider: "minimax",
1699
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png",
1736
1700
  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."
1737
1701
  },
1738
1702
  capabilities: {}
@@ -1758,6 +1722,7 @@ var VIDEO_MODELS = [
1758
1722
  pricingKind: "video_per_second",
1759
1723
  display: {
1760
1724
  provider: "kuaishou",
1725
+ logo: "https://cdn.jsdelivr.net/npm/@lobehub/icons-static-png@1.97.0/light/kling-color.png",
1761
1726
  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."
1762
1727
  },
1763
1728
  capabilities: { acceptsSourceVideo: true }
@@ -1777,10 +1742,11 @@ var VIDEO_MODELS = [
1777
1742
  supports: ["lastFrame"]
1778
1743
  },
1779
1744
  defaults: { durationSeconds: 6, resolution: "768p" },
1780
- usage: { unit: "compute_seconds", modality: "VIDEO" },
1745
+ usage: { unit: "compute_seconds" },
1781
1746
  pricingKind: "video_per_second",
1782
1747
  display: {
1783
1748
  provider: "minimax",
1749
+ logo: "https://d31vvfpk2ppdyq.cloudfront.net/assets/image/f4c2e906-28b7-4a4a-b491-df8fef7808ed.png",
1784
1750
  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."
1785
1751
  },
1786
1752
  capabilities: {}