@just-every/ensemble 0.2.162 → 0.2.164

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 (32) hide show
  1. package/README.md +4 -4
  2. package/dist/cjs/data/model_data.cjs +342 -150
  3. package/dist/cjs/data/model_data.d.ts +4 -0
  4. package/dist/cjs/data/model_data.d.ts.map +1 -1
  5. package/dist/cjs/data/model_data.js.map +1 -1
  6. package/dist/cjs/model_providers/gemini.cjs +15 -0
  7. package/dist/cjs/model_providers/gemini.d.ts.map +1 -1
  8. package/dist/cjs/model_providers/gemini.js.map +1 -1
  9. package/dist/cjs/model_providers/model_provider.cjs +1 -1
  10. package/dist/cjs/model_providers/model_provider.js.map +1 -1
  11. package/dist/cjs/model_providers/openai.cjs +74 -27
  12. package/dist/cjs/model_providers/openai.d.ts.map +1 -1
  13. package/dist/cjs/model_providers/openai.js.map +1 -1
  14. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  15. package/dist/cjs/types/types.d.ts +1 -1
  16. package/dist/cjs/types/types.d.ts.map +1 -1
  17. package/dist/data/model_data.d.ts +4 -0
  18. package/dist/data/model_data.d.ts.map +1 -1
  19. package/dist/data/model_data.js +342 -150
  20. package/dist/data/model_data.js.map +1 -1
  21. package/dist/model_providers/gemini.d.ts.map +1 -1
  22. package/dist/model_providers/gemini.js +15 -0
  23. package/dist/model_providers/gemini.js.map +1 -1
  24. package/dist/model_providers/model_provider.js +1 -1
  25. package/dist/model_providers/model_provider.js.map +1 -1
  26. package/dist/model_providers/openai.d.ts.map +1 -1
  27. package/dist/model_providers/openai.js +74 -27
  28. package/dist/model_providers/openai.js.map +1 -1
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/dist/types/types.d.ts +1 -1
  31. package/dist/types/types.d.ts.map +1 -1
  32. package/package.json +2 -2
@@ -2,201 +2,163 @@ import { getExternalModel } from '../utils/external_models.js';
2
2
  export const MODEL_CLASSES = {
3
3
  standard: {
4
4
  models: [
5
- 'gpt-5-mini',
6
- 'gemini-2.5-flash-preview-05-20',
5
+ 'gpt-5.2-chat-latest',
7
6
  'gemini-2.5-flash',
8
- 'gemini-3-pro',
9
- 'claude-sonnet-4-5-20250514',
10
- 'grok-3-mini',
11
- 'grok-4-1-fast-non-reasoning',
12
- 'grok-4-fast-non-reasoning',
7
+ 'claude-sonnet-4-5-20250929',
8
+ 'grok-4',
13
9
  ],
14
10
  random: true,
15
11
  },
16
12
  mini: {
17
13
  models: [
18
14
  'gpt-5-nano',
19
- 'gemini-2.5-flash-lite-preview-06-17',
20
15
  'gemini-2.5-flash-lite',
21
- 'claude-haiku-4-5-20250514',
16
+ 'claude-haiku-4-5-20251001',
22
17
  'grok-3-mini',
23
- 'mistral/ministral-8b',
24
- 'openai/gpt-oss-20b',
25
18
  ],
26
19
  random: true,
27
20
  },
28
21
  reasoning: {
29
22
  models: [
30
- 'gpt-5-max',
31
- 'gpt-5.1',
32
- 'gemini-2.5-pro-preview-06-05',
23
+ 'gpt-5.2',
33
24
  'gemini-2.5-pro',
34
- 'gemini-3-pro',
35
- 'claude-opus-4-1-20250805',
36
- 'grok-4',
25
+ 'claude-sonnet-4-5-20250929',
37
26
  'grok-4-1-fast-reasoning',
38
- 'grok-4-fast-reasoning',
39
- 'mistralai/magistral-medium-2506:thinking',
40
- 'qwen3-235b-a22b-thinking-2507',
27
+ ],
28
+ random: true,
29
+ },
30
+ reasoning_high: {
31
+ models: [
32
+ 'gpt-5.2-pro',
33
+ 'gemini-3-pro-preview',
34
+ 'claude-opus-4-5-20251101',
35
+ 'grok-4',
41
36
  ],
42
37
  random: true,
43
38
  },
44
39
  reasoning_mini: {
45
40
  models: [
46
- 'gemini-2.5-flash-preview-05-20-medium',
41
+ 'gpt-5-mini',
47
42
  'gemini-2.5-flash',
43
+ 'claude-sonnet-4-5-20250929',
48
44
  'grok-3-mini',
49
- 'o3-low',
50
- 'openai/gpt-oss-120b',
51
45
  ],
52
46
  random: true,
53
47
  },
54
48
  monologue: {
55
49
  models: [
56
- 'gpt-5-chat-latest',
57
- 'gemini-2.5-pro-preview-06-05',
58
- 'gemini-2.5-flash-preview-05-20-medium',
59
- 'o3-medium',
60
- 'claude-sonnet-4-5-20250514',
50
+ 'gpt-5.2-chat-latest',
51
+ 'gemini-3-pro-preview',
52
+ 'claude-sonnet-4-5-20250929',
53
+ 'grok-4',
61
54
  ],
62
55
  random: true,
63
56
  },
64
57
  metacognition: {
65
58
  models: [
66
- 'gpt-5',
67
- 'gpt-5-mini',
68
- 'gemini-2.5-pro-preview-06-05',
69
- 'gemini-2.5-flash-preview-05-20-high',
70
- 'claude-sonnet-4-5-20250514',
71
- 'grok-3-mini',
59
+ 'gpt-5.2',
60
+ 'gemini-3-pro-preview',
61
+ 'claude-opus-4-5-20251101',
62
+ 'grok-4',
72
63
  ],
73
64
  random: true,
74
65
  },
75
66
  code: {
76
67
  models: [
77
- 'gpt-5',
78
- 'gpt-5.1-codex',
79
- 'gpt-5.1-codex-mini',
80
- 'o3-high',
81
- 'gemini-2.5-pro-preview-06-05-medium',
82
- 'gemini-2.5-flash-preview-05-20-max',
83
- 'claude-opus-4-1-20250805',
84
- 'claude-sonnet-4-5-20250514',
85
- 'grok-4-medium',
86
- 'grok-4-1-fast-reasoning',
68
+ 'gpt-5.1-codex-max',
69
+ 'gemini-3-pro-preview',
70
+ 'claude-opus-4-5-20251101',
71
+ 'grok-4',
87
72
  'qwen3-coder',
88
73
  ],
89
74
  random: true,
90
75
  },
91
76
  writing: {
92
77
  models: [
93
- 'gpt-5-mini',
94
- 'gemini-2.5-flash-lite-preview-06-17',
78
+ 'gpt-5.2-chat-latest',
79
+ 'gemini-2.5-flash',
80
+ 'claude-sonnet-4-5-20250929',
81
+ 'grok-4',
95
82
  ],
96
83
  random: true,
97
84
  },
98
85
  summary: {
99
86
  models: [
100
- 'gpt-5-mini',
101
- 'gemini-2.5-flash-lite-preview-06-17',
87
+ 'gpt-5-nano',
88
+ 'gemini-2.5-flash-lite',
89
+ 'claude-haiku-4-5-20251001',
90
+ 'grok-3-mini',
102
91
  ],
103
92
  random: true,
104
93
  },
105
94
  vision: {
106
95
  models: [
107
- 'gpt-5',
108
- 'o3-high',
109
- 'gemini-2.5-pro-preview-06-05',
110
- 'claude-opus-4-1-20250805',
96
+ 'gpt-5.2',
97
+ 'gemini-3-pro-preview',
98
+ 'claude-opus-4-5-20251101',
111
99
  'grok-4',
112
- 'grok-2-vision',
113
100
  ],
114
101
  random: true,
115
102
  },
116
103
  vision_mini: {
117
104
  models: [
118
- 'gpt-5-mini-medium',
119
- 'o3-low',
120
- 'gemini-2.5-flash-lite-preview-06-17',
121
- 'gemini-2.5-flash-preview-05-20',
122
- 'claude-sonnet-4-5-20250514',
105
+ 'gpt-5-mini',
106
+ 'gemini-2.5-flash',
107
+ 'claude-haiku-4-5-20251001',
108
+ 'grok-3-mini',
123
109
  ],
124
110
  random: true,
125
111
  },
126
112
  search: {
127
113
  models: [
128
- 'gpt-5-mini',
129
114
  'o3-deep-research',
130
- 'gemini-2.5-flash-lite-preview-06-17',
131
115
  'perplexity/sonar-deep-research',
132
116
  ],
133
117
  random: true,
134
118
  },
135
119
  long: {
136
120
  models: [
137
- 'gpt-4.1',
138
- 'gpt-4.1-nano',
139
- 'gpt-4.1-mini',
140
- 'gemini-2.5-pro-preview-06-05',
141
- 'gemini-2.5-pro',
142
- 'gemini-3-pro',
143
- 'gemini-2.5-flash-preview-05-20-medium',
144
- 'gemini-2.5-flash-preview-05-20-low',
145
- 'gemini-2.5-flash',
146
- 'gemini-2.5-flash-lite-preview-06-17',
147
- 'gemini-2.5-flash-lite',
121
+ 'gpt-5.2',
122
+ 'gemini-3-pro-preview',
123
+ 'claude-opus-4-5-20251101',
124
+ 'grok-4',
148
125
  ],
149
126
  random: true,
150
- description: 'Models with very large context windows (near 1M tokens) for processing long documents',
127
+ description: 'Models with very large context windows for processing long documents',
151
128
  },
152
129
  image_generation: {
153
130
  models: [
154
- 'gpt-image-1',
155
- 'gemini-2.5-flash-image-preview',
156
- 'gemini-2.5-flash-image',
131
+ 'gpt-image-1.5',
157
132
  'gemini-3-pro-image-preview',
158
133
  'seedream-4',
159
134
  'luma-photon-1',
160
- 'luma-photon-flash-1',
161
135
  'ideogram-3.0',
162
136
  'midjourney-v7',
163
137
  'flux-kontext-pro',
164
138
  'stability-ultra',
165
139
  'runway-gen4-image',
166
- 'runway-gen4-image-turbo',
167
- 'flux-pro-1.1',
168
- 'flux-schnell',
169
- 'sd3.5-large',
170
- 'sd3.5-large-turbo',
171
- 'sd3.5-medium',
172
- 'sd3.5-flash',
173
140
  'recraft-v3',
174
141
  ],
175
142
  },
176
143
  embedding: {
177
144
  models: [
178
- 'text-embedding-3-small',
179
- 'gemini-embedding-exp-03-07',
145
+ 'text-embedding-3-large',
146
+ 'text-embedding-004',
180
147
  ],
181
148
  description: 'Vector embedding models for semantic search and RAG',
182
149
  },
183
150
  voice: {
184
151
  models: [
185
- 'gpt-4o-mini-tts',
186
- 'tts-1',
187
152
  'tts-1-hd',
188
153
  'eleven_multilingual_v2',
189
- 'eleven_turbo_v2_5',
190
- 'eleven_flash_v2_5',
191
- 'gemini-2.5-flash-preview-tts',
192
154
  'gemini-2.5-pro-preview-tts',
193
- 'gemini-2.5-flash-native-audio-preview',
194
155
  ],
195
156
  description: 'Text-to-Speech models for voice generation',
196
157
  },
197
158
  transcription: {
198
159
  models: [
199
- 'gemini-2.0-flash-live-001',
160
+ 'gpt-4o-transcribe',
161
+ 'gemini-2.5-flash-native-audio-preview-12-2025',
200
162
  ],
201
163
  description: 'Speech-to-Text models for audio transcription with real-time streaming',
202
164
  },
@@ -351,6 +313,23 @@ export const MODEL_REGISTRY = [
351
313
  class: 'embedding',
352
314
  description: "Google's experimental embedding model optimized for semantic similarity",
353
315
  },
316
+ {
317
+ id: 'text-embedding-004',
318
+ provider: 'google',
319
+ cost: {
320
+ input_per_million: 0,
321
+ output_per_million: 0,
322
+ },
323
+ features: {
324
+ input_modality: ['text'],
325
+ output_modality: ['embedding'],
326
+ input_token_limit: 8191,
327
+ },
328
+ embedding: true,
329
+ dim: 768,
330
+ class: 'embedding',
331
+ description: "Google's stable text embedding model (text-embedding-004)",
332
+ },
354
333
  {
355
334
  id: 'meta-llama/llama-4-maverick',
356
335
  provider: 'openrouter',
@@ -836,19 +815,89 @@ export const MODEL_REGISTRY = [
836
815
  class: 'standard',
837
816
  description: 'Latest premium GPT model from OpenAI',
838
817
  },
818
+ {
819
+ id: 'gpt-5.2',
820
+ aliases: ['gpt-5.2-2025-12-11'],
821
+ provider: 'openai',
822
+ cost: {
823
+ input_per_million: 1.75,
824
+ cached_input_per_million: 0.175,
825
+ output_per_million: 14.0,
826
+ },
827
+ features: {
828
+ context_length: 400000,
829
+ max_output_tokens: 128000,
830
+ input_modality: ['text', 'image'],
831
+ output_modality: ['text'],
832
+ tool_use: true,
833
+ streaming: true,
834
+ json_output: true,
835
+ },
836
+ class: 'reasoning',
837
+ score: 96,
838
+ scores: {
839
+ monologue: 97,
840
+ code: 95,
841
+ reasoning: 94,
842
+ },
843
+ description: 'Frontier flagship model for complex, multi-step tasks (400k/128k).',
844
+ },
845
+ {
846
+ id: 'gpt-5.2-pro',
847
+ aliases: ['gpt-5.2-pro-2025-12-11'],
848
+ provider: 'openai',
849
+ cost: {
850
+ input_per_million: 21.0,
851
+ output_per_million: 168.0,
852
+ },
853
+ features: {
854
+ context_length: 400000,
855
+ max_output_tokens: 128000,
856
+ input_modality: ['text', 'image'],
857
+ output_modality: ['text'],
858
+ tool_use: true,
859
+ streaming: true,
860
+ json_output: true,
861
+ },
862
+ class: 'reasoning',
863
+ score: 99,
864
+ description: 'Highest-accuracy GPT-5.2 variant for the hardest problems (400k/128k).',
865
+ },
866
+ {
867
+ id: 'gpt-5.2-chat-latest',
868
+ provider: 'openai',
869
+ cost: {
870
+ input_per_million: 1.75,
871
+ cached_input_per_million: 0.175,
872
+ output_per_million: 14.0,
873
+ },
874
+ features: {
875
+ context_length: 128000,
876
+ max_output_tokens: 16384,
877
+ input_modality: ['text', 'image'],
878
+ output_modality: ['text'],
879
+ tool_use: true,
880
+ streaming: true,
881
+ json_output: true,
882
+ },
883
+ class: 'standard',
884
+ score: 94,
885
+ description: 'ChatGPT-optimized GPT-5.2 chat model (128k/16k).',
886
+ },
839
887
  {
840
888
  id: 'gpt-5',
841
889
  aliases: ['gpt-5-2025-08-07'],
842
890
  provider: 'openai',
843
891
  cost: {
844
892
  input_per_million: 1.25,
845
- cached_input_per_million: 0.13,
893
+ cached_input_per_million: 0.125,
846
894
  output_per_million: 10.0,
847
895
  },
848
896
  features: {
849
897
  context_length: 400000,
850
- input_modality: ['text', 'image', 'audio'],
851
- output_modality: ['text', 'image', 'audio'],
898
+ max_output_tokens: 128000,
899
+ input_modality: ['text', 'image'],
900
+ output_modality: ['text'],
852
901
  tool_use: true,
853
902
  streaming: true,
854
903
  json_output: true,
@@ -856,11 +905,54 @@ export const MODEL_REGISTRY = [
856
905
  class: 'reasoning',
857
906
  score: 95,
858
907
  scores: {
859
- monologue: 98,
908
+ monologue: 96,
860
909
  code: 95,
861
910
  reasoning: 92,
862
911
  },
863
- description: 'The best model for coding and agentic tasks across domains',
912
+ description: 'Frontier flagship model for complex, multi-step tasks (400k/128k).',
913
+ },
914
+ {
915
+ id: 'gpt-5-pro',
916
+ aliases: ['gpt-5-pro-2025-10-06'],
917
+ provider: 'openai',
918
+ cost: {
919
+ input_per_million: 15.0,
920
+ output_per_million: 120.0,
921
+ },
922
+ features: {
923
+ context_length: 400000,
924
+ max_output_tokens: 272000,
925
+ input_modality: ['text', 'image'],
926
+ output_modality: ['text'],
927
+ tool_use: true,
928
+ streaming: true,
929
+ json_output: true,
930
+ },
931
+ class: 'reasoning',
932
+ score: 98,
933
+ description: 'High-accuracy GPT-5 variant for the hardest problems (400k/128k).',
934
+ },
935
+ {
936
+ id: 'gpt-5-chat-latest',
937
+ aliases: ['gpt-5-chat'],
938
+ provider: 'openai',
939
+ cost: {
940
+ input_per_million: 1.25,
941
+ cached_input_per_million: 0.125,
942
+ output_per_million: 10.0,
943
+ },
944
+ features: {
945
+ context_length: 128000,
946
+ max_output_tokens: 16384,
947
+ input_modality: ['text', 'image'],
948
+ output_modality: ['text'],
949
+ tool_use: true,
950
+ streaming: true,
951
+ json_output: true,
952
+ },
953
+ class: 'standard',
954
+ score: 92,
955
+ description: 'ChatGPT-optimized GPT-5 chat model (128k/16k).',
864
956
  },
865
957
  {
866
958
  id: 'gpt-5-mini',
@@ -868,13 +960,14 @@ export const MODEL_REGISTRY = [
868
960
  provider: 'openai',
869
961
  cost: {
870
962
  input_per_million: 0.25,
871
- cached_input_per_million: 0.03,
963
+ cached_input_per_million: 0.025,
872
964
  output_per_million: 2.0,
873
965
  },
874
966
  features: {
875
967
  context_length: 400000,
876
- input_modality: ['text', 'image', 'audio'],
877
- output_modality: ['text', 'image', 'audio'],
968
+ max_output_tokens: 128000,
969
+ input_modality: ['text', 'image'],
970
+ output_modality: ['text'],
878
971
  tool_use: true,
879
972
  streaming: true,
880
973
  json_output: true,
@@ -882,11 +975,11 @@ export const MODEL_REGISTRY = [
882
975
  class: 'standard',
883
976
  score: 88,
884
977
  scores: {
885
- monologue: 90,
978
+ monologue: 88,
886
979
  code: 87,
887
980
  reasoning: 85,
888
981
  },
889
- description: 'A faster, more cost-efficient version of GPT-5 for well-defined tasks',
982
+ description: 'A faster, more cost-efficient version of GPT-5 (400k/128k).',
890
983
  },
891
984
  {
892
985
  id: 'gpt-5-nano',
@@ -894,13 +987,14 @@ export const MODEL_REGISTRY = [
894
987
  provider: 'openai',
895
988
  cost: {
896
989
  input_per_million: 0.05,
897
- cached_input_per_million: 0.01,
990
+ cached_input_per_million: 0.005,
898
991
  output_per_million: 0.4,
899
992
  },
900
993
  features: {
901
994
  context_length: 400000,
902
- input_modality: ['text', 'image', 'audio'],
903
- output_modality: ['text', 'image', 'audio'],
995
+ max_output_tokens: 128000,
996
+ input_modality: ['text', 'image'],
997
+ output_modality: ['text'],
904
998
  tool_use: true,
905
999
  streaming: true,
906
1000
  json_output: true,
@@ -908,75 +1002,93 @@ export const MODEL_REGISTRY = [
908
1002
  class: 'mini',
909
1003
  score: 78,
910
1004
  scores: {
911
- monologue: 80,
1005
+ monologue: 78,
912
1006
  code: 76,
913
1007
  reasoning: 75,
914
1008
  },
915
- description: 'Fastest, most cost-efficient version of GPT-5',
1009
+ description: 'Fastest, most cost-efficient GPT-5 model (400k/128k).',
916
1010
  },
917
1011
  {
918
- id: 'gpt-5-chat-latest',
919
- aliases: ['gpt-5-chat'],
1012
+ id: 'gpt-5.1',
1013
+ aliases: ['gpt-5.1-2025-11-13'],
920
1014
  provider: 'openai',
921
1015
  cost: {
922
1016
  input_per_million: 1.25,
923
- cached_input_per_million: 0.13,
1017
+ cached_input_per_million: 0.125,
924
1018
  output_per_million: 10.0,
925
1019
  },
926
1020
  features: {
927
1021
  context_length: 400000,
928
- input_modality: ['text', 'image', 'audio'],
929
- output_modality: ['text', 'image', 'audio'],
1022
+ max_output_tokens: 128000,
1023
+ input_modality: ['text', 'image'],
1024
+ output_modality: ['text'],
930
1025
  tool_use: true,
931
1026
  streaming: true,
932
1027
  json_output: true,
933
1028
  },
934
1029
  class: 'reasoning',
935
1030
  score: 95,
936
- scores: {
937
- monologue: 98,
938
- code: 95,
939
- reasoning: 92,
940
- },
941
- description: 'GPT-5 model used in ChatGPT',
1031
+ description: 'Prior-gen GPT-5.1 flagship model (400k/128k).',
942
1032
  },
943
1033
  {
944
- id: 'gpt-5.1',
945
- aliases: ['gpt-5.1-chat-latest'],
1034
+ id: 'gpt-5.1-chat-latest',
946
1035
  provider: 'openai',
947
1036
  cost: {
948
1037
  input_per_million: 1.25,
1038
+ cached_input_per_million: 0.125,
949
1039
  output_per_million: 10.0,
1040
+ },
1041
+ features: {
1042
+ context_length: 128000,
1043
+ max_output_tokens: 16384,
1044
+ input_modality: ['text', 'image'],
1045
+ output_modality: ['text'],
1046
+ tool_use: true,
1047
+ streaming: true,
1048
+ json_output: true,
1049
+ },
1050
+ class: 'standard',
1051
+ score: 91,
1052
+ description: 'ChatGPT-optimized GPT-5.1 chat model (128k/16k).',
1053
+ },
1054
+ {
1055
+ id: 'gpt-5-codex',
1056
+ aliases: ['gpt-5-codex-2025-09-15'],
1057
+ provider: 'openai',
1058
+ cost: {
1059
+ input_per_million: 1.25,
950
1060
  cached_input_per_million: 0.125,
1061
+ output_per_million: 10.0,
951
1062
  },
952
1063
  features: {
953
- context_length: 256000,
954
- input_modality: ['text', 'image', 'audio', 'video'],
955
- output_modality: ['text', 'image', 'audio'],
1064
+ context_length: 400000,
1065
+ max_output_tokens: 128000,
1066
+ input_modality: ['text', 'image'],
1067
+ output_modality: ['text'],
956
1068
  tool_use: true,
957
1069
  streaming: true,
958
1070
  json_output: true,
959
1071
  },
960
- class: 'reasoning',
961
- score: 96,
962
- description: 'GPT-5.1 flagship multimodal model (Instant/Thinking modes, pricing TBD).',
1072
+ class: 'code',
1073
+ score: 90,
1074
+ description: 'Prior-gen Codex model for agentic coding (400k/128k).',
963
1075
  },
964
1076
  {
965
1077
  id: 'gpt-5.1-codex',
966
1078
  provider: 'openai',
967
1079
  cost: {
968
1080
  input_per_million: 1.25,
969
- output_per_million: 10.0,
970
1081
  cached_input_per_million: 0.125,
1082
+ output_per_million: 10.0,
971
1083
  },
972
1084
  features: {
973
1085
  context_length: 400000,
974
- input_modality: ['text'],
1086
+ max_output_tokens: 128000,
1087
+ input_modality: ['text', 'image'],
975
1088
  output_modality: ['text'],
976
1089
  tool_use: true,
977
1090
  streaming: true,
978
1091
  json_output: true,
979
- max_output_tokens: 128000,
980
1092
  },
981
1093
  class: 'code',
982
1094
  score: 92,
@@ -987,17 +1099,17 @@ export const MODEL_REGISTRY = [
987
1099
  provider: 'openai',
988
1100
  cost: {
989
1101
  input_per_million: 0.25,
990
- output_per_million: 2.0,
991
1102
  cached_input_per_million: 0.025,
1103
+ output_per_million: 2.0,
992
1104
  },
993
1105
  features: {
994
1106
  context_length: 400000,
995
- input_modality: ['text'],
1107
+ max_output_tokens: 128000,
1108
+ input_modality: ['text', 'image'],
996
1109
  output_modality: ['text'],
997
1110
  tool_use: true,
998
1111
  streaming: true,
999
1112
  json_output: true,
1000
- max_output_tokens: 128000,
1001
1113
  },
1002
1114
  class: 'code',
1003
1115
  score: 86,
@@ -1007,21 +1119,22 @@ export const MODEL_REGISTRY = [
1007
1119
  id: 'gpt-5.1-codex-max',
1008
1120
  provider: 'openai',
1009
1121
  cost: {
1010
- input_per_million: 5.0,
1011
- output_per_million: 15.0,
1122
+ input_per_million: 1.25,
1123
+ cached_input_per_million: 0.125,
1124
+ output_per_million: 10.0,
1012
1125
  },
1013
1126
  features: {
1014
- context_length: 10_000_000,
1015
- input_modality: ['text'],
1127
+ context_length: 400000,
1128
+ max_output_tokens: 128000,
1129
+ input_modality: ['text', 'image'],
1016
1130
  output_modality: ['text'],
1017
1131
  tool_use: true,
1018
1132
  streaming: true,
1019
1133
  json_output: true,
1020
- max_output_tokens: 128000,
1021
1134
  },
1022
1135
  class: 'code',
1023
1136
  score: 95,
1024
- description: 'GPT-5.1 Codex Max — multi-million context (IDE-only for now), pricing TBD.',
1137
+ description: 'GPT-5.1 Codex Max — most capable Codex model for coding agents (400k/128k).',
1025
1138
  },
1026
1139
  {
1027
1140
  id: 'gpt-4o',
@@ -1253,7 +1366,7 @@ export const MODEL_REGISTRY = [
1253
1366
  },
1254
1367
  {
1255
1368
  id: 'claude-sonnet-4-5-20250514',
1256
- aliases: ['claude-sonnet-4-5', 'claude-sonnet-4.5', 'claude-sonnet-latest'],
1369
+ aliases: ['claude-sonnet-4.5-2025-05-14', 'claude-sonnet-4-5-may-2025'],
1257
1370
  provider: 'anthropic',
1258
1371
  cost: {
1259
1372
  input_per_million: 3.0,
@@ -1281,7 +1394,13 @@ export const MODEL_REGISTRY = [
1281
1394
  },
1282
1395
  {
1283
1396
  id: 'claude-sonnet-4-5-20250929',
1284
- aliases: ['claude-sonnet-4-5-sep-2025', 'claude-sonnet-4.5-2025-09-29'],
1397
+ aliases: [
1398
+ 'claude-sonnet-4-5',
1399
+ 'claude-sonnet-4.5',
1400
+ 'claude-sonnet-latest',
1401
+ 'claude-sonnet-4-5-sep-2025',
1402
+ 'claude-sonnet-4.5-2025-09-29',
1403
+ ],
1285
1404
  provider: 'anthropic',
1286
1405
  cost: {
1287
1406
  input_per_million: {
@@ -1339,7 +1458,7 @@ export const MODEL_REGISTRY = [
1339
1458
  },
1340
1459
  {
1341
1460
  id: 'claude-haiku-4-5-20250514',
1342
- aliases: ['claude-haiku-4-5', 'claude-haiku-4.5', 'claude-haiku-latest'],
1461
+ aliases: ['claude-haiku-4.5-2025-05-14', 'claude-haiku-4-5-may-2025'],
1343
1462
  provider: 'anthropic',
1344
1463
  cost: {
1345
1464
  input_per_million: 1.0,
@@ -1366,7 +1485,13 @@ export const MODEL_REGISTRY = [
1366
1485
  },
1367
1486
  {
1368
1487
  id: 'claude-haiku-4-5-20251001',
1369
- aliases: ['claude-haiku-4-5-oct-2025', 'claude-haiku-4.5-2025-10-01'],
1488
+ aliases: [
1489
+ 'claude-haiku-4-5',
1490
+ 'claude-haiku-4.5',
1491
+ 'claude-haiku-latest',
1492
+ 'claude-haiku-4-5-oct-2025',
1493
+ 'claude-haiku-4.5-2025-10-01',
1494
+ ],
1370
1495
  provider: 'anthropic',
1371
1496
  cost: {
1372
1497
  input_per_million: 1.0,
@@ -1407,7 +1532,7 @@ export const MODEL_REGISTRY = [
1407
1532
  },
1408
1533
  {
1409
1534
  id: 'claude-opus-4-1-20250805',
1410
- aliases: ['claude-opus-4-1', 'claude-opus-4.1', 'claude-4-opus', 'claude-opus'],
1535
+ aliases: ['claude-opus-4-1', 'claude-opus-4.1', 'claude-4-opus'],
1411
1536
  provider: 'anthropic',
1412
1537
  cost: {
1413
1538
  input_per_million: 15.0,
@@ -1433,6 +1558,35 @@ export const MODEL_REGISTRY = [
1433
1558
  },
1434
1559
  description: 'Claude Opus 4.1 - Highest intelligence and capability with reasoning support',
1435
1560
  },
1561
+ {
1562
+ id: 'claude-opus-4-5-20251101',
1563
+ aliases: [
1564
+ 'claude-opus-4-5',
1565
+ 'claude-opus-4.5',
1566
+ 'claude-opus',
1567
+ 'claude-opus-latest',
1568
+ 'claude-4.5-opus',
1569
+ ],
1570
+ provider: 'anthropic',
1571
+ cost: {
1572
+ input_per_million: 15.0,
1573
+ output_per_million: 75.0,
1574
+ cached_input_per_million: 1.5,
1575
+ },
1576
+ features: {
1577
+ context_length: 200000,
1578
+ input_modality: ['text', 'image'],
1579
+ output_modality: ['text'],
1580
+ tool_use: true,
1581
+ streaming: true,
1582
+ json_output: true,
1583
+ reasoning_output: true,
1584
+ max_output_tokens: 32000,
1585
+ },
1586
+ class: 'reasoning',
1587
+ score: 96,
1588
+ description: 'Claude Opus 4.5 - Latest Opus model with strongest reasoning, code, and long-form capabilities.',
1589
+ },
1436
1590
  {
1437
1591
  id: 'gemini-2.5-pro-preview-06-05',
1438
1592
  aliases: ['gemini-2.5-pro', 'gemini-2.5-pro-exp-03-25', 'gemini-2.5-pro-preview-05-06'],
@@ -1456,8 +1610,8 @@ export const MODEL_REGISTRY = [
1456
1610
  description: 'Paid preview of Gemini 2.5 Pro. State-of-the-art multipurpose model.',
1457
1611
  },
1458
1612
  {
1459
- id: 'gemini-2.5-flash-preview-05-20',
1460
- aliases: ['gemini-2.5-flash', 'gemini-2.5-flash-preview-04-17'],
1613
+ id: 'gemini-2.5-flash',
1614
+ aliases: ['gemini-2.5-flash-preview-05-20', 'gemini-2.5-flash-preview-04-17'],
1461
1615
  provider: 'google',
1462
1616
  cost: {
1463
1617
  input_per_million: {
@@ -1485,8 +1639,8 @@ export const MODEL_REGISTRY = [
1485
1639
  description: 'Balanced multimodal model with large context, built for Agents.',
1486
1640
  },
1487
1641
  {
1488
- id: 'gemini-2.5-flash-lite-preview-06-17',
1489
- aliases: ['gemini-2.5-flash-lite'],
1642
+ id: 'gemini-2.5-flash-lite',
1643
+ aliases: ['gemini-2.5-flash-lite-preview-06-17'],
1490
1644
  provider: 'google',
1491
1645
  cost: {
1492
1646
  input_per_million: 0.05,
@@ -1607,11 +1761,48 @@ export const MODEL_REGISTRY = [
1607
1761
  },
1608
1762
  description: 'Balanced multimodal model with large context, built for Agents.',
1609
1763
  },
1764
+ {
1765
+ id: 'gpt-image-1.5',
1766
+ aliases: ['gpt-image-1.5-2025-12-16'],
1767
+ provider: 'openai',
1768
+ cost: {
1769
+ per_image: 0.034,
1770
+ input_per_million: {
1771
+ text: 5.0,
1772
+ image: 8.0,
1773
+ },
1774
+ output_per_million: {
1775
+ text: 10.0,
1776
+ image: 32.0,
1777
+ },
1778
+ },
1779
+ features: {
1780
+ input_modality: ['text', 'image'],
1781
+ output_modality: ['image', 'text'],
1782
+ streaming: false,
1783
+ },
1784
+ class: 'image_generation',
1785
+ description: "OpenAI's GPT Image 1.5 model for text-to-image generation and editing. Pricing varies by quality (low/medium/high) and size (1024x1024, 1024x1536, 1536x1024).",
1786
+ },
1610
1787
  {
1611
1788
  id: 'gpt-image-1',
1612
1789
  provider: 'openai',
1613
1790
  cost: {
1614
- per_image: 0.042,
1791
+ per_image: 0.026,
1792
+ },
1793
+ features: {
1794
+ input_modality: ['text', 'image'],
1795
+ output_modality: ['image'],
1796
+ streaming: false,
1797
+ },
1798
+ class: 'image_generation',
1799
+ description: "OpenAI's GPT-Image-1 model for text-to-image generation. Supports quality levels (low/medium/high) and sizes (1024x1024, 1024x1536, 1536x1024).",
1800
+ },
1801
+ {
1802
+ id: 'gpt-image-1-mini',
1803
+ provider: 'openai',
1804
+ cost: {
1805
+ per_image: 0.011,
1615
1806
  },
1616
1807
  features: {
1617
1808
  input_modality: ['text', 'image'],
@@ -1619,7 +1810,7 @@ export const MODEL_REGISTRY = [
1619
1810
  streaming: false,
1620
1811
  },
1621
1812
  class: 'image_generation',
1622
- description: "OpenAI's GPT-Image-1 model for text-to-image generation. Supports quality levels (low: $0.011-0.016, medium: $0.042-0.063, high: $0.167-0.25) and sizes (1024x1024, 1024x1536, 1536x1024).",
1813
+ description: "OpenAI's GPT-Image-1 Mini model. Cost-efficient variant with lower per-image pricing (low: $0.005-0.006, medium: $0.011-0.015) across sizes (1024x1024, 1024x1536, 1536x1024).",
1623
1814
  },
1624
1815
  {
1625
1816
  id: 'gpt-4o-mini-tts',
@@ -1745,6 +1936,7 @@ export const MODEL_REGISTRY = [
1745
1936
  },
1746
1937
  {
1747
1938
  id: 'gemini-2.5-flash-native-audio-preview',
1939
+ aliases: ['gemini-2.5-flash-native-audio-preview-12-2025'],
1748
1940
  provider: 'google',
1749
1941
  cost: {
1750
1942
  input_per_million: 5.0,
@@ -2350,7 +2542,7 @@ export function findModel(modelId) {
2350
2542
  const aliasMatch = MODEL_REGISTRY.find(model => model.aliases?.includes(modelId));
2351
2543
  if (aliasMatch)
2352
2544
  return aliasMatch;
2353
- const suffixes = ['-low', '-medium', '-high', '-max'];
2545
+ const suffixes = ['-xhigh', '-minimal', '-low', '-medium', '-high', '-none', '-max'];
2354
2546
  for (const suffix of suffixes) {
2355
2547
  if (modelId.endsWith(suffix)) {
2356
2548
  const baseName = modelId.slice(0, -suffix.length);