@just-every/ensemble 0.2.268 → 0.2.270

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.
Files changed (118) hide show
  1. package/README.md +11 -10
  2. package/dist/cjs/core/ensemble_live.cjs +4 -2
  3. package/dist/cjs/core/ensemble_live.d.ts.map +1 -1
  4. package/dist/cjs/core/ensemble_live.js.map +1 -1
  5. package/dist/cjs/core/ensemble_video.cjs +37 -0
  6. package/dist/cjs/core/ensemble_video.d.ts +3 -0
  7. package/dist/cjs/core/ensemble_video.d.ts.map +1 -0
  8. package/dist/cjs/core/ensemble_video.js.map +1 -0
  9. package/dist/cjs/data/model_data.cjs +362 -152
  10. package/dist/cjs/data/model_data.d.ts +4 -0
  11. package/dist/cjs/data/model_data.d.ts.map +1 -1
  12. package/dist/cjs/data/model_data.js.map +1 -1
  13. package/dist/cjs/index.cjs +3 -1
  14. package/dist/cjs/index.d.ts +1 -0
  15. package/dist/cjs/index.d.ts.map +1 -1
  16. package/dist/cjs/index.js.map +1 -1
  17. package/dist/cjs/model_providers/deepseek.cjs +6 -97
  18. package/dist/cjs/model_providers/deepseek.d.ts +1 -1
  19. package/dist/cjs/model_providers/deepseek.d.ts.map +1 -1
  20. package/dist/cjs/model_providers/deepseek.js.map +1 -1
  21. package/dist/cjs/model_providers/deepseek_v4_contract.cjs +19 -0
  22. package/dist/cjs/model_providers/deepseek_v4_contract.d.ts +3 -0
  23. package/dist/cjs/model_providers/deepseek_v4_contract.d.ts.map +1 -0
  24. package/dist/cjs/model_providers/deepseek_v4_contract.js.map +1 -0
  25. package/dist/cjs/model_providers/gemini.cjs +10 -4
  26. package/dist/cjs/model_providers/gemini.d.ts.map +1 -1
  27. package/dist/cjs/model_providers/gemini.js.map +1 -1
  28. package/dist/cjs/model_providers/gemini_model_contract.cjs +12 -0
  29. package/dist/cjs/model_providers/gemini_model_contract.d.ts +2 -0
  30. package/dist/cjs/model_providers/gemini_model_contract.d.ts.map +1 -0
  31. package/dist/cjs/model_providers/gemini_model_contract.js.map +1 -0
  32. package/dist/cjs/model_providers/grok.cjs +81 -11
  33. package/dist/cjs/model_providers/grok.d.ts +2 -1
  34. package/dist/cjs/model_providers/grok.d.ts.map +1 -1
  35. package/dist/cjs/model_providers/grok.js.map +1 -1
  36. package/dist/cjs/model_providers/grok_imagine_pricing.cjs +25 -0
  37. package/dist/cjs/model_providers/grok_imagine_pricing.d.ts +10 -0
  38. package/dist/cjs/model_providers/grok_imagine_pricing.d.ts.map +1 -0
  39. package/dist/cjs/model_providers/grok_imagine_pricing.js.map +1 -0
  40. package/dist/cjs/model_providers/model_provider.cjs +2 -0
  41. package/dist/cjs/model_providers/model_provider.d.ts.map +1 -1
  42. package/dist/cjs/model_providers/model_provider.js.map +1 -1
  43. package/dist/cjs/model_providers/openai.cjs +30 -0
  44. package/dist/cjs/model_providers/openai.d.ts +2 -1
  45. package/dist/cjs/model_providers/openai.d.ts.map +1 -1
  46. package/dist/cjs/model_providers/openai.js.map +1 -1
  47. package/dist/cjs/model_providers/openai_chat.cjs +9 -0
  48. package/dist/cjs/model_providers/openai_chat.d.ts.map +1 -1
  49. package/dist/cjs/model_providers/openai_chat.js.map +1 -1
  50. package/dist/cjs/model_providers/openai_realtime.cjs +261 -0
  51. package/dist/cjs/model_providers/openai_realtime.d.ts +40 -0
  52. package/dist/cjs/model_providers/openai_realtime.d.ts.map +1 -0
  53. package/dist/cjs/model_providers/openai_realtime.js.map +1 -0
  54. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  55. package/dist/cjs/types/types.d.ts +28 -3
  56. package/dist/cjs/types/types.d.ts.map +1 -1
  57. package/dist/cjs/utils/cost_tracker.cjs +12 -0
  58. package/dist/cjs/utils/cost_tracker.d.ts.map +1 -1
  59. package/dist/cjs/utils/cost_tracker.js.map +1 -1
  60. package/dist/core/ensemble_live.d.ts.map +1 -1
  61. package/dist/core/ensemble_live.js +4 -2
  62. package/dist/core/ensemble_live.js.map +1 -1
  63. package/dist/core/ensemble_video.d.ts +3 -0
  64. package/dist/core/ensemble_video.d.ts.map +1 -0
  65. package/dist/core/ensemble_video.js +34 -0
  66. package/dist/core/ensemble_video.js.map +1 -0
  67. package/dist/data/model_data.d.ts +4 -0
  68. package/dist/data/model_data.d.ts.map +1 -1
  69. package/dist/data/model_data.js +362 -152
  70. package/dist/data/model_data.js.map +1 -1
  71. package/dist/index.d.ts +1 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +1 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/model_providers/deepseek.d.ts +1 -1
  76. package/dist/model_providers/deepseek.d.ts.map +1 -1
  77. package/dist/model_providers/deepseek.js +6 -97
  78. package/dist/model_providers/deepseek.js.map +1 -1
  79. package/dist/model_providers/deepseek_v4_contract.d.ts +3 -0
  80. package/dist/model_providers/deepseek_v4_contract.d.ts.map +1 -0
  81. package/dist/model_providers/deepseek_v4_contract.js +16 -0
  82. package/dist/model_providers/deepseek_v4_contract.js.map +1 -0
  83. package/dist/model_providers/gemini.d.ts.map +1 -1
  84. package/dist/model_providers/gemini.js +10 -4
  85. package/dist/model_providers/gemini.js.map +1 -1
  86. package/dist/model_providers/gemini_model_contract.d.ts +2 -0
  87. package/dist/model_providers/gemini_model_contract.d.ts.map +1 -0
  88. package/dist/model_providers/gemini_model_contract.js +9 -0
  89. package/dist/model_providers/gemini_model_contract.js.map +1 -0
  90. package/dist/model_providers/grok.d.ts +2 -1
  91. package/dist/model_providers/grok.d.ts.map +1 -1
  92. package/dist/model_providers/grok.js +81 -11
  93. package/dist/model_providers/grok.js.map +1 -1
  94. package/dist/model_providers/grok_imagine_pricing.d.ts +10 -0
  95. package/dist/model_providers/grok_imagine_pricing.d.ts.map +1 -0
  96. package/dist/model_providers/grok_imagine_pricing.js +21 -0
  97. package/dist/model_providers/grok_imagine_pricing.js.map +1 -0
  98. package/dist/model_providers/model_provider.d.ts.map +1 -1
  99. package/dist/model_providers/model_provider.js +2 -0
  100. package/dist/model_providers/model_provider.js.map +1 -1
  101. package/dist/model_providers/openai.d.ts +2 -1
  102. package/dist/model_providers/openai.d.ts.map +1 -1
  103. package/dist/model_providers/openai.js +30 -0
  104. package/dist/model_providers/openai.js.map +1 -1
  105. package/dist/model_providers/openai_chat.d.ts.map +1 -1
  106. package/dist/model_providers/openai_chat.js +9 -0
  107. package/dist/model_providers/openai_chat.js.map +1 -1
  108. package/dist/model_providers/openai_realtime.d.ts +40 -0
  109. package/dist/model_providers/openai_realtime.d.ts.map +1 -0
  110. package/dist/model_providers/openai_realtime.js +223 -0
  111. package/dist/model_providers/openai_realtime.js.map +1 -0
  112. package/dist/tsconfig.tsbuildinfo +1 -1
  113. package/dist/types/types.d.ts +28 -3
  114. package/dist/types/types.d.ts.map +1 -1
  115. package/dist/utils/cost_tracker.d.ts.map +1 -1
  116. package/dist/utils/cost_tracker.js +12 -0
  117. package/dist/utils/cost_tracker.js.map +1 -1
  118. package/package.json +1 -1
@@ -7,7 +7,7 @@ exports.MODEL_CLASSES = {
7
7
  standard: {
8
8
  models: [
9
9
  'gpt-5.5',
10
- 'gemini-3-flash-preview',
10
+ 'gemini-3.6-flash',
11
11
  'claude-sonnet-5',
12
12
  'grok-4.5',
13
13
  ],
@@ -16,7 +16,7 @@ exports.MODEL_CLASSES = {
16
16
  mini: {
17
17
  models: [
18
18
  'gpt-5.4-nano',
19
- 'gemini-2.5-flash-lite',
19
+ 'gemini-3.5-flash-lite',
20
20
  'claude-haiku-4-5-20251001',
21
21
  'grok-3-mini',
22
22
  ],
@@ -43,7 +43,7 @@ exports.MODEL_CLASSES = {
43
43
  reasoning_mini: {
44
44
  models: [
45
45
  'gpt-5.4-mini',
46
- 'gemini-3-flash-preview',
46
+ 'gemini-3.5-flash-lite',
47
47
  'claude-sonnet-5',
48
48
  'grok-3-mini',
49
49
  ],
@@ -80,7 +80,7 @@ exports.MODEL_CLASSES = {
80
80
  writing: {
81
81
  models: [
82
82
  'gpt-5.5',
83
- 'gemini-3-flash-preview',
83
+ 'gemini-3.6-flash',
84
84
  'claude-sonnet-5',
85
85
  'grok-4.5',
86
86
  ],
@@ -89,7 +89,7 @@ exports.MODEL_CLASSES = {
89
89
  summary: {
90
90
  models: [
91
91
  'gpt-5-nano',
92
- 'gemini-2.5-flash-lite',
92
+ 'gemini-3.5-flash-lite',
93
93
  'claude-haiku-4-5-20251001',
94
94
  'grok-3-mini',
95
95
  ],
@@ -107,7 +107,7 @@ exports.MODEL_CLASSES = {
107
107
  vision_mini: {
108
108
  models: [
109
109
  'gpt-5.4-mini',
110
- 'gemini-3-flash-preview',
110
+ 'gemini-3.5-flash-lite',
111
111
  'claude-haiku-4-5-20251001',
112
112
  'grok-3-mini',
113
113
  ],
@@ -139,13 +139,17 @@ exports.MODEL_CLASSES = {
139
139
  'luma-photon-1',
140
140
  'ideogram-3.0',
141
141
  'midjourney-v7',
142
- 'grok-imagine-image-pro',
142
+ 'grok-imagine-image-quality',
143
143
  'flux-kontext-pro',
144
144
  'stability-ultra',
145
145
  'runway-gen4-image',
146
146
  'recraft-v3',
147
147
  ],
148
148
  },
149
+ video_generation: {
150
+ models: ['grok-imagine-video', 'grok-imagine-video-1.5'],
151
+ description: 'Video generation and image-to-video models',
152
+ },
149
153
  embedding: {
150
154
  models: [
151
155
  'text-embedding-3-large',
@@ -156,7 +160,7 @@ exports.MODEL_CLASSES = {
156
160
  voice: {
157
161
  models: [
158
162
  'tts-1-hd',
159
- 'eleven_multilingual_v2',
163
+ 'eleven_v3',
160
164
  'gemini-3.1-flash-tts-preview',
161
165
  ],
162
166
  description: 'Text-to-Speech models for voice generation',
@@ -449,8 +453,8 @@ exports.MODEL_REGISTRY = [
449
453
  id: 'meta-llama/llama-4-maverick',
450
454
  provider: 'openrouter',
451
455
  cost: {
452
- input_per_million: 0.15,
453
- output_per_million: 0.6,
456
+ input_per_million: 0.2,
457
+ output_per_million: 0.8,
454
458
  },
455
459
  features: {
456
460
  context_length: 1048576,
@@ -474,11 +478,11 @@ exports.MODEL_REGISTRY = [
474
478
  id: 'meta-llama/llama-4-scout',
475
479
  provider: 'openrouter',
476
480
  cost: {
477
- input_per_million: 0.08,
481
+ input_per_million: 0.1,
478
482
  output_per_million: 0.3,
479
483
  },
480
484
  features: {
481
- context_length: 10000000,
485
+ context_length: 1310720,
482
486
  input_modality: ['text', 'image'],
483
487
  output_modality: ['text'],
484
488
  tool_use: true,
@@ -544,12 +548,27 @@ exports.MODEL_REGISTRY = [
544
548
  },
545
549
  {
546
550
  id: 'grok-4.5',
547
- aliases: ['grok-4.5-latest', 'grok-build-latest'],
551
+ aliases: ['grok-4.5-latest'],
548
552
  provider: 'xai',
549
553
  cost: {
550
- input_per_million: 2.0,
551
- output_per_million: 6.0,
552
- cached_input_per_million: 0.5,
554
+ input_per_million: {
555
+ threshold_tokens: 200_000,
556
+ price_below_threshold_per_million: 2,
557
+ price_above_threshold_per_million: 4,
558
+ tier_basis: 'input_tokens',
559
+ },
560
+ cached_input_per_million: {
561
+ threshold_tokens: 200_000,
562
+ price_below_threshold_per_million: 0.3,
563
+ price_above_threshold_per_million: 0.6,
564
+ tier_basis: 'input_tokens',
565
+ },
566
+ output_per_million: {
567
+ threshold_tokens: 200_000,
568
+ price_below_threshold_per_million: 6,
569
+ price_above_threshold_per_million: 12,
570
+ tier_basis: 'input_tokens',
571
+ },
553
572
  },
554
573
  features: {
555
574
  context_length: 500_000,
@@ -565,10 +584,27 @@ exports.MODEL_REGISTRY = [
565
584
  },
566
585
  {
567
586
  id: 'grok-4.3',
587
+ aliases: ['grok-4.3-latest', 'grok-latest'],
568
588
  provider: 'xai',
569
589
  cost: {
570
- input_per_million: 1.25,
571
- output_per_million: 2.5,
590
+ input_per_million: {
591
+ threshold_tokens: 200_000,
592
+ price_below_threshold_per_million: 1.25,
593
+ price_above_threshold_per_million: 2.5,
594
+ tier_basis: 'input_tokens',
595
+ },
596
+ cached_input_per_million: {
597
+ threshold_tokens: 200_000,
598
+ price_below_threshold_per_million: 0.2,
599
+ price_above_threshold_per_million: 0.4,
600
+ tier_basis: 'input_tokens',
601
+ },
602
+ output_per_million: {
603
+ threshold_tokens: 200_000,
604
+ price_below_threshold_per_million: 2.5,
605
+ price_above_threshold_per_million: 5,
606
+ tier_basis: 'input_tokens',
607
+ },
572
608
  },
573
609
  features: {
574
610
  context_length: 1_000_000,
@@ -583,11 +619,27 @@ exports.MODEL_REGISTRY = [
583
619
  },
584
620
  {
585
621
  id: 'grok-build-0.1',
586
- aliases: ['grok-build'],
622
+ aliases: ['grok-build', 'grok-build-latest', 'grok-code-fast-1', 'grok-code-fast'],
587
623
  provider: 'xai',
588
624
  cost: {
589
- input_per_million: 1.0,
590
- output_per_million: 2.0,
625
+ input_per_million: {
626
+ threshold_tokens: 200_000,
627
+ price_below_threshold_per_million: 1,
628
+ price_above_threshold_per_million: 2,
629
+ tier_basis: 'input_tokens',
630
+ },
631
+ cached_input_per_million: {
632
+ threshold_tokens: 200_000,
633
+ price_below_threshold_per_million: 0.2,
634
+ price_above_threshold_per_million: 0.4,
635
+ tier_basis: 'input_tokens',
636
+ },
637
+ output_per_million: {
638
+ threshold_tokens: 200_000,
639
+ price_below_threshold_per_million: 2,
640
+ price_above_threshold_per_million: 4,
641
+ tier_basis: 'input_tokens',
642
+ },
591
643
  },
592
644
  features: {
593
645
  context_length: 256000,
@@ -653,16 +705,31 @@ exports.MODEL_REGISTRY = [
653
705
  description: 'Grok 4.1 Fast without reasoning. 2M context, flat pricing, text/image input.',
654
706
  },
655
707
  {
656
- id: 'grok-4',
657
- aliases: ['grok-4-2025-09-01', 'grok-4.20-0309-reasoning'],
708
+ id: 'grok-4.20-0309-reasoning',
709
+ aliases: ['grok-4', 'grok-4.20', 'grok-4.20-reasoning', 'grok-4.20-reasoning-latest'],
658
710
  provider: 'xai',
659
711
  cost: {
660
- input_per_million: 2.0,
661
- output_per_million: 6.0,
662
- cached_input_per_million: 0.2,
712
+ input_per_million: {
713
+ threshold_tokens: 200_000,
714
+ price_below_threshold_per_million: 1.25,
715
+ price_above_threshold_per_million: 2.5,
716
+ tier_basis: 'input_tokens',
717
+ },
718
+ cached_input_per_million: {
719
+ threshold_tokens: 200_000,
720
+ price_below_threshold_per_million: 0.2,
721
+ price_above_threshold_per_million: 0.4,
722
+ tier_basis: 'input_tokens',
723
+ },
724
+ output_per_million: {
725
+ threshold_tokens: 200_000,
726
+ price_below_threshold_per_million: 2.5,
727
+ price_above_threshold_per_million: 5,
728
+ tier_basis: 'input_tokens',
729
+ },
663
730
  },
664
731
  features: {
665
- context_length: 2_000_000,
732
+ context_length: 1_000_000,
666
733
  input_modality: ['text', 'image'],
667
734
  output_modality: ['text'],
668
735
  tool_use: true,
@@ -676,18 +743,34 @@ exports.MODEL_REGISTRY = [
676
743
  code: 88,
677
744
  reasoning: 85,
678
745
  },
679
- description: 'Grok-4 stable alias, currently resolving to the Grok 4.20 reasoning model with 2M context.',
746
+ description: 'Grok 4.20 reasoning model with 1M context and long-context pricing above 200k input tokens.',
680
747
  },
681
748
  {
682
749
  id: 'grok-4.20-0309-non-reasoning',
750
+ aliases: ['grok-4.20-non-reasoning', 'grok-4.20-non-reasoning-latest'],
683
751
  provider: 'xai',
684
752
  cost: {
685
- input_per_million: 2.0,
686
- output_per_million: 6.0,
687
- cached_input_per_million: 0.2,
753
+ input_per_million: {
754
+ threshold_tokens: 200_000,
755
+ price_below_threshold_per_million: 1.25,
756
+ price_above_threshold_per_million: 2.5,
757
+ tier_basis: 'input_tokens',
758
+ },
759
+ cached_input_per_million: {
760
+ threshold_tokens: 200_000,
761
+ price_below_threshold_per_million: 0.2,
762
+ price_above_threshold_per_million: 0.4,
763
+ tier_basis: 'input_tokens',
764
+ },
765
+ output_per_million: {
766
+ threshold_tokens: 200_000,
767
+ price_below_threshold_per_million: 2.5,
768
+ price_above_threshold_per_million: 5,
769
+ tier_basis: 'input_tokens',
770
+ },
688
771
  },
689
772
  features: {
690
- context_length: 2_000_000,
773
+ context_length: 1_000_000,
691
774
  input_modality: ['text', 'image'],
692
775
  output_modality: ['text'],
693
776
  tool_use: true,
@@ -705,14 +788,30 @@ exports.MODEL_REGISTRY = [
705
788
  },
706
789
  {
707
790
  id: 'grok-4.20-multi-agent-0309',
791
+ aliases: ['grok-4.20-multi-agent', 'grok-4.20-multi-agent-latest'],
708
792
  provider: 'xai',
709
793
  cost: {
710
- input_per_million: 2.0,
711
- output_per_million: 6.0,
712
- cached_input_per_million: 0.2,
794
+ input_per_million: {
795
+ threshold_tokens: 200_000,
796
+ price_below_threshold_per_million: 1.25,
797
+ price_above_threshold_per_million: 2.5,
798
+ tier_basis: 'input_tokens',
799
+ },
800
+ cached_input_per_million: {
801
+ threshold_tokens: 200_000,
802
+ price_below_threshold_per_million: 0.2,
803
+ price_above_threshold_per_million: 0.4,
804
+ tier_basis: 'input_tokens',
805
+ },
806
+ output_per_million: {
807
+ threshold_tokens: 200_000,
808
+ price_below_threshold_per_million: 2.5,
809
+ price_above_threshold_per_million: 5,
810
+ tier_basis: 'input_tokens',
811
+ },
713
812
  },
714
813
  features: {
715
- context_length: 2_000_000,
814
+ context_length: 1_000_000,
716
815
  input_modality: ['text', 'image'],
717
816
  output_modality: ['text'],
718
817
  tool_use: true,
@@ -2369,6 +2468,27 @@ exports.MODEL_REGISTRY = [
2369
2468
  class: 'standard',
2370
2469
  description: 'Gemini 3 Flash Preview - fast multimodal model with 1M context window.',
2371
2470
  },
2471
+ {
2472
+ id: 'gemini-3.6-flash',
2473
+ aliases: ['gemini-flash-latest', 'models/gemini-3.6-flash', 'models/gemini-flash-latest'],
2474
+ provider: 'google',
2475
+ cost: {
2476
+ input_per_million: 1.5,
2477
+ output_per_million: 7.5,
2478
+ cached_input_per_million: 0.15,
2479
+ },
2480
+ features: {
2481
+ context_length: 1048576,
2482
+ input_modality: ['text', 'image', 'video', 'audio'],
2483
+ output_modality: ['text'],
2484
+ tool_use: true,
2485
+ streaming: true,
2486
+ json_output: true,
2487
+ max_output_tokens: 65536,
2488
+ },
2489
+ class: 'standard',
2490
+ description: 'Gemini 3.6 Flash - stable frontier multimodal model optimized for agentic execution, coding, spatial reasoning, and efficient tool use.',
2491
+ },
2372
2492
  {
2373
2493
  id: 'gemini-3.5-flash',
2374
2494
  provider: 'google',
@@ -2390,6 +2510,27 @@ exports.MODEL_REGISTRY = [
2390
2510
  score: 88,
2391
2511
  description: 'Gemini 3.5 Flash - fast multimodal reasoning model with 1M context and native thinking levels.',
2392
2512
  },
2513
+ {
2514
+ id: 'gemini-3.5-flash-lite',
2515
+ aliases: ['gemini-flash-lite-latest', 'models/gemini-3.5-flash-lite', 'models/gemini-flash-lite-latest'],
2516
+ provider: 'google',
2517
+ cost: {
2518
+ input_per_million: 0.3,
2519
+ output_per_million: 2.5,
2520
+ cached_input_per_million: 0.03,
2521
+ },
2522
+ features: {
2523
+ context_length: 1048576,
2524
+ input_modality: ['text', 'image', 'video', 'audio'],
2525
+ output_modality: ['text'],
2526
+ tool_use: true,
2527
+ streaming: true,
2528
+ json_output: true,
2529
+ max_output_tokens: 65536,
2530
+ },
2531
+ class: 'reasoning_mini',
2532
+ description: 'Gemini 3.5 Flash-Lite - stable low-latency multimodal model for high-throughput subagents, document parsing, extraction, and structured data tasks.',
2533
+ },
2393
2534
  {
2394
2535
  id: 'gemini-3.1-flash-lite',
2395
2536
  aliases: ['gemini-3.1-flash-lite-preview'],
@@ -2733,6 +2874,63 @@ exports.MODEL_REGISTRY = [
2733
2874
  class: 'voice',
2734
2875
  description: "OpenAI's advanced text-to-speech model with natural-sounding output. Supports customizable tone, style, and emotion through instructions. 85% cheaper than ElevenLabs with estimated $0.015/minute of audio.",
2735
2876
  },
2877
+ {
2878
+ id: 'gpt-realtime-2.1',
2879
+ provider: 'openai',
2880
+ cost: {
2881
+ input_per_million: { text: 4, audio: 32, image: 5 },
2882
+ cached_input_per_million: { text: 0.4 },
2883
+ output_per_million: { text: 24, audio: 64 },
2884
+ },
2885
+ features: {
2886
+ context_length: 128000,
2887
+ max_output_tokens: 32000,
2888
+ input_modality: ['text', 'audio', 'image'],
2889
+ output_modality: ['text', 'audio'],
2890
+ tool_use: true,
2891
+ streaming: true,
2892
+ reasoning_output: true,
2893
+ },
2894
+ class: 'voice',
2895
+ description: 'OpenAI flagship GA Realtime model for low-latency text and audio conversations with tools.',
2896
+ },
2897
+ {
2898
+ id: 'gpt-realtime-2.1-mini',
2899
+ provider: 'openai',
2900
+ cost: {
2901
+ input_per_million: { text: 0.6, audio: 10, image: 0.8 },
2902
+ cached_input_per_million: { text: 0.06 },
2903
+ output_per_million: { text: 2.4, audio: 20 },
2904
+ },
2905
+ features: {
2906
+ context_length: 128000,
2907
+ max_output_tokens: 32000,
2908
+ input_modality: ['text', 'audio', 'image'],
2909
+ output_modality: ['text', 'audio'],
2910
+ tool_use: true,
2911
+ streaming: true,
2912
+ },
2913
+ class: 'voice',
2914
+ description: 'OpenAI cost-efficient GA Realtime model for low-latency text and audio conversations.',
2915
+ },
2916
+ {
2917
+ id: 'gpt-audio-1.5',
2918
+ provider: 'openai',
2919
+ cost: {
2920
+ input_per_million: { text: 2.5, audio: 32 },
2921
+ output_per_million: { text: 10, audio: 64 },
2922
+ },
2923
+ features: {
2924
+ context_length: 128000,
2925
+ max_output_tokens: 16384,
2926
+ input_modality: ['text', 'audio'],
2927
+ output_modality: ['text', 'audio'],
2928
+ tool_use: true,
2929
+ streaming: true,
2930
+ },
2931
+ class: 'voice',
2932
+ description: 'OpenAI Chat Completions audio model supporting audio input/output, streaming, and tools.',
2933
+ },
2736
2934
  {
2737
2935
  id: 'tts-1',
2738
2936
  provider: 'openai',
@@ -2774,27 +2972,30 @@ exports.MODEL_REGISTRY = [
2774
2972
  input_modality: ['text'],
2775
2973
  output_modality: ['audio'],
2776
2974
  streaming: true,
2975
+ max_input_characters: 10000,
2777
2976
  },
2778
2977
  class: 'voice',
2779
2978
  description: "ElevenLabs' multilingual high quality text-to-speech model supporting 29 languages with natural voice capabilities.",
2780
2979
  },
2781
2980
  {
2782
- id: 'eleven_turbo_v2_5',
2981
+ id: 'eleven_v3',
2783
2982
  provider: 'elevenlabs',
2784
2983
  cost: {
2785
- input_per_million: 27.5,
2984
+ input_per_million: 55,
2786
2985
  output_per_million: 0,
2787
2986
  },
2788
2987
  features: {
2789
2988
  input_modality: ['text'],
2790
2989
  output_modality: ['audio'],
2791
2990
  streaming: true,
2991
+ max_input_characters: 5000,
2792
2992
  },
2793
2993
  class: 'voice',
2794
- description: "ElevenLabs' turbo model optimized for low-latency text-to-speech with high quality output.",
2994
+ description: "ElevenLabs' most expressive multilingual text-to-speech model with audio tags and dialogue support.",
2795
2995
  },
2796
2996
  {
2797
2997
  id: 'eleven_flash_v2_5',
2998
+ aliases: ['eleven_turbo_v2_5'],
2798
2999
  provider: 'elevenlabs',
2799
3000
  cost: {
2800
3001
  input_per_million: 27.5,
@@ -2804,6 +3005,7 @@ exports.MODEL_REGISTRY = [
2804
3005
  input_modality: ['text'],
2805
3006
  output_modality: ['audio'],
2806
3007
  streaming: true,
3008
+ max_input_characters: 40000,
2807
3009
  },
2808
3010
  class: 'voice',
2809
3011
  description: "ElevenLabs' fastest model optimized for ultra low-latency text-to-speech.",
@@ -3145,23 +3347,26 @@ exports.MODEL_REGISTRY = [
3145
3347
  description: 'Midjourney v7 text-to-image (via KIE API; requires third-party API key).',
3146
3348
  },
3147
3349
  {
3148
- id: 'grok-imagine-image-pro',
3350
+ id: 'grok-imagine-image-quality',
3351
+ aliases: ['grok-imagine-image-pro'],
3149
3352
  provider: 'xai',
3150
3353
  cost: {
3151
- per_image: 0.07,
3354
+ per_input_image: 0.01,
3355
+ per_image_by_resolution: { '1k': 0.05, '2k': 0.07 },
3152
3356
  },
3153
3357
  features: {
3154
3358
  input_modality: ['text', 'image'],
3155
3359
  output_modality: ['image'],
3156
3360
  },
3157
3361
  class: 'image_generation',
3158
- description: 'xAI Grok Imagine Image Pro for premium text-to-image and image-guided image generation.',
3362
+ description: 'xAI Grok Imagine Image Quality for premium 1K/2K image generation and editing.',
3159
3363
  },
3160
3364
  {
3161
3365
  id: 'grok-imagine-image',
3162
3366
  provider: 'xai',
3163
3367
  cost: {
3164
3368
  per_image: 0.02,
3369
+ per_input_image: 0.002,
3165
3370
  },
3166
3371
  features: {
3167
3372
  input_modality: ['text', 'image'],
@@ -3170,6 +3375,36 @@ exports.MODEL_REGISTRY = [
3170
3375
  class: 'image_generation',
3171
3376
  description: 'xAI Grok Imagine Image for lower-cost text-to-image and image-guided image generation.',
3172
3377
  },
3378
+ {
3379
+ id: 'grok-imagine-video',
3380
+ provider: 'xai',
3381
+ cost: {
3382
+ per_input_image: 0.002,
3383
+ per_input_second: 0.01,
3384
+ per_second_by_resolution: { '480p': 0.05, '720p': 0.07 },
3385
+ },
3386
+ features: {
3387
+ input_modality: ['text', 'image', 'video'],
3388
+ output_modality: ['video'],
3389
+ },
3390
+ class: 'video_generation',
3391
+ description: 'xAI Grok Imagine Video for text-to-video, image-to-video, and video editing up to 15 seconds.',
3392
+ },
3393
+ {
3394
+ id: 'grok-imagine-video-1.5',
3395
+ aliases: ['grok-imagine-video-1.5-preview'],
3396
+ provider: 'xai',
3397
+ cost: {
3398
+ per_input_image: 0.01,
3399
+ per_second_by_resolution: { '480p': 0.08, '720p': 0.14, '1080p': 0.25 },
3400
+ },
3401
+ features: {
3402
+ input_modality: ['image'],
3403
+ output_modality: ['video'],
3404
+ },
3405
+ class: 'video_generation',
3406
+ description: 'xAI Grok Imagine Video 1.5 for premium image-to-video generation up to 1080p.',
3407
+ },
3173
3408
  {
3174
3409
  id: 'imagen-2',
3175
3410
  provider: 'google',
@@ -3337,92 +3572,48 @@ exports.MODEL_REGISTRY = [
3337
3572
  description: 'OpenAI Whisper transcription with full-turn output',
3338
3573
  },
3339
3574
  {
3340
- id: 'deepseek-chat',
3341
- aliases: ['deepseek-v3-0324'],
3575
+ id: 'deepseek-v4-pro',
3576
+ aliases: ['DeepSeek-V4', 'DeepSeek-V4-Pro', 'deepseek-v4'],
3342
3577
  provider: 'deepseek',
3343
3578
  cost: {
3344
- input_per_million: {
3345
- peak_utc_start_hour: 0,
3346
- peak_utc_start_minute: 30,
3347
- peak_utc_end_hour: 16,
3348
- peak_utc_end_minute: 30,
3349
- peak_price_per_million: 0.27,
3350
- off_peak_price_per_million: 0.135,
3351
- },
3352
- cached_input_per_million: {
3353
- peak_utc_start_hour: 0,
3354
- peak_utc_start_minute: 30,
3355
- peak_utc_end_hour: 16,
3356
- peak_utc_end_minute: 30,
3357
- peak_price_per_million: 0.07,
3358
- off_peak_price_per_million: 0.035,
3359
- },
3360
- output_per_million: {
3361
- peak_utc_start_hour: 0,
3362
- peak_utc_start_minute: 30,
3363
- peak_utc_end_hour: 16,
3364
- peak_utc_end_minute: 30,
3365
- peak_price_per_million: 1.1,
3366
- off_peak_price_per_million: 0.55,
3367
- },
3579
+ input_per_million: 0.435,
3580
+ cached_input_per_million: 0.003625,
3581
+ output_per_million: 0.87,
3368
3582
  },
3369
3583
  features: {
3370
- context_length: 64000,
3371
- max_output_tokens: 8192,
3584
+ context_length: 1_000_000,
3585
+ max_output_tokens: 384_000,
3372
3586
  input_modality: ['text'],
3373
3587
  output_modality: ['text'],
3374
3588
  tool_use: true,
3375
3589
  streaming: true,
3376
3590
  json_output: true,
3591
+ reasoning_output: true,
3377
3592
  },
3378
- class: 'standard',
3379
- score: 75,
3380
- description: 'DeepSeek-V3 chat model with FIM completion support and time-based pricing',
3593
+ class: 'reasoning',
3594
+ description: 'DeepSeek V4 Pro direct API model with native tools, JSON output, and high/max reasoning.',
3381
3595
  },
3382
3596
  {
3383
- id: 'deepseek-reasoner',
3384
- aliases: ['deepseek-r1-0528'],
3597
+ id: 'deepseek-v4-flash',
3598
+ aliases: ['DeepSeek-V4-Flash'],
3385
3599
  provider: 'deepseek',
3386
3600
  cost: {
3387
- input_per_million: {
3388
- peak_utc_start_hour: 0,
3389
- peak_utc_start_minute: 30,
3390
- peak_utc_end_hour: 16,
3391
- peak_utc_end_minute: 30,
3392
- peak_price_per_million: 0.55,
3393
- off_peak_price_per_million: 0.1375,
3394
- },
3395
- cached_input_per_million: {
3396
- peak_utc_start_hour: 0,
3397
- peak_utc_start_minute: 30,
3398
- peak_utc_end_hour: 16,
3399
- peak_utc_end_minute: 30,
3400
- peak_price_per_million: 0.14,
3401
- off_peak_price_per_million: 0.035,
3402
- },
3403
- output_per_million: {
3404
- peak_utc_start_hour: 0,
3405
- peak_utc_start_minute: 30,
3406
- peak_utc_end_hour: 16,
3407
- peak_utc_end_minute: 30,
3408
- peak_price_per_million: 2.19,
3409
- off_peak_price_per_million: 0.5475,
3410
- },
3601
+ input_per_million: 0.14,
3602
+ cached_input_per_million: 0.0028,
3603
+ output_per_million: 0.28,
3411
3604
  },
3412
3605
  features: {
3413
- context_length: 64000,
3414
- max_output_tokens: 64000,
3606
+ context_length: 1_000_000,
3607
+ max_output_tokens: 384_000,
3415
3608
  input_modality: ['text'],
3416
3609
  output_modality: ['text'],
3417
3610
  tool_use: true,
3418
- simulate_tools: true,
3419
3611
  streaming: true,
3420
3612
  json_output: true,
3421
3613
  reasoning_output: true,
3422
3614
  },
3423
3615
  class: 'reasoning',
3424
- score: 85,
3425
- description: 'DeepSeek-R1 advanced reasoning model with extended output and time-based pricing',
3616
+ description: 'DeepSeek V4 Flash direct API model with native tools and switchable thinking.',
3426
3617
  },
3427
3618
  {
3428
3619
  id: 'gpt-oss-120b',
@@ -3430,8 +3621,8 @@ exports.MODEL_REGISTRY = [
3430
3621
  provider: 'openrouter',
3431
3622
  openrouter_id: 'openai/gpt-oss-120b',
3432
3623
  cost: {
3433
- input_per_million: 0.03,
3434
- output_per_million: 0.15,
3624
+ input_per_million: 0.037,
3625
+ output_per_million: 0.17,
3435
3626
  },
3436
3627
  features: {
3437
3628
  context_length: 131072,
@@ -3452,8 +3643,8 @@ exports.MODEL_REGISTRY = [
3452
3643
  provider: 'openrouter',
3453
3644
  openrouter_id: 'openai/gpt-oss-20b',
3454
3645
  cost: {
3455
- input_per_million: 0.029,
3456
- output_per_million: 0.14,
3646
+ input_per_million: 0.03,
3647
+ output_per_million: 0.13,
3457
3648
  },
3458
3649
  features: {
3459
3650
  context_length: 131072,
@@ -3473,9 +3664,9 @@ exports.MODEL_REGISTRY = [
3473
3664
  provider: 'openrouter',
3474
3665
  openrouter_id: 'qwen/qwen3.7-max',
3475
3666
  cost: {
3476
- input_per_million: 1.25,
3477
- cached_input_per_million: 0.25,
3478
- output_per_million: 3.75,
3667
+ input_per_million: 1.475,
3668
+ cached_input_per_million: 0.295,
3669
+ output_per_million: 4.425,
3479
3670
  },
3480
3671
  features: {
3481
3672
  context_length: 1000000,
@@ -3608,9 +3799,9 @@ exports.MODEL_REGISTRY = [
3608
3799
  provider: 'openrouter',
3609
3800
  openrouter_id: 'qwen/qwen3.6-27b',
3610
3801
  cost: {
3611
- input_per_million: 0.285,
3802
+ input_per_million: 0.45,
3612
3803
  cached_input_per_million: 0.15,
3613
- output_per_million: 2.4,
3804
+ output_per_million: 2.7,
3614
3805
  },
3615
3806
  features: {
3616
3807
  context_length: 262144,
@@ -3619,7 +3810,7 @@ exports.MODEL_REGISTRY = [
3619
3810
  tool_use: true,
3620
3811
  streaming: true,
3621
3812
  json_output: true,
3622
- max_output_tokens: 262140,
3813
+ max_output_tokens: 65536,
3623
3814
  reasoning_output: true,
3624
3815
  },
3625
3816
  class: 'reasoning',
@@ -3631,9 +3822,8 @@ exports.MODEL_REGISTRY = [
3631
3822
  provider: 'openrouter',
3632
3823
  openrouter_id: 'qwen/qwen3-235b-a22b-thinking-2507',
3633
3824
  cost: {
3634
- input_per_million: 0.1,
3635
- cached_input_per_million: 0.1,
3636
- output_per_million: 0.1,
3825
+ input_per_million: 0.3,
3826
+ output_per_million: 3,
3637
3827
  },
3638
3828
  features: {
3639
3829
  context_length: 262144,
@@ -3642,7 +3832,7 @@ exports.MODEL_REGISTRY = [
3642
3832
  tool_use: true,
3643
3833
  streaming: true,
3644
3834
  json_output: true,
3645
- max_output_tokens: 262144,
3835
+ max_output_tokens: 32768,
3646
3836
  reasoning_output: true,
3647
3837
  },
3648
3838
  class: 'reasoning',
@@ -3655,11 +3845,11 @@ exports.MODEL_REGISTRY = [
3655
3845
  provider: 'openrouter',
3656
3846
  openrouter_id: 'qwen/qwen3-coder',
3657
3847
  cost: {
3658
- input_per_million: 0.22,
3659
- output_per_million: 1.8,
3848
+ input_per_million: 0.3,
3849
+ output_per_million: 1,
3660
3850
  },
3661
3851
  features: {
3662
- context_length: 1048576,
3852
+ context_length: 262144,
3663
3853
  input_modality: ['text'],
3664
3854
  output_modality: ['text'],
3665
3855
  tool_use: true,
@@ -3682,7 +3872,7 @@ exports.MODEL_REGISTRY = [
3682
3872
  cached_input_per_million: 0.1794,
3683
3873
  },
3684
3874
  features: {
3685
- context_length: 202752,
3875
+ context_length: 204800,
3686
3876
  input_modality: ['text'],
3687
3877
  output_modality: ['text'],
3688
3878
  tool_use: true,
@@ -3699,9 +3889,9 @@ exports.MODEL_REGISTRY = [
3699
3889
  provider: 'openrouter',
3700
3890
  openrouter_id: 'z-ai/glm-5.2',
3701
3891
  cost: {
3702
- input_per_million: 0.93,
3703
- output_per_million: 3.0,
3704
- cached_input_per_million: 0.18,
3892
+ input_per_million: 0.7756,
3893
+ output_per_million: 2.4376,
3894
+ cached_input_per_million: 0.14404,
3705
3895
  },
3706
3896
  features: {
3707
3897
  context_length: 1048576,
@@ -3710,7 +3900,7 @@ exports.MODEL_REGISTRY = [
3710
3900
  tool_use: true,
3711
3901
  streaming: true,
3712
3902
  json_output: true,
3713
- max_output_tokens: 32768,
3903
+ max_output_tokens: 131072,
3714
3904
  reasoning_output: true,
3715
3905
  },
3716
3906
  class: 'reasoning',
@@ -3718,7 +3908,6 @@ exports.MODEL_REGISTRY = [
3718
3908
  },
3719
3909
  {
3720
3910
  id: 'deepseek/deepseek-v4-pro',
3721
- aliases: ['DeepSeek-V4', 'DeepSeek-V4-Pro', 'deepseek-v4', 'deepseek-v4-pro'],
3722
3911
  provider: 'openrouter',
3723
3912
  openrouter_id: 'deepseek/deepseek-v4-pro',
3724
3913
  cost: {
@@ -3741,13 +3930,12 @@ exports.MODEL_REGISTRY = [
3741
3930
  },
3742
3931
  {
3743
3932
  id: 'deepseek/deepseek-v4-flash',
3744
- aliases: ['DeepSeek-V4-Flash', 'deepseek-v4-flash'],
3745
3933
  provider: 'openrouter',
3746
3934
  openrouter_id: 'deepseek/deepseek-v4-flash',
3747
3935
  cost: {
3748
- input_per_million: 0.09,
3749
- cached_input_per_million: 0.018,
3750
- output_per_million: 0.18,
3936
+ input_per_million: 0.0938,
3937
+ cached_input_per_million: 0.01876,
3938
+ output_per_million: 0.1876,
3751
3939
  },
3752
3940
  features: {
3753
3941
  context_length: 1048576,
@@ -3756,7 +3944,7 @@ exports.MODEL_REGISTRY = [
3756
3944
  tool_use: true,
3757
3945
  streaming: true,
3758
3946
  json_output: true,
3759
- max_output_tokens: 131072,
3947
+ max_output_tokens: 384000,
3760
3948
  reasoning_output: true,
3761
3949
  },
3762
3950
  class: 'reasoning',
@@ -3768,12 +3956,12 @@ exports.MODEL_REGISTRY = [
3768
3956
  provider: 'openrouter',
3769
3957
  openrouter_id: 'xiaomi/mimo-v2.5',
3770
3958
  cost: {
3771
- input_per_million: 0.105,
3772
- cached_input_per_million: 0.028,
3959
+ input_per_million: 0.14,
3960
+ cached_input_per_million: 0.0028,
3773
3961
  output_per_million: 0.28,
3774
3962
  },
3775
3963
  features: {
3776
- context_length: 1048576,
3964
+ context_length: 1050000,
3777
3965
  input_modality: ['text', 'audio', 'image', 'video'],
3778
3966
  output_modality: ['text'],
3779
3967
  tool_use: true,
@@ -3796,7 +3984,7 @@ exports.MODEL_REGISTRY = [
3796
3984
  output_per_million: 0.87,
3797
3985
  },
3798
3986
  features: {
3799
- context_length: 1048576,
3987
+ context_length: 1050000,
3800
3988
  input_modality: ['text'],
3801
3989
  output_modality: ['text'],
3802
3990
  tool_use: true,
@@ -3838,9 +4026,9 @@ exports.MODEL_REGISTRY = [
3838
4026
  provider: 'openrouter',
3839
4027
  openrouter_id: 'tencent/hy3',
3840
4028
  cost: {
3841
- input_per_million: 0.2,
3842
- cached_input_per_million: 0.5,
3843
- output_per_million: 0.8,
4029
+ input_per_million: 0.14,
4030
+ cached_input_per_million: 0.035,
4031
+ output_per_million: 0.58,
3844
4032
  },
3845
4033
  features: {
3846
4034
  context_length: 262144,
@@ -3849,7 +4037,7 @@ exports.MODEL_REGISTRY = [
3849
4037
  tool_use: true,
3850
4038
  streaming: true,
3851
4039
  json_output: false,
3852
- max_output_tokens: 131072,
4040
+ max_output_tokens: 262144,
3853
4041
  reasoning_output: true,
3854
4042
  },
3855
4043
  class: 'reasoning',
@@ -3860,9 +4048,9 @@ exports.MODEL_REGISTRY = [
3860
4048
  aliases: ['kimi-k2.5', 'kimi-k2-5'],
3861
4049
  provider: 'openrouter',
3862
4050
  cost: {
3863
- input_per_million: 0.375,
3864
- output_per_million: 2.025,
3865
- cached_input_per_million: 0.203,
4051
+ input_per_million: 0.57,
4052
+ output_per_million: 2.85,
4053
+ cached_input_per_million: 0.095,
3866
4054
  },
3867
4055
  features: {
3868
4056
  context_length: 262144,
@@ -3883,9 +4071,9 @@ exports.MODEL_REGISTRY = [
3883
4071
  provider: 'openrouter',
3884
4072
  openrouter_id: 'moonshotai/kimi-k2.6',
3885
4073
  cost: {
3886
- input_per_million: 0.66,
3887
- output_per_million: 3.41,
3888
- cached_input_per_million: 0.14,
4074
+ input_per_million: 0.684,
4075
+ output_per_million: 3.42,
4076
+ cached_input_per_million: 0.144,
3889
4077
  },
3890
4078
  features: {
3891
4079
  context_length: 262144,
@@ -3906,9 +4094,9 @@ exports.MODEL_REGISTRY = [
3906
4094
  provider: 'openrouter',
3907
4095
  openrouter_id: 'moonshotai/kimi-k2.7-code',
3908
4096
  cost: {
3909
- input_per_million: 0.74,
3910
- output_per_million: 3.5,
3911
- cached_input_per_million: 0.15,
4097
+ input_per_million: 0.82,
4098
+ output_per_million: 3.75,
4099
+ cached_input_per_million: 0.16,
3912
4100
  },
3913
4101
  features: {
3914
4102
  context_length: 262144,
@@ -3917,7 +4105,7 @@ exports.MODEL_REGISTRY = [
3917
4105
  tool_use: true,
3918
4106
  streaming: true,
3919
4107
  json_output: true,
3920
- max_output_tokens: 16384,
4108
+ max_output_tokens: 262144,
3921
4109
  reasoning_output: true,
3922
4110
  },
3923
4111
  class: 'code',
@@ -3957,7 +4145,7 @@ exports.MODEL_REGISTRY = [
3957
4145
  output_per_million: 1.2,
3958
4146
  },
3959
4147
  features: {
3960
- context_length: 1_048_576,
4148
+ context_length: 1_048_756,
3961
4149
  input_modality: ['text'],
3962
4150
  output_modality: ['text'],
3963
4151
  tool_use: true,
@@ -3980,7 +4168,7 @@ exports.MODEL_REGISTRY = [
3980
4168
  output_per_million: 4.05,
3981
4169
  },
3982
4170
  features: {
3983
- context_length: 1_048_576,
4171
+ context_length: 524_288,
3984
4172
  input_modality: ['text', 'image', 'audio'],
3985
4173
  output_modality: ['text'],
3986
4174
  tool_use: true,
@@ -4060,6 +4248,28 @@ exports.MODEL_REGISTRY = [
4060
4248
  class: 'code',
4061
4249
  description: 'Kwaipilot KAT-Coder Air V2.5 via OpenRouter. Cost-efficient agentic coding model for autonomous repository changes and tool-driven workflows.',
4062
4250
  },
4251
+ {
4252
+ id: 'poolside/laguna-s-2.1',
4253
+ aliases: ['Laguna S 2.1', 'laguna-s-2.1', 'laguna-2.1'],
4254
+ provider: 'openrouter',
4255
+ openrouter_id: 'poolside/laguna-s-2.1',
4256
+ cost: {
4257
+ input_per_million: 0.1,
4258
+ cached_input_per_million: 0.01,
4259
+ output_per_million: 0.2,
4260
+ },
4261
+ features: {
4262
+ context_length: 1_048_576,
4263
+ input_modality: ['text'],
4264
+ output_modality: ['text'],
4265
+ tool_use: true,
4266
+ streaming: true,
4267
+ json_output: true,
4268
+ max_output_tokens: 131_072,
4269
+ },
4270
+ class: 'code',
4271
+ description: 'Poolside Laguna S 2.1 via OpenRouter, optimized for long-context agentic coding workflows.',
4272
+ },
4063
4273
  ];
4064
4274
  function findModel(modelId) {
4065
4275
  const externalModel = (0, external_models_js_1.getExternalModel)(modelId);