@lenylvt/pi-ai 0.64.0

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 (167) hide show
  1. package/README.md +203 -0
  2. package/dist/api-registry.d.ts +20 -0
  3. package/dist/api-registry.d.ts.map +1 -0
  4. package/dist/api-registry.js +44 -0
  5. package/dist/api-registry.js.map +1 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +119 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/env-api-keys.d.ts +7 -0
  11. package/dist/env-api-keys.d.ts.map +1 -0
  12. package/dist/env-api-keys.js +13 -0
  13. package/dist/env-api-keys.js.map +1 -0
  14. package/dist/index.d.ts +20 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +14 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/models.d.ts +24 -0
  19. package/dist/models.d.ts.map +1 -0
  20. package/dist/models.generated.d.ts +2332 -0
  21. package/dist/models.generated.d.ts.map +1 -0
  22. package/dist/models.generated.js +2186 -0
  23. package/dist/models.generated.js.map +1 -0
  24. package/dist/models.js +60 -0
  25. package/dist/models.js.map +1 -0
  26. package/dist/oauth.d.ts +2 -0
  27. package/dist/oauth.d.ts.map +1 -0
  28. package/dist/oauth.js +2 -0
  29. package/dist/oauth.js.map +1 -0
  30. package/dist/providers/anthropic.d.ts +40 -0
  31. package/dist/providers/anthropic.d.ts.map +1 -0
  32. package/dist/providers/anthropic.js +749 -0
  33. package/dist/providers/anthropic.js.map +1 -0
  34. package/dist/providers/faux.d.ts +56 -0
  35. package/dist/providers/faux.d.ts.map +1 -0
  36. package/dist/providers/faux.js +367 -0
  37. package/dist/providers/faux.js.map +1 -0
  38. package/dist/providers/github-copilot-headers.d.ts +8 -0
  39. package/dist/providers/github-copilot-headers.d.ts.map +1 -0
  40. package/dist/providers/github-copilot-headers.js +29 -0
  41. package/dist/providers/github-copilot-headers.js.map +1 -0
  42. package/dist/providers/openai-codex-responses.d.ts +9 -0
  43. package/dist/providers/openai-codex-responses.d.ts.map +1 -0
  44. package/dist/providers/openai-codex-responses.js +741 -0
  45. package/dist/providers/openai-codex-responses.js.map +1 -0
  46. package/dist/providers/openai-completions.d.ts +15 -0
  47. package/dist/providers/openai-completions.d.ts.map +1 -0
  48. package/dist/providers/openai-completions.js +687 -0
  49. package/dist/providers/openai-completions.js.map +1 -0
  50. package/dist/providers/openai-responses-shared.d.ts +17 -0
  51. package/dist/providers/openai-responses-shared.d.ts.map +1 -0
  52. package/dist/providers/openai-responses-shared.js +458 -0
  53. package/dist/providers/openai-responses-shared.js.map +1 -0
  54. package/dist/providers/openai-responses.d.ts +13 -0
  55. package/dist/providers/openai-responses.d.ts.map +1 -0
  56. package/dist/providers/openai-responses.js +190 -0
  57. package/dist/providers/openai-responses.js.map +1 -0
  58. package/dist/providers/register-builtins.d.ts +16 -0
  59. package/dist/providers/register-builtins.d.ts.map +1 -0
  60. package/dist/providers/register-builtins.js +140 -0
  61. package/dist/providers/register-builtins.js.map +1 -0
  62. package/dist/providers/simple-options.d.ts +8 -0
  63. package/dist/providers/simple-options.d.ts.map +1 -0
  64. package/dist/providers/simple-options.js +35 -0
  65. package/dist/providers/simple-options.js.map +1 -0
  66. package/dist/providers/transform-messages.d.ts +8 -0
  67. package/dist/providers/transform-messages.d.ts.map +1 -0
  68. package/dist/providers/transform-messages.js +155 -0
  69. package/dist/providers/transform-messages.js.map +1 -0
  70. package/dist/stream.d.ts +8 -0
  71. package/dist/stream.d.ts.map +1 -0
  72. package/dist/stream.js +27 -0
  73. package/dist/stream.js.map +1 -0
  74. package/dist/types.d.ts +283 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +2 -0
  77. package/dist/types.js.map +1 -0
  78. package/dist/utils/event-stream.d.ts +21 -0
  79. package/dist/utils/event-stream.d.ts.map +1 -0
  80. package/dist/utils/event-stream.js +81 -0
  81. package/dist/utils/event-stream.js.map +1 -0
  82. package/dist/utils/hash.d.ts +3 -0
  83. package/dist/utils/hash.d.ts.map +1 -0
  84. package/dist/utils/hash.js +14 -0
  85. package/dist/utils/hash.js.map +1 -0
  86. package/dist/utils/json-parse.d.ts +9 -0
  87. package/dist/utils/json-parse.d.ts.map +1 -0
  88. package/dist/utils/json-parse.js +29 -0
  89. package/dist/utils/json-parse.js.map +1 -0
  90. package/dist/utils/oauth/anthropic.d.ts +25 -0
  91. package/dist/utils/oauth/anthropic.d.ts.map +1 -0
  92. package/dist/utils/oauth/anthropic.js +335 -0
  93. package/dist/utils/oauth/anthropic.js.map +1 -0
  94. package/dist/utils/oauth/github-copilot.d.ts +30 -0
  95. package/dist/utils/oauth/github-copilot.d.ts.map +1 -0
  96. package/dist/utils/oauth/github-copilot.js +292 -0
  97. package/dist/utils/oauth/github-copilot.js.map +1 -0
  98. package/dist/utils/oauth/index.d.ts +36 -0
  99. package/dist/utils/oauth/index.d.ts.map +1 -0
  100. package/dist/utils/oauth/index.js +92 -0
  101. package/dist/utils/oauth/index.js.map +1 -0
  102. package/dist/utils/oauth/oauth-page.d.ts +3 -0
  103. package/dist/utils/oauth/oauth-page.d.ts.map +1 -0
  104. package/dist/utils/oauth/oauth-page.js +105 -0
  105. package/dist/utils/oauth/oauth-page.js.map +1 -0
  106. package/dist/utils/oauth/openai-codex.d.ts +34 -0
  107. package/dist/utils/oauth/openai-codex.d.ts.map +1 -0
  108. package/dist/utils/oauth/openai-codex.js +373 -0
  109. package/dist/utils/oauth/openai-codex.js.map +1 -0
  110. package/dist/utils/oauth/pkce.d.ts +13 -0
  111. package/dist/utils/oauth/pkce.d.ts.map +1 -0
  112. package/dist/utils/oauth/pkce.js +31 -0
  113. package/dist/utils/oauth/pkce.js.map +1 -0
  114. package/dist/utils/oauth/types.d.ts +47 -0
  115. package/dist/utils/oauth/types.d.ts.map +1 -0
  116. package/dist/utils/oauth/types.js +2 -0
  117. package/dist/utils/oauth/types.js.map +1 -0
  118. package/dist/utils/overflow.d.ts +53 -0
  119. package/dist/utils/overflow.d.ts.map +1 -0
  120. package/dist/utils/overflow.js +119 -0
  121. package/dist/utils/overflow.js.map +1 -0
  122. package/dist/utils/sanitize-unicode.d.ts +22 -0
  123. package/dist/utils/sanitize-unicode.d.ts.map +1 -0
  124. package/dist/utils/sanitize-unicode.js +26 -0
  125. package/dist/utils/sanitize-unicode.js.map +1 -0
  126. package/dist/utils/typebox-helpers.d.ts +17 -0
  127. package/dist/utils/typebox-helpers.d.ts.map +1 -0
  128. package/dist/utils/typebox-helpers.js +21 -0
  129. package/dist/utils/typebox-helpers.js.map +1 -0
  130. package/dist/utils/validation.d.ts +18 -0
  131. package/dist/utils/validation.d.ts.map +1 -0
  132. package/dist/utils/validation.js +80 -0
  133. package/dist/utils/validation.js.map +1 -0
  134. package/package.json +89 -0
  135. package/src/api-registry.ts +98 -0
  136. package/src/cli.ts +136 -0
  137. package/src/env-api-keys.ts +22 -0
  138. package/src/index.ts +29 -0
  139. package/src/models.generated.ts +2188 -0
  140. package/src/models.ts +82 -0
  141. package/src/oauth.ts +1 -0
  142. package/src/providers/anthropic.ts +905 -0
  143. package/src/providers/faux.ts +498 -0
  144. package/src/providers/github-copilot-headers.ts +37 -0
  145. package/src/providers/openai-codex-responses.ts +929 -0
  146. package/src/providers/openai-completions.ts +811 -0
  147. package/src/providers/openai-responses-shared.ts +513 -0
  148. package/src/providers/openai-responses.ts +251 -0
  149. package/src/providers/register-builtins.ts +232 -0
  150. package/src/providers/simple-options.ts +46 -0
  151. package/src/providers/transform-messages.ts +172 -0
  152. package/src/stream.ts +59 -0
  153. package/src/types.ts +294 -0
  154. package/src/utils/event-stream.ts +87 -0
  155. package/src/utils/hash.ts +13 -0
  156. package/src/utils/json-parse.ts +28 -0
  157. package/src/utils/oauth/anthropic.ts +402 -0
  158. package/src/utils/oauth/github-copilot.ts +396 -0
  159. package/src/utils/oauth/index.ts +123 -0
  160. package/src/utils/oauth/oauth-page.ts +109 -0
  161. package/src/utils/oauth/openai-codex.ts +450 -0
  162. package/src/utils/oauth/pkce.ts +34 -0
  163. package/src/utils/oauth/types.ts +59 -0
  164. package/src/utils/overflow.ts +125 -0
  165. package/src/utils/sanitize-unicode.ts +25 -0
  166. package/src/utils/typebox-helpers.ts +24 -0
  167. package/src/utils/validation.ts +93 -0
@@ -0,0 +1,2188 @@
1
+ // This file is auto-generated by scripts/generate-models.ts
2
+ // Do not edit manually - run 'bun packages/ai/scripts/generate-models.ts' to update
3
+
4
+ import type { Model } from "./types.js";
5
+
6
+ export const MODELS = {
7
+ "anthropic": {
8
+ "claude-3-5-haiku-20241022": {
9
+ id: "claude-3-5-haiku-20241022",
10
+ name: "Claude Haiku 3.5",
11
+ api: "anthropic-messages",
12
+ provider: "anthropic",
13
+ baseUrl: "https://api.anthropic.com",
14
+ reasoning: false,
15
+ input: ["text", "image"],
16
+ cost: {
17
+ input: 0.8,
18
+ output: 4,
19
+ cacheRead: 0.08,
20
+ cacheWrite: 1,
21
+ },
22
+ contextWindow: 200000,
23
+ maxTokens: 8192,
24
+ } satisfies Model<"anthropic-messages">,
25
+ "claude-3-5-haiku-latest": {
26
+ id: "claude-3-5-haiku-latest",
27
+ name: "Claude Haiku 3.5 (latest)",
28
+ api: "anthropic-messages",
29
+ provider: "anthropic",
30
+ baseUrl: "https://api.anthropic.com",
31
+ reasoning: false,
32
+ input: ["text", "image"],
33
+ cost: {
34
+ input: 0.8,
35
+ output: 4,
36
+ cacheRead: 0.08,
37
+ cacheWrite: 1,
38
+ },
39
+ contextWindow: 200000,
40
+ maxTokens: 8192,
41
+ } satisfies Model<"anthropic-messages">,
42
+ "claude-3-5-sonnet-20240620": {
43
+ id: "claude-3-5-sonnet-20240620",
44
+ name: "Claude Sonnet 3.5",
45
+ api: "anthropic-messages",
46
+ provider: "anthropic",
47
+ baseUrl: "https://api.anthropic.com",
48
+ reasoning: false,
49
+ input: ["text", "image"],
50
+ cost: {
51
+ input: 3,
52
+ output: 15,
53
+ cacheRead: 0.3,
54
+ cacheWrite: 3.75,
55
+ },
56
+ contextWindow: 200000,
57
+ maxTokens: 8192,
58
+ } satisfies Model<"anthropic-messages">,
59
+ "claude-3-5-sonnet-20241022": {
60
+ id: "claude-3-5-sonnet-20241022",
61
+ name: "Claude Sonnet 3.5 v2",
62
+ api: "anthropic-messages",
63
+ provider: "anthropic",
64
+ baseUrl: "https://api.anthropic.com",
65
+ reasoning: false,
66
+ input: ["text", "image"],
67
+ cost: {
68
+ input: 3,
69
+ output: 15,
70
+ cacheRead: 0.3,
71
+ cacheWrite: 3.75,
72
+ },
73
+ contextWindow: 200000,
74
+ maxTokens: 8192,
75
+ } satisfies Model<"anthropic-messages">,
76
+ "claude-3-7-sonnet-20250219": {
77
+ id: "claude-3-7-sonnet-20250219",
78
+ name: "Claude Sonnet 3.7",
79
+ api: "anthropic-messages",
80
+ provider: "anthropic",
81
+ baseUrl: "https://api.anthropic.com",
82
+ reasoning: true,
83
+ input: ["text", "image"],
84
+ cost: {
85
+ input: 3,
86
+ output: 15,
87
+ cacheRead: 0.3,
88
+ cacheWrite: 3.75,
89
+ },
90
+ contextWindow: 200000,
91
+ maxTokens: 64000,
92
+ } satisfies Model<"anthropic-messages">,
93
+ "claude-3-haiku-20240307": {
94
+ id: "claude-3-haiku-20240307",
95
+ name: "Claude Haiku 3",
96
+ api: "anthropic-messages",
97
+ provider: "anthropic",
98
+ baseUrl: "https://api.anthropic.com",
99
+ reasoning: false,
100
+ input: ["text", "image"],
101
+ cost: {
102
+ input: 0.25,
103
+ output: 1.25,
104
+ cacheRead: 0.03,
105
+ cacheWrite: 0.3,
106
+ },
107
+ contextWindow: 200000,
108
+ maxTokens: 4096,
109
+ } satisfies Model<"anthropic-messages">,
110
+ "claude-3-opus-20240229": {
111
+ id: "claude-3-opus-20240229",
112
+ name: "Claude Opus 3",
113
+ api: "anthropic-messages",
114
+ provider: "anthropic",
115
+ baseUrl: "https://api.anthropic.com",
116
+ reasoning: false,
117
+ input: ["text", "image"],
118
+ cost: {
119
+ input: 15,
120
+ output: 75,
121
+ cacheRead: 1.5,
122
+ cacheWrite: 18.75,
123
+ },
124
+ contextWindow: 200000,
125
+ maxTokens: 4096,
126
+ } satisfies Model<"anthropic-messages">,
127
+ "claude-3-sonnet-20240229": {
128
+ id: "claude-3-sonnet-20240229",
129
+ name: "Claude Sonnet 3",
130
+ api: "anthropic-messages",
131
+ provider: "anthropic",
132
+ baseUrl: "https://api.anthropic.com",
133
+ reasoning: false,
134
+ input: ["text", "image"],
135
+ cost: {
136
+ input: 3,
137
+ output: 15,
138
+ cacheRead: 0.3,
139
+ cacheWrite: 0.3,
140
+ },
141
+ contextWindow: 200000,
142
+ maxTokens: 4096,
143
+ } satisfies Model<"anthropic-messages">,
144
+ "claude-haiku-4-5": {
145
+ id: "claude-haiku-4-5",
146
+ name: "Claude Haiku 4.5 (latest)",
147
+ api: "anthropic-messages",
148
+ provider: "anthropic",
149
+ baseUrl: "https://api.anthropic.com",
150
+ reasoning: true,
151
+ input: ["text", "image"],
152
+ cost: {
153
+ input: 1,
154
+ output: 5,
155
+ cacheRead: 0.1,
156
+ cacheWrite: 1.25,
157
+ },
158
+ contextWindow: 200000,
159
+ maxTokens: 64000,
160
+ } satisfies Model<"anthropic-messages">,
161
+ "claude-haiku-4-5-20251001": {
162
+ id: "claude-haiku-4-5-20251001",
163
+ name: "Claude Haiku 4.5",
164
+ api: "anthropic-messages",
165
+ provider: "anthropic",
166
+ baseUrl: "https://api.anthropic.com",
167
+ reasoning: true,
168
+ input: ["text", "image"],
169
+ cost: {
170
+ input: 1,
171
+ output: 5,
172
+ cacheRead: 0.1,
173
+ cacheWrite: 1.25,
174
+ },
175
+ contextWindow: 200000,
176
+ maxTokens: 64000,
177
+ } satisfies Model<"anthropic-messages">,
178
+ "claude-opus-4-0": {
179
+ id: "claude-opus-4-0",
180
+ name: "Claude Opus 4 (latest)",
181
+ api: "anthropic-messages",
182
+ provider: "anthropic",
183
+ baseUrl: "https://api.anthropic.com",
184
+ reasoning: true,
185
+ input: ["text", "image"],
186
+ cost: {
187
+ input: 15,
188
+ output: 75,
189
+ cacheRead: 1.5,
190
+ cacheWrite: 18.75,
191
+ },
192
+ contextWindow: 200000,
193
+ maxTokens: 32000,
194
+ } satisfies Model<"anthropic-messages">,
195
+ "claude-opus-4-1": {
196
+ id: "claude-opus-4-1",
197
+ name: "Claude Opus 4.1 (latest)",
198
+ api: "anthropic-messages",
199
+ provider: "anthropic",
200
+ baseUrl: "https://api.anthropic.com",
201
+ reasoning: true,
202
+ input: ["text", "image"],
203
+ cost: {
204
+ input: 15,
205
+ output: 75,
206
+ cacheRead: 1.5,
207
+ cacheWrite: 18.75,
208
+ },
209
+ contextWindow: 200000,
210
+ maxTokens: 32000,
211
+ } satisfies Model<"anthropic-messages">,
212
+ "claude-opus-4-1-20250805": {
213
+ id: "claude-opus-4-1-20250805",
214
+ name: "Claude Opus 4.1",
215
+ api: "anthropic-messages",
216
+ provider: "anthropic",
217
+ baseUrl: "https://api.anthropic.com",
218
+ reasoning: true,
219
+ input: ["text", "image"],
220
+ cost: {
221
+ input: 15,
222
+ output: 75,
223
+ cacheRead: 1.5,
224
+ cacheWrite: 18.75,
225
+ },
226
+ contextWindow: 200000,
227
+ maxTokens: 32000,
228
+ } satisfies Model<"anthropic-messages">,
229
+ "claude-opus-4-20250514": {
230
+ id: "claude-opus-4-20250514",
231
+ name: "Claude Opus 4",
232
+ api: "anthropic-messages",
233
+ provider: "anthropic",
234
+ baseUrl: "https://api.anthropic.com",
235
+ reasoning: true,
236
+ input: ["text", "image"],
237
+ cost: {
238
+ input: 15,
239
+ output: 75,
240
+ cacheRead: 1.5,
241
+ cacheWrite: 18.75,
242
+ },
243
+ contextWindow: 200000,
244
+ maxTokens: 32000,
245
+ } satisfies Model<"anthropic-messages">,
246
+ "claude-opus-4-5": {
247
+ id: "claude-opus-4-5",
248
+ name: "Claude Opus 4.5 (latest)",
249
+ api: "anthropic-messages",
250
+ provider: "anthropic",
251
+ baseUrl: "https://api.anthropic.com",
252
+ reasoning: true,
253
+ input: ["text", "image"],
254
+ cost: {
255
+ input: 5,
256
+ output: 25,
257
+ cacheRead: 0.5,
258
+ cacheWrite: 6.25,
259
+ },
260
+ contextWindow: 200000,
261
+ maxTokens: 64000,
262
+ } satisfies Model<"anthropic-messages">,
263
+ "claude-opus-4-5-20251101": {
264
+ id: "claude-opus-4-5-20251101",
265
+ name: "Claude Opus 4.5",
266
+ api: "anthropic-messages",
267
+ provider: "anthropic",
268
+ baseUrl: "https://api.anthropic.com",
269
+ reasoning: true,
270
+ input: ["text", "image"],
271
+ cost: {
272
+ input: 5,
273
+ output: 25,
274
+ cacheRead: 0.5,
275
+ cacheWrite: 6.25,
276
+ },
277
+ contextWindow: 200000,
278
+ maxTokens: 64000,
279
+ } satisfies Model<"anthropic-messages">,
280
+ "claude-opus-4-6": {
281
+ id: "claude-opus-4-6",
282
+ name: "Claude Opus 4.6",
283
+ api: "anthropic-messages",
284
+ provider: "anthropic",
285
+ baseUrl: "https://api.anthropic.com",
286
+ reasoning: true,
287
+ input: ["text", "image"],
288
+ cost: {
289
+ input: 5,
290
+ output: 25,
291
+ cacheRead: 0.5,
292
+ cacheWrite: 6.25,
293
+ },
294
+ contextWindow: 1000000,
295
+ maxTokens: 128000,
296
+ } satisfies Model<"anthropic-messages">,
297
+ "claude-sonnet-4-0": {
298
+ id: "claude-sonnet-4-0",
299
+ name: "Claude Sonnet 4 (latest)",
300
+ api: "anthropic-messages",
301
+ provider: "anthropic",
302
+ baseUrl: "https://api.anthropic.com",
303
+ reasoning: true,
304
+ input: ["text", "image"],
305
+ cost: {
306
+ input: 3,
307
+ output: 15,
308
+ cacheRead: 0.3,
309
+ cacheWrite: 3.75,
310
+ },
311
+ contextWindow: 200000,
312
+ maxTokens: 64000,
313
+ } satisfies Model<"anthropic-messages">,
314
+ "claude-sonnet-4-20250514": {
315
+ id: "claude-sonnet-4-20250514",
316
+ name: "Claude Sonnet 4",
317
+ api: "anthropic-messages",
318
+ provider: "anthropic",
319
+ baseUrl: "https://api.anthropic.com",
320
+ reasoning: true,
321
+ input: ["text", "image"],
322
+ cost: {
323
+ input: 3,
324
+ output: 15,
325
+ cacheRead: 0.3,
326
+ cacheWrite: 3.75,
327
+ },
328
+ contextWindow: 200000,
329
+ maxTokens: 64000,
330
+ } satisfies Model<"anthropic-messages">,
331
+ "claude-sonnet-4-5": {
332
+ id: "claude-sonnet-4-5",
333
+ name: "Claude Sonnet 4.5 (latest)",
334
+ api: "anthropic-messages",
335
+ provider: "anthropic",
336
+ baseUrl: "https://api.anthropic.com",
337
+ reasoning: true,
338
+ input: ["text", "image"],
339
+ cost: {
340
+ input: 3,
341
+ output: 15,
342
+ cacheRead: 0.3,
343
+ cacheWrite: 3.75,
344
+ },
345
+ contextWindow: 200000,
346
+ maxTokens: 64000,
347
+ } satisfies Model<"anthropic-messages">,
348
+ "claude-sonnet-4-5-20250929": {
349
+ id: "claude-sonnet-4-5-20250929",
350
+ name: "Claude Sonnet 4.5",
351
+ api: "anthropic-messages",
352
+ provider: "anthropic",
353
+ baseUrl: "https://api.anthropic.com",
354
+ reasoning: true,
355
+ input: ["text", "image"],
356
+ cost: {
357
+ input: 3,
358
+ output: 15,
359
+ cacheRead: 0.3,
360
+ cacheWrite: 3.75,
361
+ },
362
+ contextWindow: 200000,
363
+ maxTokens: 64000,
364
+ } satisfies Model<"anthropic-messages">,
365
+ "claude-sonnet-4-6": {
366
+ id: "claude-sonnet-4-6",
367
+ name: "Claude Sonnet 4.6",
368
+ api: "anthropic-messages",
369
+ provider: "anthropic",
370
+ baseUrl: "https://api.anthropic.com",
371
+ reasoning: true,
372
+ input: ["text", "image"],
373
+ cost: {
374
+ input: 3,
375
+ output: 15,
376
+ cacheRead: 0.3,
377
+ cacheWrite: 3.75,
378
+ },
379
+ contextWindow: 1000000,
380
+ maxTokens: 64000,
381
+ } satisfies Model<"anthropic-messages">,
382
+ },
383
+ "github-copilot": {
384
+ "claude-haiku-4.5": {
385
+ id: "claude-haiku-4.5",
386
+ name: "Claude Haiku 4.5",
387
+ api: "anthropic-messages",
388
+ provider: "github-copilot",
389
+ baseUrl: "https://api.individual.githubcopilot.com",
390
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
391
+ reasoning: true,
392
+ input: ["text", "image"],
393
+ cost: {
394
+ input: 0,
395
+ output: 0,
396
+ cacheRead: 0,
397
+ cacheWrite: 0,
398
+ },
399
+ contextWindow: 144000,
400
+ maxTokens: 32000,
401
+ } satisfies Model<"anthropic-messages">,
402
+ "claude-opus-4.5": {
403
+ id: "claude-opus-4.5",
404
+ name: "Claude Opus 4.5",
405
+ api: "anthropic-messages",
406
+ provider: "github-copilot",
407
+ baseUrl: "https://api.individual.githubcopilot.com",
408
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
409
+ reasoning: true,
410
+ input: ["text", "image"],
411
+ cost: {
412
+ input: 0,
413
+ output: 0,
414
+ cacheRead: 0,
415
+ cacheWrite: 0,
416
+ },
417
+ contextWindow: 160000,
418
+ maxTokens: 32000,
419
+ } satisfies Model<"anthropic-messages">,
420
+ "claude-opus-4.6": {
421
+ id: "claude-opus-4.6",
422
+ name: "Claude Opus 4.6",
423
+ api: "anthropic-messages",
424
+ provider: "github-copilot",
425
+ baseUrl: "https://api.individual.githubcopilot.com",
426
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
427
+ reasoning: true,
428
+ input: ["text", "image"],
429
+ cost: {
430
+ input: 0,
431
+ output: 0,
432
+ cacheRead: 0,
433
+ cacheWrite: 0,
434
+ },
435
+ contextWindow: 144000,
436
+ maxTokens: 64000,
437
+ } satisfies Model<"anthropic-messages">,
438
+ "claude-sonnet-4": {
439
+ id: "claude-sonnet-4",
440
+ name: "Claude Sonnet 4",
441
+ api: "anthropic-messages",
442
+ provider: "github-copilot",
443
+ baseUrl: "https://api.individual.githubcopilot.com",
444
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
445
+ reasoning: true,
446
+ input: ["text", "image"],
447
+ cost: {
448
+ input: 0,
449
+ output: 0,
450
+ cacheRead: 0,
451
+ cacheWrite: 0,
452
+ },
453
+ contextWindow: 216000,
454
+ maxTokens: 16000,
455
+ } satisfies Model<"anthropic-messages">,
456
+ "claude-sonnet-4.5": {
457
+ id: "claude-sonnet-4.5",
458
+ name: "Claude Sonnet 4.5",
459
+ api: "anthropic-messages",
460
+ provider: "github-copilot",
461
+ baseUrl: "https://api.individual.githubcopilot.com",
462
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
463
+ reasoning: true,
464
+ input: ["text", "image"],
465
+ cost: {
466
+ input: 0,
467
+ output: 0,
468
+ cacheRead: 0,
469
+ cacheWrite: 0,
470
+ },
471
+ contextWindow: 144000,
472
+ maxTokens: 32000,
473
+ } satisfies Model<"anthropic-messages">,
474
+ "claude-sonnet-4.6": {
475
+ id: "claude-sonnet-4.6",
476
+ name: "Claude Sonnet 4.6",
477
+ api: "anthropic-messages",
478
+ provider: "github-copilot",
479
+ baseUrl: "https://api.individual.githubcopilot.com",
480
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
481
+ reasoning: true,
482
+ input: ["text", "image"],
483
+ cost: {
484
+ input: 0,
485
+ output: 0,
486
+ cacheRead: 0,
487
+ cacheWrite: 0,
488
+ },
489
+ contextWindow: 200000,
490
+ maxTokens: 32000,
491
+ } satisfies Model<"anthropic-messages">,
492
+ "gemini-2.5-pro": {
493
+ id: "gemini-2.5-pro",
494
+ name: "Gemini 2.5 Pro",
495
+ api: "openai-completions",
496
+ provider: "github-copilot",
497
+ baseUrl: "https://api.individual.githubcopilot.com",
498
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
499
+ compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false},
500
+ reasoning: false,
501
+ input: ["text", "image"],
502
+ cost: {
503
+ input: 0,
504
+ output: 0,
505
+ cacheRead: 0,
506
+ cacheWrite: 0,
507
+ },
508
+ contextWindow: 128000,
509
+ maxTokens: 64000,
510
+ } satisfies Model<"openai-completions">,
511
+ "gemini-3-flash-preview": {
512
+ id: "gemini-3-flash-preview",
513
+ name: "Gemini 3 Flash",
514
+ api: "openai-completions",
515
+ provider: "github-copilot",
516
+ baseUrl: "https://api.individual.githubcopilot.com",
517
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
518
+ compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false},
519
+ reasoning: true,
520
+ input: ["text", "image"],
521
+ cost: {
522
+ input: 0,
523
+ output: 0,
524
+ cacheRead: 0,
525
+ cacheWrite: 0,
526
+ },
527
+ contextWindow: 128000,
528
+ maxTokens: 64000,
529
+ } satisfies Model<"openai-completions">,
530
+ "gemini-3-pro-preview": {
531
+ id: "gemini-3-pro-preview",
532
+ name: "Gemini 3 Pro Preview",
533
+ api: "openai-completions",
534
+ provider: "github-copilot",
535
+ baseUrl: "https://api.individual.githubcopilot.com",
536
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
537
+ compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false},
538
+ reasoning: true,
539
+ input: ["text", "image"],
540
+ cost: {
541
+ input: 0,
542
+ output: 0,
543
+ cacheRead: 0,
544
+ cacheWrite: 0,
545
+ },
546
+ contextWindow: 128000,
547
+ maxTokens: 64000,
548
+ } satisfies Model<"openai-completions">,
549
+ "gemini-3.1-pro-preview": {
550
+ id: "gemini-3.1-pro-preview",
551
+ name: "Gemini 3.1 Pro Preview",
552
+ api: "openai-completions",
553
+ provider: "github-copilot",
554
+ baseUrl: "https://api.individual.githubcopilot.com",
555
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
556
+ compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false},
557
+ reasoning: true,
558
+ input: ["text", "image"],
559
+ cost: {
560
+ input: 0,
561
+ output: 0,
562
+ cacheRead: 0,
563
+ cacheWrite: 0,
564
+ },
565
+ contextWindow: 128000,
566
+ maxTokens: 64000,
567
+ } satisfies Model<"openai-completions">,
568
+ "gpt-4.1": {
569
+ id: "gpt-4.1",
570
+ name: "GPT-4.1",
571
+ api: "openai-completions",
572
+ provider: "github-copilot",
573
+ baseUrl: "https://api.individual.githubcopilot.com",
574
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
575
+ compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false},
576
+ reasoning: false,
577
+ input: ["text", "image"],
578
+ cost: {
579
+ input: 0,
580
+ output: 0,
581
+ cacheRead: 0,
582
+ cacheWrite: 0,
583
+ },
584
+ contextWindow: 128000,
585
+ maxTokens: 16384,
586
+ } satisfies Model<"openai-completions">,
587
+ "gpt-4o": {
588
+ id: "gpt-4o",
589
+ name: "GPT-4o",
590
+ api: "openai-completions",
591
+ provider: "github-copilot",
592
+ baseUrl: "https://api.individual.githubcopilot.com",
593
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
594
+ compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false},
595
+ reasoning: false,
596
+ input: ["text", "image"],
597
+ cost: {
598
+ input: 0,
599
+ output: 0,
600
+ cacheRead: 0,
601
+ cacheWrite: 0,
602
+ },
603
+ contextWindow: 128000,
604
+ maxTokens: 4096,
605
+ } satisfies Model<"openai-completions">,
606
+ "gpt-5": {
607
+ id: "gpt-5",
608
+ name: "GPT-5",
609
+ api: "openai-responses",
610
+ provider: "github-copilot",
611
+ baseUrl: "https://api.individual.githubcopilot.com",
612
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
613
+ reasoning: true,
614
+ input: ["text", "image"],
615
+ cost: {
616
+ input: 0,
617
+ output: 0,
618
+ cacheRead: 0,
619
+ cacheWrite: 0,
620
+ },
621
+ contextWindow: 128000,
622
+ maxTokens: 128000,
623
+ } satisfies Model<"openai-responses">,
624
+ "gpt-5-mini": {
625
+ id: "gpt-5-mini",
626
+ name: "GPT-5-mini",
627
+ api: "openai-responses",
628
+ provider: "github-copilot",
629
+ baseUrl: "https://api.individual.githubcopilot.com",
630
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
631
+ reasoning: true,
632
+ input: ["text", "image"],
633
+ cost: {
634
+ input: 0,
635
+ output: 0,
636
+ cacheRead: 0,
637
+ cacheWrite: 0,
638
+ },
639
+ contextWindow: 264000,
640
+ maxTokens: 64000,
641
+ } satisfies Model<"openai-responses">,
642
+ "gpt-5.1": {
643
+ id: "gpt-5.1",
644
+ name: "GPT-5.1",
645
+ api: "openai-responses",
646
+ provider: "github-copilot",
647
+ baseUrl: "https://api.individual.githubcopilot.com",
648
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
649
+ reasoning: true,
650
+ input: ["text", "image"],
651
+ cost: {
652
+ input: 0,
653
+ output: 0,
654
+ cacheRead: 0,
655
+ cacheWrite: 0,
656
+ },
657
+ contextWindow: 264000,
658
+ maxTokens: 64000,
659
+ } satisfies Model<"openai-responses">,
660
+ "gpt-5.1-codex": {
661
+ id: "gpt-5.1-codex",
662
+ name: "GPT-5.1-Codex",
663
+ api: "openai-responses",
664
+ provider: "github-copilot",
665
+ baseUrl: "https://api.individual.githubcopilot.com",
666
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
667
+ reasoning: true,
668
+ input: ["text", "image"],
669
+ cost: {
670
+ input: 0,
671
+ output: 0,
672
+ cacheRead: 0,
673
+ cacheWrite: 0,
674
+ },
675
+ contextWindow: 400000,
676
+ maxTokens: 128000,
677
+ } satisfies Model<"openai-responses">,
678
+ "gpt-5.1-codex-max": {
679
+ id: "gpt-5.1-codex-max",
680
+ name: "GPT-5.1-Codex-max",
681
+ api: "openai-responses",
682
+ provider: "github-copilot",
683
+ baseUrl: "https://api.individual.githubcopilot.com",
684
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
685
+ reasoning: true,
686
+ input: ["text", "image"],
687
+ cost: {
688
+ input: 0,
689
+ output: 0,
690
+ cacheRead: 0,
691
+ cacheWrite: 0,
692
+ },
693
+ contextWindow: 400000,
694
+ maxTokens: 128000,
695
+ } satisfies Model<"openai-responses">,
696
+ "gpt-5.1-codex-mini": {
697
+ id: "gpt-5.1-codex-mini",
698
+ name: "GPT-5.1-Codex-mini",
699
+ api: "openai-responses",
700
+ provider: "github-copilot",
701
+ baseUrl: "https://api.individual.githubcopilot.com",
702
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
703
+ reasoning: true,
704
+ input: ["text", "image"],
705
+ cost: {
706
+ input: 0,
707
+ output: 0,
708
+ cacheRead: 0,
709
+ cacheWrite: 0,
710
+ },
711
+ contextWindow: 400000,
712
+ maxTokens: 128000,
713
+ } satisfies Model<"openai-responses">,
714
+ "gpt-5.2": {
715
+ id: "gpt-5.2",
716
+ name: "GPT-5.2",
717
+ api: "openai-responses",
718
+ provider: "github-copilot",
719
+ baseUrl: "https://api.individual.githubcopilot.com",
720
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
721
+ reasoning: true,
722
+ input: ["text", "image"],
723
+ cost: {
724
+ input: 0,
725
+ output: 0,
726
+ cacheRead: 0,
727
+ cacheWrite: 0,
728
+ },
729
+ contextWindow: 264000,
730
+ maxTokens: 64000,
731
+ } satisfies Model<"openai-responses">,
732
+ "gpt-5.2-codex": {
733
+ id: "gpt-5.2-codex",
734
+ name: "GPT-5.2-Codex",
735
+ api: "openai-responses",
736
+ provider: "github-copilot",
737
+ baseUrl: "https://api.individual.githubcopilot.com",
738
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
739
+ reasoning: true,
740
+ input: ["text", "image"],
741
+ cost: {
742
+ input: 0,
743
+ output: 0,
744
+ cacheRead: 0,
745
+ cacheWrite: 0,
746
+ },
747
+ contextWindow: 400000,
748
+ maxTokens: 128000,
749
+ } satisfies Model<"openai-responses">,
750
+ "gpt-5.3-codex": {
751
+ id: "gpt-5.3-codex",
752
+ name: "GPT-5.3-Codex",
753
+ api: "openai-responses",
754
+ provider: "github-copilot",
755
+ baseUrl: "https://api.individual.githubcopilot.com",
756
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
757
+ reasoning: true,
758
+ input: ["text", "image"],
759
+ cost: {
760
+ input: 0,
761
+ output: 0,
762
+ cacheRead: 0,
763
+ cacheWrite: 0,
764
+ },
765
+ contextWindow: 400000,
766
+ maxTokens: 128000,
767
+ } satisfies Model<"openai-responses">,
768
+ "gpt-5.4": {
769
+ id: "gpt-5.4",
770
+ name: "GPT-5.4",
771
+ api: "openai-responses",
772
+ provider: "github-copilot",
773
+ baseUrl: "https://api.individual.githubcopilot.com",
774
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
775
+ reasoning: true,
776
+ input: ["text", "image"],
777
+ cost: {
778
+ input: 0,
779
+ output: 0,
780
+ cacheRead: 0,
781
+ cacheWrite: 0,
782
+ },
783
+ contextWindow: 400000,
784
+ maxTokens: 128000,
785
+ } satisfies Model<"openai-responses">,
786
+ "gpt-5.4-mini": {
787
+ id: "gpt-5.4-mini",
788
+ name: "GPT-5.4 mini",
789
+ api: "openai-responses",
790
+ provider: "github-copilot",
791
+ baseUrl: "https://api.individual.githubcopilot.com",
792
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
793
+ reasoning: true,
794
+ input: ["text", "image"],
795
+ cost: {
796
+ input: 0,
797
+ output: 0,
798
+ cacheRead: 0,
799
+ cacheWrite: 0,
800
+ },
801
+ contextWindow: 400000,
802
+ maxTokens: 128000,
803
+ } satisfies Model<"openai-responses">,
804
+ "grok-code-fast-1": {
805
+ id: "grok-code-fast-1",
806
+ name: "Grok Code Fast 1",
807
+ api: "openai-completions",
808
+ provider: "github-copilot",
809
+ baseUrl: "https://api.individual.githubcopilot.com",
810
+ headers: {"User-Agent":"GitHubCopilotChat/0.35.0","Editor-Version":"vscode/1.107.0","Editor-Plugin-Version":"copilot-chat/0.35.0","Copilot-Integration-Id":"vscode-chat"},
811
+ compat: {"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false},
812
+ reasoning: true,
813
+ input: ["text"],
814
+ cost: {
815
+ input: 0,
816
+ output: 0,
817
+ cacheRead: 0,
818
+ cacheWrite: 0,
819
+ },
820
+ contextWindow: 128000,
821
+ maxTokens: 64000,
822
+ } satisfies Model<"openai-completions">,
823
+ },
824
+ "openai-codex": {
825
+ "gpt-5.1": {
826
+ id: "gpt-5.1",
827
+ name: "GPT-5.1",
828
+ api: "openai-codex-responses",
829
+ provider: "openai-codex",
830
+ baseUrl: "https://chatgpt.com/backend-api",
831
+ reasoning: true,
832
+ input: ["text", "image"],
833
+ cost: {
834
+ input: 1.25,
835
+ output: 10,
836
+ cacheRead: 0.125,
837
+ cacheWrite: 0,
838
+ },
839
+ contextWindow: 272000,
840
+ maxTokens: 128000,
841
+ } satisfies Model<"openai-codex-responses">,
842
+ "gpt-5.1-codex-max": {
843
+ id: "gpt-5.1-codex-max",
844
+ name: "GPT-5.1 Codex Max",
845
+ api: "openai-codex-responses",
846
+ provider: "openai-codex",
847
+ baseUrl: "https://chatgpt.com/backend-api",
848
+ reasoning: true,
849
+ input: ["text", "image"],
850
+ cost: {
851
+ input: 1.25,
852
+ output: 10,
853
+ cacheRead: 0.125,
854
+ cacheWrite: 0,
855
+ },
856
+ contextWindow: 272000,
857
+ maxTokens: 128000,
858
+ } satisfies Model<"openai-codex-responses">,
859
+ "gpt-5.1-codex-mini": {
860
+ id: "gpt-5.1-codex-mini",
861
+ name: "GPT-5.1 Codex Mini",
862
+ api: "openai-codex-responses",
863
+ provider: "openai-codex",
864
+ baseUrl: "https://chatgpt.com/backend-api",
865
+ reasoning: true,
866
+ input: ["text", "image"],
867
+ cost: {
868
+ input: 0.25,
869
+ output: 2,
870
+ cacheRead: 0.025,
871
+ cacheWrite: 0,
872
+ },
873
+ contextWindow: 272000,
874
+ maxTokens: 128000,
875
+ } satisfies Model<"openai-codex-responses">,
876
+ "gpt-5.2": {
877
+ id: "gpt-5.2",
878
+ name: "GPT-5.2",
879
+ api: "openai-codex-responses",
880
+ provider: "openai-codex",
881
+ baseUrl: "https://chatgpt.com/backend-api",
882
+ reasoning: true,
883
+ input: ["text", "image"],
884
+ cost: {
885
+ input: 1.75,
886
+ output: 14,
887
+ cacheRead: 0.175,
888
+ cacheWrite: 0,
889
+ },
890
+ contextWindow: 272000,
891
+ maxTokens: 128000,
892
+ } satisfies Model<"openai-codex-responses">,
893
+ "gpt-5.2-codex": {
894
+ id: "gpt-5.2-codex",
895
+ name: "GPT-5.2 Codex",
896
+ api: "openai-codex-responses",
897
+ provider: "openai-codex",
898
+ baseUrl: "https://chatgpt.com/backend-api",
899
+ reasoning: true,
900
+ input: ["text", "image"],
901
+ cost: {
902
+ input: 1.75,
903
+ output: 14,
904
+ cacheRead: 0.175,
905
+ cacheWrite: 0,
906
+ },
907
+ contextWindow: 272000,
908
+ maxTokens: 128000,
909
+ } satisfies Model<"openai-codex-responses">,
910
+ "gpt-5.3-codex": {
911
+ id: "gpt-5.3-codex",
912
+ name: "GPT-5.3 Codex",
913
+ api: "openai-codex-responses",
914
+ provider: "openai-codex",
915
+ baseUrl: "https://chatgpt.com/backend-api",
916
+ reasoning: true,
917
+ input: ["text", "image"],
918
+ cost: {
919
+ input: 1.75,
920
+ output: 14,
921
+ cacheRead: 0.175,
922
+ cacheWrite: 0,
923
+ },
924
+ contextWindow: 272000,
925
+ maxTokens: 128000,
926
+ } satisfies Model<"openai-codex-responses">,
927
+ "gpt-5.3-codex-spark": {
928
+ id: "gpt-5.3-codex-spark",
929
+ name: "GPT-5.3 Codex Spark",
930
+ api: "openai-codex-responses",
931
+ provider: "openai-codex",
932
+ baseUrl: "https://chatgpt.com/backend-api",
933
+ reasoning: true,
934
+ input: ["text"],
935
+ cost: {
936
+ input: 0,
937
+ output: 0,
938
+ cacheRead: 0,
939
+ cacheWrite: 0,
940
+ },
941
+ contextWindow: 128000,
942
+ maxTokens: 128000,
943
+ } satisfies Model<"openai-codex-responses">,
944
+ "gpt-5.4": {
945
+ id: "gpt-5.4",
946
+ name: "GPT-5.4",
947
+ api: "openai-codex-responses",
948
+ provider: "openai-codex",
949
+ baseUrl: "https://chatgpt.com/backend-api",
950
+ reasoning: true,
951
+ input: ["text", "image"],
952
+ cost: {
953
+ input: 2.5,
954
+ output: 15,
955
+ cacheRead: 0.25,
956
+ cacheWrite: 0,
957
+ },
958
+ contextWindow: 272000,
959
+ maxTokens: 128000,
960
+ } satisfies Model<"openai-codex-responses">,
961
+ "gpt-5.4-mini": {
962
+ id: "gpt-5.4-mini",
963
+ name: "GPT-5.4 Mini",
964
+ api: "openai-codex-responses",
965
+ provider: "openai-codex",
966
+ baseUrl: "https://chatgpt.com/backend-api",
967
+ reasoning: true,
968
+ input: ["text", "image"],
969
+ cost: {
970
+ input: 0.75,
971
+ output: 4.5,
972
+ cacheRead: 0.075,
973
+ cacheWrite: 0,
974
+ },
975
+ contextWindow: 272000,
976
+ maxTokens: 128000,
977
+ } satisfies Model<"openai-codex-responses">,
978
+ },
979
+ "openrouter": {
980
+ "anthropic/claude-3-haiku": {
981
+ id: "anthropic/claude-3-haiku",
982
+ name: "Anthropic: Claude 3 Haiku",
983
+ api: "openai-completions",
984
+ provider: "openrouter",
985
+ baseUrl: "https://openrouter.ai/api/v1",
986
+ reasoning: false,
987
+ input: ["text", "image"],
988
+ cost: {
989
+ input: 0.25,
990
+ output: 1.25,
991
+ cacheRead: 0.03,
992
+ cacheWrite: 0.3,
993
+ },
994
+ contextWindow: 200000,
995
+ maxTokens: 4096,
996
+ } satisfies Model<"openai-completions">,
997
+ "anthropic/claude-3.5-haiku": {
998
+ id: "anthropic/claude-3.5-haiku",
999
+ name: "Anthropic: Claude 3.5 Haiku",
1000
+ api: "openai-completions",
1001
+ provider: "openrouter",
1002
+ baseUrl: "https://openrouter.ai/api/v1",
1003
+ reasoning: false,
1004
+ input: ["text", "image"],
1005
+ cost: {
1006
+ input: 0.7999999999999999,
1007
+ output: 4,
1008
+ cacheRead: 0.08,
1009
+ cacheWrite: 1,
1010
+ },
1011
+ contextWindow: 200000,
1012
+ maxTokens: 8192,
1013
+ } satisfies Model<"openai-completions">,
1014
+ "anthropic/claude-3.5-sonnet": {
1015
+ id: "anthropic/claude-3.5-sonnet",
1016
+ name: "Anthropic: Claude 3.5 Sonnet",
1017
+ api: "openai-completions",
1018
+ provider: "openrouter",
1019
+ baseUrl: "https://openrouter.ai/api/v1",
1020
+ reasoning: false,
1021
+ input: ["text", "image"],
1022
+ cost: {
1023
+ input: 6,
1024
+ output: 30,
1025
+ cacheRead: 0.6,
1026
+ cacheWrite: 7.5,
1027
+ },
1028
+ contextWindow: 200000,
1029
+ maxTokens: 8192,
1030
+ } satisfies Model<"openai-completions">,
1031
+ "anthropic/claude-3.7-sonnet": {
1032
+ id: "anthropic/claude-3.7-sonnet",
1033
+ name: "Anthropic: Claude 3.7 Sonnet",
1034
+ api: "openai-completions",
1035
+ provider: "openrouter",
1036
+ baseUrl: "https://openrouter.ai/api/v1",
1037
+ reasoning: true,
1038
+ input: ["text", "image"],
1039
+ cost: {
1040
+ input: 3,
1041
+ output: 15,
1042
+ cacheRead: 0.3,
1043
+ cacheWrite: 3.75,
1044
+ },
1045
+ contextWindow: 200000,
1046
+ maxTokens: 64000,
1047
+ } satisfies Model<"openai-completions">,
1048
+ "anthropic/claude-3.7-sonnet:thinking": {
1049
+ id: "anthropic/claude-3.7-sonnet:thinking",
1050
+ name: "Anthropic: Claude 3.7 Sonnet (thinking)",
1051
+ api: "openai-completions",
1052
+ provider: "openrouter",
1053
+ baseUrl: "https://openrouter.ai/api/v1",
1054
+ reasoning: true,
1055
+ input: ["text", "image"],
1056
+ cost: {
1057
+ input: 3,
1058
+ output: 15,
1059
+ cacheRead: 0.3,
1060
+ cacheWrite: 3.75,
1061
+ },
1062
+ contextWindow: 200000,
1063
+ maxTokens: 64000,
1064
+ } satisfies Model<"openai-completions">,
1065
+ "anthropic/claude-haiku-4.5": {
1066
+ id: "anthropic/claude-haiku-4.5",
1067
+ name: "Anthropic: Claude Haiku 4.5",
1068
+ api: "openai-completions",
1069
+ provider: "openrouter",
1070
+ baseUrl: "https://openrouter.ai/api/v1",
1071
+ reasoning: true,
1072
+ input: ["text", "image"],
1073
+ cost: {
1074
+ input: 1,
1075
+ output: 5,
1076
+ cacheRead: 0.09999999999999999,
1077
+ cacheWrite: 1.25,
1078
+ },
1079
+ contextWindow: 200000,
1080
+ maxTokens: 64000,
1081
+ } satisfies Model<"openai-completions">,
1082
+ "anthropic/claude-opus-4": {
1083
+ id: "anthropic/claude-opus-4",
1084
+ name: "Anthropic: Claude Opus 4",
1085
+ api: "openai-completions",
1086
+ provider: "openrouter",
1087
+ baseUrl: "https://openrouter.ai/api/v1",
1088
+ reasoning: true,
1089
+ input: ["text", "image"],
1090
+ cost: {
1091
+ input: 15,
1092
+ output: 75,
1093
+ cacheRead: 1.5,
1094
+ cacheWrite: 18.75,
1095
+ },
1096
+ contextWindow: 200000,
1097
+ maxTokens: 32000,
1098
+ } satisfies Model<"openai-completions">,
1099
+ "anthropic/claude-opus-4.1": {
1100
+ id: "anthropic/claude-opus-4.1",
1101
+ name: "Anthropic: Claude Opus 4.1",
1102
+ api: "openai-completions",
1103
+ provider: "openrouter",
1104
+ baseUrl: "https://openrouter.ai/api/v1",
1105
+ reasoning: true,
1106
+ input: ["text", "image"],
1107
+ cost: {
1108
+ input: 15,
1109
+ output: 75,
1110
+ cacheRead: 1.5,
1111
+ cacheWrite: 18.75,
1112
+ },
1113
+ contextWindow: 200000,
1114
+ maxTokens: 32000,
1115
+ } satisfies Model<"openai-completions">,
1116
+ "anthropic/claude-opus-4.5": {
1117
+ id: "anthropic/claude-opus-4.5",
1118
+ name: "Anthropic: Claude Opus 4.5",
1119
+ api: "openai-completions",
1120
+ provider: "openrouter",
1121
+ baseUrl: "https://openrouter.ai/api/v1",
1122
+ reasoning: true,
1123
+ input: ["text", "image"],
1124
+ cost: {
1125
+ input: 5,
1126
+ output: 25,
1127
+ cacheRead: 0.5,
1128
+ cacheWrite: 6.25,
1129
+ },
1130
+ contextWindow: 200000,
1131
+ maxTokens: 64000,
1132
+ } satisfies Model<"openai-completions">,
1133
+ "anthropic/claude-opus-4.6": {
1134
+ id: "anthropic/claude-opus-4.6",
1135
+ name: "Anthropic: Claude Opus 4.6",
1136
+ api: "openai-completions",
1137
+ provider: "openrouter",
1138
+ baseUrl: "https://openrouter.ai/api/v1",
1139
+ reasoning: true,
1140
+ input: ["text", "image"],
1141
+ cost: {
1142
+ input: 5,
1143
+ output: 25,
1144
+ cacheRead: 0.5,
1145
+ cacheWrite: 6.25,
1146
+ },
1147
+ contextWindow: 1000000,
1148
+ maxTokens: 128000,
1149
+ } satisfies Model<"openai-completions">,
1150
+ "anthropic/claude-sonnet-4": {
1151
+ id: "anthropic/claude-sonnet-4",
1152
+ name: "Anthropic: Claude Sonnet 4",
1153
+ api: "openai-completions",
1154
+ provider: "openrouter",
1155
+ baseUrl: "https://openrouter.ai/api/v1",
1156
+ reasoning: true,
1157
+ input: ["text", "image"],
1158
+ cost: {
1159
+ input: 3,
1160
+ output: 15,
1161
+ cacheRead: 0.3,
1162
+ cacheWrite: 3.75,
1163
+ },
1164
+ contextWindow: 200000,
1165
+ maxTokens: 64000,
1166
+ } satisfies Model<"openai-completions">,
1167
+ "anthropic/claude-sonnet-4.5": {
1168
+ id: "anthropic/claude-sonnet-4.5",
1169
+ name: "Anthropic: Claude Sonnet 4.5",
1170
+ api: "openai-completions",
1171
+ provider: "openrouter",
1172
+ baseUrl: "https://openrouter.ai/api/v1",
1173
+ reasoning: true,
1174
+ input: ["text", "image"],
1175
+ cost: {
1176
+ input: 3,
1177
+ output: 15,
1178
+ cacheRead: 0.3,
1179
+ cacheWrite: 3.75,
1180
+ },
1181
+ contextWindow: 1000000,
1182
+ maxTokens: 64000,
1183
+ } satisfies Model<"openai-completions">,
1184
+ "anthropic/claude-sonnet-4.6": {
1185
+ id: "anthropic/claude-sonnet-4.6",
1186
+ name: "Anthropic: Claude Sonnet 4.6",
1187
+ api: "openai-completions",
1188
+ provider: "openrouter",
1189
+ baseUrl: "https://openrouter.ai/api/v1",
1190
+ reasoning: true,
1191
+ input: ["text", "image"],
1192
+ cost: {
1193
+ input: 3,
1194
+ output: 15,
1195
+ cacheRead: 0.3,
1196
+ cacheWrite: 3.75,
1197
+ },
1198
+ contextWindow: 1000000,
1199
+ maxTokens: 128000,
1200
+ } satisfies Model<"openai-completions">,
1201
+ "auto": {
1202
+ id: "auto",
1203
+ name: "Auto",
1204
+ api: "openai-completions",
1205
+ provider: "openrouter",
1206
+ baseUrl: "https://openrouter.ai/api/v1",
1207
+ reasoning: true,
1208
+ input: ["text", "image"],
1209
+ cost: {
1210
+ input: 0,
1211
+ output: 0,
1212
+ cacheRead: 0,
1213
+ cacheWrite: 0,
1214
+ },
1215
+ contextWindow: 2000000,
1216
+ maxTokens: 30000,
1217
+ } satisfies Model<"openai-completions">,
1218
+ "openai/gpt-3.5-turbo": {
1219
+ id: "openai/gpt-3.5-turbo",
1220
+ name: "OpenAI: GPT-3.5 Turbo",
1221
+ api: "openai-completions",
1222
+ provider: "openrouter",
1223
+ baseUrl: "https://openrouter.ai/api/v1",
1224
+ reasoning: false,
1225
+ input: ["text"],
1226
+ cost: {
1227
+ input: 0.5,
1228
+ output: 1.5,
1229
+ cacheRead: 0,
1230
+ cacheWrite: 0,
1231
+ },
1232
+ contextWindow: 16385,
1233
+ maxTokens: 4096,
1234
+ } satisfies Model<"openai-completions">,
1235
+ "openai/gpt-3.5-turbo-0613": {
1236
+ id: "openai/gpt-3.5-turbo-0613",
1237
+ name: "OpenAI: GPT-3.5 Turbo (older v0613)",
1238
+ api: "openai-completions",
1239
+ provider: "openrouter",
1240
+ baseUrl: "https://openrouter.ai/api/v1",
1241
+ reasoning: false,
1242
+ input: ["text"],
1243
+ cost: {
1244
+ input: 1,
1245
+ output: 2,
1246
+ cacheRead: 0,
1247
+ cacheWrite: 0,
1248
+ },
1249
+ contextWindow: 4095,
1250
+ maxTokens: 4096,
1251
+ } satisfies Model<"openai-completions">,
1252
+ "openai/gpt-3.5-turbo-16k": {
1253
+ id: "openai/gpt-3.5-turbo-16k",
1254
+ name: "OpenAI: GPT-3.5 Turbo 16k",
1255
+ api: "openai-completions",
1256
+ provider: "openrouter",
1257
+ baseUrl: "https://openrouter.ai/api/v1",
1258
+ reasoning: false,
1259
+ input: ["text"],
1260
+ cost: {
1261
+ input: 3,
1262
+ output: 4,
1263
+ cacheRead: 0,
1264
+ cacheWrite: 0,
1265
+ },
1266
+ contextWindow: 16385,
1267
+ maxTokens: 4096,
1268
+ } satisfies Model<"openai-completions">,
1269
+ "openai/gpt-4": {
1270
+ id: "openai/gpt-4",
1271
+ name: "OpenAI: GPT-4",
1272
+ api: "openai-completions",
1273
+ provider: "openrouter",
1274
+ baseUrl: "https://openrouter.ai/api/v1",
1275
+ reasoning: false,
1276
+ input: ["text"],
1277
+ cost: {
1278
+ input: 30,
1279
+ output: 60,
1280
+ cacheRead: 0,
1281
+ cacheWrite: 0,
1282
+ },
1283
+ contextWindow: 8191,
1284
+ maxTokens: 4096,
1285
+ } satisfies Model<"openai-completions">,
1286
+ "openai/gpt-4-0314": {
1287
+ id: "openai/gpt-4-0314",
1288
+ name: "OpenAI: GPT-4 (older v0314)",
1289
+ api: "openai-completions",
1290
+ provider: "openrouter",
1291
+ baseUrl: "https://openrouter.ai/api/v1",
1292
+ reasoning: false,
1293
+ input: ["text"],
1294
+ cost: {
1295
+ input: 30,
1296
+ output: 60,
1297
+ cacheRead: 0,
1298
+ cacheWrite: 0,
1299
+ },
1300
+ contextWindow: 8191,
1301
+ maxTokens: 4096,
1302
+ } satisfies Model<"openai-completions">,
1303
+ "openai/gpt-4-1106-preview": {
1304
+ id: "openai/gpt-4-1106-preview",
1305
+ name: "OpenAI: GPT-4 Turbo (older v1106)",
1306
+ api: "openai-completions",
1307
+ provider: "openrouter",
1308
+ baseUrl: "https://openrouter.ai/api/v1",
1309
+ reasoning: false,
1310
+ input: ["text"],
1311
+ cost: {
1312
+ input: 10,
1313
+ output: 30,
1314
+ cacheRead: 0,
1315
+ cacheWrite: 0,
1316
+ },
1317
+ contextWindow: 128000,
1318
+ maxTokens: 4096,
1319
+ } satisfies Model<"openai-completions">,
1320
+ "openai/gpt-4-turbo": {
1321
+ id: "openai/gpt-4-turbo",
1322
+ name: "OpenAI: GPT-4 Turbo",
1323
+ api: "openai-completions",
1324
+ provider: "openrouter",
1325
+ baseUrl: "https://openrouter.ai/api/v1",
1326
+ reasoning: false,
1327
+ input: ["text", "image"],
1328
+ cost: {
1329
+ input: 10,
1330
+ output: 30,
1331
+ cacheRead: 0,
1332
+ cacheWrite: 0,
1333
+ },
1334
+ contextWindow: 128000,
1335
+ maxTokens: 4096,
1336
+ } satisfies Model<"openai-completions">,
1337
+ "openai/gpt-4-turbo-preview": {
1338
+ id: "openai/gpt-4-turbo-preview",
1339
+ name: "OpenAI: GPT-4 Turbo Preview",
1340
+ api: "openai-completions",
1341
+ provider: "openrouter",
1342
+ baseUrl: "https://openrouter.ai/api/v1",
1343
+ reasoning: false,
1344
+ input: ["text"],
1345
+ cost: {
1346
+ input: 10,
1347
+ output: 30,
1348
+ cacheRead: 0,
1349
+ cacheWrite: 0,
1350
+ },
1351
+ contextWindow: 128000,
1352
+ maxTokens: 4096,
1353
+ } satisfies Model<"openai-completions">,
1354
+ "openai/gpt-4.1": {
1355
+ id: "openai/gpt-4.1",
1356
+ name: "OpenAI: GPT-4.1",
1357
+ api: "openai-completions",
1358
+ provider: "openrouter",
1359
+ baseUrl: "https://openrouter.ai/api/v1",
1360
+ reasoning: false,
1361
+ input: ["text", "image"],
1362
+ cost: {
1363
+ input: 2,
1364
+ output: 8,
1365
+ cacheRead: 0.5,
1366
+ cacheWrite: 0,
1367
+ },
1368
+ contextWindow: 1047576,
1369
+ maxTokens: 32768,
1370
+ } satisfies Model<"openai-completions">,
1371
+ "openai/gpt-4.1-mini": {
1372
+ id: "openai/gpt-4.1-mini",
1373
+ name: "OpenAI: GPT-4.1 Mini",
1374
+ api: "openai-completions",
1375
+ provider: "openrouter",
1376
+ baseUrl: "https://openrouter.ai/api/v1",
1377
+ reasoning: false,
1378
+ input: ["text", "image"],
1379
+ cost: {
1380
+ input: 0.39999999999999997,
1381
+ output: 1.5999999999999999,
1382
+ cacheRead: 0.09999999999999999,
1383
+ cacheWrite: 0,
1384
+ },
1385
+ contextWindow: 1047576,
1386
+ maxTokens: 32768,
1387
+ } satisfies Model<"openai-completions">,
1388
+ "openai/gpt-4.1-nano": {
1389
+ id: "openai/gpt-4.1-nano",
1390
+ name: "OpenAI: GPT-4.1 Nano",
1391
+ api: "openai-completions",
1392
+ provider: "openrouter",
1393
+ baseUrl: "https://openrouter.ai/api/v1",
1394
+ reasoning: false,
1395
+ input: ["text", "image"],
1396
+ cost: {
1397
+ input: 0.09999999999999999,
1398
+ output: 0.39999999999999997,
1399
+ cacheRead: 0.024999999999999998,
1400
+ cacheWrite: 0,
1401
+ },
1402
+ contextWindow: 1047576,
1403
+ maxTokens: 32768,
1404
+ } satisfies Model<"openai-completions">,
1405
+ "openai/gpt-4o": {
1406
+ id: "openai/gpt-4o",
1407
+ name: "OpenAI: GPT-4o",
1408
+ api: "openai-completions",
1409
+ provider: "openrouter",
1410
+ baseUrl: "https://openrouter.ai/api/v1",
1411
+ reasoning: false,
1412
+ input: ["text", "image"],
1413
+ cost: {
1414
+ input: 2.5,
1415
+ output: 10,
1416
+ cacheRead: 1.25,
1417
+ cacheWrite: 0,
1418
+ },
1419
+ contextWindow: 128000,
1420
+ maxTokens: 16384,
1421
+ } satisfies Model<"openai-completions">,
1422
+ "openai/gpt-4o-2024-05-13": {
1423
+ id: "openai/gpt-4o-2024-05-13",
1424
+ name: "OpenAI: GPT-4o (2024-05-13)",
1425
+ api: "openai-completions",
1426
+ provider: "openrouter",
1427
+ baseUrl: "https://openrouter.ai/api/v1",
1428
+ reasoning: false,
1429
+ input: ["text", "image"],
1430
+ cost: {
1431
+ input: 5,
1432
+ output: 15,
1433
+ cacheRead: 0,
1434
+ cacheWrite: 0,
1435
+ },
1436
+ contextWindow: 128000,
1437
+ maxTokens: 4096,
1438
+ } satisfies Model<"openai-completions">,
1439
+ "openai/gpt-4o-2024-08-06": {
1440
+ id: "openai/gpt-4o-2024-08-06",
1441
+ name: "OpenAI: GPT-4o (2024-08-06)",
1442
+ api: "openai-completions",
1443
+ provider: "openrouter",
1444
+ baseUrl: "https://openrouter.ai/api/v1",
1445
+ reasoning: false,
1446
+ input: ["text", "image"],
1447
+ cost: {
1448
+ input: 2.5,
1449
+ output: 10,
1450
+ cacheRead: 1.25,
1451
+ cacheWrite: 0,
1452
+ },
1453
+ contextWindow: 128000,
1454
+ maxTokens: 16384,
1455
+ } satisfies Model<"openai-completions">,
1456
+ "openai/gpt-4o-2024-11-20": {
1457
+ id: "openai/gpt-4o-2024-11-20",
1458
+ name: "OpenAI: GPT-4o (2024-11-20)",
1459
+ api: "openai-completions",
1460
+ provider: "openrouter",
1461
+ baseUrl: "https://openrouter.ai/api/v1",
1462
+ reasoning: false,
1463
+ input: ["text", "image"],
1464
+ cost: {
1465
+ input: 2.5,
1466
+ output: 10,
1467
+ cacheRead: 1.25,
1468
+ cacheWrite: 0,
1469
+ },
1470
+ contextWindow: 128000,
1471
+ maxTokens: 16384,
1472
+ } satisfies Model<"openai-completions">,
1473
+ "openai/gpt-4o-audio-preview": {
1474
+ id: "openai/gpt-4o-audio-preview",
1475
+ name: "OpenAI: GPT-4o Audio",
1476
+ api: "openai-completions",
1477
+ provider: "openrouter",
1478
+ baseUrl: "https://openrouter.ai/api/v1",
1479
+ reasoning: false,
1480
+ input: ["text"],
1481
+ cost: {
1482
+ input: 2.5,
1483
+ output: 10,
1484
+ cacheRead: 0,
1485
+ cacheWrite: 0,
1486
+ },
1487
+ contextWindow: 128000,
1488
+ maxTokens: 16384,
1489
+ } satisfies Model<"openai-completions">,
1490
+ "openai/gpt-4o-mini": {
1491
+ id: "openai/gpt-4o-mini",
1492
+ name: "OpenAI: GPT-4o-mini",
1493
+ api: "openai-completions",
1494
+ provider: "openrouter",
1495
+ baseUrl: "https://openrouter.ai/api/v1",
1496
+ reasoning: false,
1497
+ input: ["text", "image"],
1498
+ cost: {
1499
+ input: 0.15,
1500
+ output: 0.6,
1501
+ cacheRead: 0.075,
1502
+ cacheWrite: 0,
1503
+ },
1504
+ contextWindow: 128000,
1505
+ maxTokens: 16384,
1506
+ } satisfies Model<"openai-completions">,
1507
+ "openai/gpt-4o-mini-2024-07-18": {
1508
+ id: "openai/gpt-4o-mini-2024-07-18",
1509
+ name: "OpenAI: GPT-4o-mini (2024-07-18)",
1510
+ api: "openai-completions",
1511
+ provider: "openrouter",
1512
+ baseUrl: "https://openrouter.ai/api/v1",
1513
+ reasoning: false,
1514
+ input: ["text", "image"],
1515
+ cost: {
1516
+ input: 0.15,
1517
+ output: 0.6,
1518
+ cacheRead: 0.075,
1519
+ cacheWrite: 0,
1520
+ },
1521
+ contextWindow: 128000,
1522
+ maxTokens: 16384,
1523
+ } satisfies Model<"openai-completions">,
1524
+ "openai/gpt-4o:extended": {
1525
+ id: "openai/gpt-4o:extended",
1526
+ name: "OpenAI: GPT-4o (extended)",
1527
+ api: "openai-completions",
1528
+ provider: "openrouter",
1529
+ baseUrl: "https://openrouter.ai/api/v1",
1530
+ reasoning: false,
1531
+ input: ["text", "image"],
1532
+ cost: {
1533
+ input: 6,
1534
+ output: 18,
1535
+ cacheRead: 0,
1536
+ cacheWrite: 0,
1537
+ },
1538
+ contextWindow: 128000,
1539
+ maxTokens: 64000,
1540
+ } satisfies Model<"openai-completions">,
1541
+ "openai/gpt-5": {
1542
+ id: "openai/gpt-5",
1543
+ name: "OpenAI: GPT-5",
1544
+ api: "openai-completions",
1545
+ provider: "openrouter",
1546
+ baseUrl: "https://openrouter.ai/api/v1",
1547
+ reasoning: true,
1548
+ input: ["text", "image"],
1549
+ cost: {
1550
+ input: 1.25,
1551
+ output: 10,
1552
+ cacheRead: 0.125,
1553
+ cacheWrite: 0,
1554
+ },
1555
+ contextWindow: 400000,
1556
+ maxTokens: 128000,
1557
+ } satisfies Model<"openai-completions">,
1558
+ "openai/gpt-5-codex": {
1559
+ id: "openai/gpt-5-codex",
1560
+ name: "OpenAI: GPT-5 Codex",
1561
+ api: "openai-completions",
1562
+ provider: "openrouter",
1563
+ baseUrl: "https://openrouter.ai/api/v1",
1564
+ reasoning: true,
1565
+ input: ["text", "image"],
1566
+ cost: {
1567
+ input: 1.25,
1568
+ output: 10,
1569
+ cacheRead: 0.125,
1570
+ cacheWrite: 0,
1571
+ },
1572
+ contextWindow: 400000,
1573
+ maxTokens: 128000,
1574
+ } satisfies Model<"openai-completions">,
1575
+ "openai/gpt-5-image": {
1576
+ id: "openai/gpt-5-image",
1577
+ name: "OpenAI: GPT-5 Image",
1578
+ api: "openai-completions",
1579
+ provider: "openrouter",
1580
+ baseUrl: "https://openrouter.ai/api/v1",
1581
+ reasoning: true,
1582
+ input: ["text", "image"],
1583
+ cost: {
1584
+ input: 10,
1585
+ output: 10,
1586
+ cacheRead: 1.25,
1587
+ cacheWrite: 0,
1588
+ },
1589
+ contextWindow: 400000,
1590
+ maxTokens: 128000,
1591
+ } satisfies Model<"openai-completions">,
1592
+ "openai/gpt-5-image-mini": {
1593
+ id: "openai/gpt-5-image-mini",
1594
+ name: "OpenAI: GPT-5 Image Mini",
1595
+ api: "openai-completions",
1596
+ provider: "openrouter",
1597
+ baseUrl: "https://openrouter.ai/api/v1",
1598
+ reasoning: true,
1599
+ input: ["text", "image"],
1600
+ cost: {
1601
+ input: 2.5,
1602
+ output: 2,
1603
+ cacheRead: 0.25,
1604
+ cacheWrite: 0,
1605
+ },
1606
+ contextWindow: 400000,
1607
+ maxTokens: 128000,
1608
+ } satisfies Model<"openai-completions">,
1609
+ "openai/gpt-5-mini": {
1610
+ id: "openai/gpt-5-mini",
1611
+ name: "OpenAI: GPT-5 Mini",
1612
+ api: "openai-completions",
1613
+ provider: "openrouter",
1614
+ baseUrl: "https://openrouter.ai/api/v1",
1615
+ reasoning: true,
1616
+ input: ["text", "image"],
1617
+ cost: {
1618
+ input: 0.25,
1619
+ output: 2,
1620
+ cacheRead: 0.024999999999999998,
1621
+ cacheWrite: 0,
1622
+ },
1623
+ contextWindow: 400000,
1624
+ maxTokens: 128000,
1625
+ } satisfies Model<"openai-completions">,
1626
+ "openai/gpt-5-nano": {
1627
+ id: "openai/gpt-5-nano",
1628
+ name: "OpenAI: GPT-5 Nano",
1629
+ api: "openai-completions",
1630
+ provider: "openrouter",
1631
+ baseUrl: "https://openrouter.ai/api/v1",
1632
+ reasoning: true,
1633
+ input: ["text", "image"],
1634
+ cost: {
1635
+ input: 0.049999999999999996,
1636
+ output: 0.39999999999999997,
1637
+ cacheRead: 0.005,
1638
+ cacheWrite: 0,
1639
+ },
1640
+ contextWindow: 400000,
1641
+ maxTokens: 128000,
1642
+ } satisfies Model<"openai-completions">,
1643
+ "openai/gpt-5-pro": {
1644
+ id: "openai/gpt-5-pro",
1645
+ name: "OpenAI: GPT-5 Pro",
1646
+ api: "openai-completions",
1647
+ provider: "openrouter",
1648
+ baseUrl: "https://openrouter.ai/api/v1",
1649
+ reasoning: true,
1650
+ input: ["text", "image"],
1651
+ cost: {
1652
+ input: 15,
1653
+ output: 120,
1654
+ cacheRead: 0,
1655
+ cacheWrite: 0,
1656
+ },
1657
+ contextWindow: 400000,
1658
+ maxTokens: 128000,
1659
+ } satisfies Model<"openai-completions">,
1660
+ "openai/gpt-5.1": {
1661
+ id: "openai/gpt-5.1",
1662
+ name: "OpenAI: GPT-5.1",
1663
+ api: "openai-completions",
1664
+ provider: "openrouter",
1665
+ baseUrl: "https://openrouter.ai/api/v1",
1666
+ reasoning: true,
1667
+ input: ["text", "image"],
1668
+ cost: {
1669
+ input: 1.25,
1670
+ output: 10,
1671
+ cacheRead: 0.125,
1672
+ cacheWrite: 0,
1673
+ },
1674
+ contextWindow: 400000,
1675
+ maxTokens: 128000,
1676
+ } satisfies Model<"openai-completions">,
1677
+ "openai/gpt-5.1-chat": {
1678
+ id: "openai/gpt-5.1-chat",
1679
+ name: "OpenAI: GPT-5.1 Chat",
1680
+ api: "openai-completions",
1681
+ provider: "openrouter",
1682
+ baseUrl: "https://openrouter.ai/api/v1",
1683
+ reasoning: false,
1684
+ input: ["text", "image"],
1685
+ cost: {
1686
+ input: 1.25,
1687
+ output: 10,
1688
+ cacheRead: 0.125,
1689
+ cacheWrite: 0,
1690
+ },
1691
+ contextWindow: 128000,
1692
+ maxTokens: 16384,
1693
+ } satisfies Model<"openai-completions">,
1694
+ "openai/gpt-5.1-codex": {
1695
+ id: "openai/gpt-5.1-codex",
1696
+ name: "OpenAI: GPT-5.1-Codex",
1697
+ api: "openai-completions",
1698
+ provider: "openrouter",
1699
+ baseUrl: "https://openrouter.ai/api/v1",
1700
+ reasoning: true,
1701
+ input: ["text", "image"],
1702
+ cost: {
1703
+ input: 1.25,
1704
+ output: 10,
1705
+ cacheRead: 0.125,
1706
+ cacheWrite: 0,
1707
+ },
1708
+ contextWindow: 400000,
1709
+ maxTokens: 128000,
1710
+ } satisfies Model<"openai-completions">,
1711
+ "openai/gpt-5.1-codex-max": {
1712
+ id: "openai/gpt-5.1-codex-max",
1713
+ name: "OpenAI: GPT-5.1-Codex-Max",
1714
+ api: "openai-completions",
1715
+ provider: "openrouter",
1716
+ baseUrl: "https://openrouter.ai/api/v1",
1717
+ reasoning: true,
1718
+ input: ["text", "image"],
1719
+ cost: {
1720
+ input: 1.25,
1721
+ output: 10,
1722
+ cacheRead: 0.125,
1723
+ cacheWrite: 0,
1724
+ },
1725
+ contextWindow: 400000,
1726
+ maxTokens: 128000,
1727
+ } satisfies Model<"openai-completions">,
1728
+ "openai/gpt-5.1-codex-mini": {
1729
+ id: "openai/gpt-5.1-codex-mini",
1730
+ name: "OpenAI: GPT-5.1-Codex-Mini",
1731
+ api: "openai-completions",
1732
+ provider: "openrouter",
1733
+ baseUrl: "https://openrouter.ai/api/v1",
1734
+ reasoning: true,
1735
+ input: ["text", "image"],
1736
+ cost: {
1737
+ input: 0.25,
1738
+ output: 2,
1739
+ cacheRead: 0.024999999999999998,
1740
+ cacheWrite: 0,
1741
+ },
1742
+ contextWindow: 400000,
1743
+ maxTokens: 100000,
1744
+ } satisfies Model<"openai-completions">,
1745
+ "openai/gpt-5.2": {
1746
+ id: "openai/gpt-5.2",
1747
+ name: "OpenAI: GPT-5.2",
1748
+ api: "openai-completions",
1749
+ provider: "openrouter",
1750
+ baseUrl: "https://openrouter.ai/api/v1",
1751
+ reasoning: true,
1752
+ input: ["text", "image"],
1753
+ cost: {
1754
+ input: 1.75,
1755
+ output: 14,
1756
+ cacheRead: 0.175,
1757
+ cacheWrite: 0,
1758
+ },
1759
+ contextWindow: 400000,
1760
+ maxTokens: 128000,
1761
+ } satisfies Model<"openai-completions">,
1762
+ "openai/gpt-5.2-chat": {
1763
+ id: "openai/gpt-5.2-chat",
1764
+ name: "OpenAI: GPT-5.2 Chat",
1765
+ api: "openai-completions",
1766
+ provider: "openrouter",
1767
+ baseUrl: "https://openrouter.ai/api/v1",
1768
+ reasoning: false,
1769
+ input: ["text", "image"],
1770
+ cost: {
1771
+ input: 1.75,
1772
+ output: 14,
1773
+ cacheRead: 0.175,
1774
+ cacheWrite: 0,
1775
+ },
1776
+ contextWindow: 128000,
1777
+ maxTokens: 16384,
1778
+ } satisfies Model<"openai-completions">,
1779
+ "openai/gpt-5.2-codex": {
1780
+ id: "openai/gpt-5.2-codex",
1781
+ name: "OpenAI: GPT-5.2-Codex",
1782
+ api: "openai-completions",
1783
+ provider: "openrouter",
1784
+ baseUrl: "https://openrouter.ai/api/v1",
1785
+ reasoning: true,
1786
+ input: ["text", "image"],
1787
+ cost: {
1788
+ input: 1.75,
1789
+ output: 14,
1790
+ cacheRead: 0.175,
1791
+ cacheWrite: 0,
1792
+ },
1793
+ contextWindow: 400000,
1794
+ maxTokens: 128000,
1795
+ } satisfies Model<"openai-completions">,
1796
+ "openai/gpt-5.2-pro": {
1797
+ id: "openai/gpt-5.2-pro",
1798
+ name: "OpenAI: GPT-5.2 Pro",
1799
+ api: "openai-completions",
1800
+ provider: "openrouter",
1801
+ baseUrl: "https://openrouter.ai/api/v1",
1802
+ reasoning: true,
1803
+ input: ["text", "image"],
1804
+ cost: {
1805
+ input: 21,
1806
+ output: 168,
1807
+ cacheRead: 0,
1808
+ cacheWrite: 0,
1809
+ },
1810
+ contextWindow: 400000,
1811
+ maxTokens: 128000,
1812
+ } satisfies Model<"openai-completions">,
1813
+ "openai/gpt-5.3-chat": {
1814
+ id: "openai/gpt-5.3-chat",
1815
+ name: "OpenAI: GPT-5.3 Chat",
1816
+ api: "openai-completions",
1817
+ provider: "openrouter",
1818
+ baseUrl: "https://openrouter.ai/api/v1",
1819
+ reasoning: false,
1820
+ input: ["text", "image"],
1821
+ cost: {
1822
+ input: 1.75,
1823
+ output: 14,
1824
+ cacheRead: 0.175,
1825
+ cacheWrite: 0,
1826
+ },
1827
+ contextWindow: 128000,
1828
+ maxTokens: 16384,
1829
+ } satisfies Model<"openai-completions">,
1830
+ "openai/gpt-5.3-codex": {
1831
+ id: "openai/gpt-5.3-codex",
1832
+ name: "OpenAI: GPT-5.3-Codex",
1833
+ api: "openai-completions",
1834
+ provider: "openrouter",
1835
+ baseUrl: "https://openrouter.ai/api/v1",
1836
+ reasoning: true,
1837
+ input: ["text", "image"],
1838
+ cost: {
1839
+ input: 1.75,
1840
+ output: 14,
1841
+ cacheRead: 0.175,
1842
+ cacheWrite: 0,
1843
+ },
1844
+ contextWindow: 400000,
1845
+ maxTokens: 128000,
1846
+ } satisfies Model<"openai-completions">,
1847
+ "openai/gpt-5.4": {
1848
+ id: "openai/gpt-5.4",
1849
+ name: "OpenAI: GPT-5.4",
1850
+ api: "openai-completions",
1851
+ provider: "openrouter",
1852
+ baseUrl: "https://openrouter.ai/api/v1",
1853
+ reasoning: true,
1854
+ input: ["text", "image"],
1855
+ cost: {
1856
+ input: 2.5,
1857
+ output: 15,
1858
+ cacheRead: 0.25,
1859
+ cacheWrite: 0,
1860
+ },
1861
+ contextWindow: 1050000,
1862
+ maxTokens: 128000,
1863
+ } satisfies Model<"openai-completions">,
1864
+ "openai/gpt-5.4-mini": {
1865
+ id: "openai/gpt-5.4-mini",
1866
+ name: "OpenAI: GPT-5.4 Mini",
1867
+ api: "openai-completions",
1868
+ provider: "openrouter",
1869
+ baseUrl: "https://openrouter.ai/api/v1",
1870
+ reasoning: true,
1871
+ input: ["text", "image"],
1872
+ cost: {
1873
+ input: 0.75,
1874
+ output: 4.5,
1875
+ cacheRead: 0.075,
1876
+ cacheWrite: 0,
1877
+ },
1878
+ contextWindow: 400000,
1879
+ maxTokens: 128000,
1880
+ } satisfies Model<"openai-completions">,
1881
+ "openai/gpt-5.4-nano": {
1882
+ id: "openai/gpt-5.4-nano",
1883
+ name: "OpenAI: GPT-5.4 Nano",
1884
+ api: "openai-completions",
1885
+ provider: "openrouter",
1886
+ baseUrl: "https://openrouter.ai/api/v1",
1887
+ reasoning: true,
1888
+ input: ["text", "image"],
1889
+ cost: {
1890
+ input: 0.19999999999999998,
1891
+ output: 1.25,
1892
+ cacheRead: 0.02,
1893
+ cacheWrite: 0,
1894
+ },
1895
+ contextWindow: 400000,
1896
+ maxTokens: 128000,
1897
+ } satisfies Model<"openai-completions">,
1898
+ "openai/gpt-5.4-pro": {
1899
+ id: "openai/gpt-5.4-pro",
1900
+ name: "OpenAI: GPT-5.4 Pro",
1901
+ api: "openai-completions",
1902
+ provider: "openrouter",
1903
+ baseUrl: "https://openrouter.ai/api/v1",
1904
+ reasoning: true,
1905
+ input: ["text", "image"],
1906
+ cost: {
1907
+ input: 30,
1908
+ output: 180,
1909
+ cacheRead: 0,
1910
+ cacheWrite: 0,
1911
+ },
1912
+ contextWindow: 1050000,
1913
+ maxTokens: 128000,
1914
+ } satisfies Model<"openai-completions">,
1915
+ "openai/gpt-audio": {
1916
+ id: "openai/gpt-audio",
1917
+ name: "OpenAI: GPT Audio",
1918
+ api: "openai-completions",
1919
+ provider: "openrouter",
1920
+ baseUrl: "https://openrouter.ai/api/v1",
1921
+ reasoning: false,
1922
+ input: ["text"],
1923
+ cost: {
1924
+ input: 2.5,
1925
+ output: 10,
1926
+ cacheRead: 0,
1927
+ cacheWrite: 0,
1928
+ },
1929
+ contextWindow: 128000,
1930
+ maxTokens: 16384,
1931
+ } satisfies Model<"openai-completions">,
1932
+ "openai/gpt-audio-mini": {
1933
+ id: "openai/gpt-audio-mini",
1934
+ name: "OpenAI: GPT Audio Mini",
1935
+ api: "openai-completions",
1936
+ provider: "openrouter",
1937
+ baseUrl: "https://openrouter.ai/api/v1",
1938
+ reasoning: false,
1939
+ input: ["text"],
1940
+ cost: {
1941
+ input: 0.6,
1942
+ output: 2.4,
1943
+ cacheRead: 0,
1944
+ cacheWrite: 0,
1945
+ },
1946
+ contextWindow: 128000,
1947
+ maxTokens: 16384,
1948
+ } satisfies Model<"openai-completions">,
1949
+ "openai/gpt-oss-120b": {
1950
+ id: "openai/gpt-oss-120b",
1951
+ name: "OpenAI: gpt-oss-120b",
1952
+ api: "openai-completions",
1953
+ provider: "openrouter",
1954
+ baseUrl: "https://openrouter.ai/api/v1",
1955
+ reasoning: true,
1956
+ input: ["text"],
1957
+ cost: {
1958
+ input: 0.039,
1959
+ output: 0.19,
1960
+ cacheRead: 0,
1961
+ cacheWrite: 0,
1962
+ },
1963
+ contextWindow: 131072,
1964
+ maxTokens: 4096,
1965
+ } satisfies Model<"openai-completions">,
1966
+ "openai/gpt-oss-120b:free": {
1967
+ id: "openai/gpt-oss-120b:free",
1968
+ name: "OpenAI: gpt-oss-120b (free)",
1969
+ api: "openai-completions",
1970
+ provider: "openrouter",
1971
+ baseUrl: "https://openrouter.ai/api/v1",
1972
+ reasoning: true,
1973
+ input: ["text"],
1974
+ cost: {
1975
+ input: 0,
1976
+ output: 0,
1977
+ cacheRead: 0,
1978
+ cacheWrite: 0,
1979
+ },
1980
+ contextWindow: 131072,
1981
+ maxTokens: 131072,
1982
+ } satisfies Model<"openai-completions">,
1983
+ "openai/gpt-oss-20b": {
1984
+ id: "openai/gpt-oss-20b",
1985
+ name: "OpenAI: gpt-oss-20b",
1986
+ api: "openai-completions",
1987
+ provider: "openrouter",
1988
+ baseUrl: "https://openrouter.ai/api/v1",
1989
+ reasoning: true,
1990
+ input: ["text"],
1991
+ cost: {
1992
+ input: 0.03,
1993
+ output: 0.11,
1994
+ cacheRead: 0.015,
1995
+ cacheWrite: 0,
1996
+ },
1997
+ contextWindow: 131072,
1998
+ maxTokens: 131072,
1999
+ } satisfies Model<"openai-completions">,
2000
+ "openai/gpt-oss-20b:free": {
2001
+ id: "openai/gpt-oss-20b:free",
2002
+ name: "OpenAI: gpt-oss-20b (free)",
2003
+ api: "openai-completions",
2004
+ provider: "openrouter",
2005
+ baseUrl: "https://openrouter.ai/api/v1",
2006
+ reasoning: true,
2007
+ input: ["text"],
2008
+ cost: {
2009
+ input: 0,
2010
+ output: 0,
2011
+ cacheRead: 0,
2012
+ cacheWrite: 0,
2013
+ },
2014
+ contextWindow: 131072,
2015
+ maxTokens: 131072,
2016
+ } satisfies Model<"openai-completions">,
2017
+ "openai/gpt-oss-safeguard-20b": {
2018
+ id: "openai/gpt-oss-safeguard-20b",
2019
+ name: "OpenAI: gpt-oss-safeguard-20b",
2020
+ api: "openai-completions",
2021
+ provider: "openrouter",
2022
+ baseUrl: "https://openrouter.ai/api/v1",
2023
+ reasoning: true,
2024
+ input: ["text"],
2025
+ cost: {
2026
+ input: 0.075,
2027
+ output: 0.3,
2028
+ cacheRead: 0.037,
2029
+ cacheWrite: 0,
2030
+ },
2031
+ contextWindow: 131072,
2032
+ maxTokens: 65536,
2033
+ } satisfies Model<"openai-completions">,
2034
+ "openai/o1": {
2035
+ id: "openai/o1",
2036
+ name: "OpenAI: o1",
2037
+ api: "openai-completions",
2038
+ provider: "openrouter",
2039
+ baseUrl: "https://openrouter.ai/api/v1",
2040
+ reasoning: true,
2041
+ input: ["text", "image"],
2042
+ cost: {
2043
+ input: 15,
2044
+ output: 60,
2045
+ cacheRead: 7.5,
2046
+ cacheWrite: 0,
2047
+ },
2048
+ contextWindow: 200000,
2049
+ maxTokens: 100000,
2050
+ } satisfies Model<"openai-completions">,
2051
+ "openai/o3": {
2052
+ id: "openai/o3",
2053
+ name: "OpenAI: o3",
2054
+ api: "openai-completions",
2055
+ provider: "openrouter",
2056
+ baseUrl: "https://openrouter.ai/api/v1",
2057
+ reasoning: true,
2058
+ input: ["text", "image"],
2059
+ cost: {
2060
+ input: 2,
2061
+ output: 8,
2062
+ cacheRead: 0.5,
2063
+ cacheWrite: 0,
2064
+ },
2065
+ contextWindow: 200000,
2066
+ maxTokens: 100000,
2067
+ } satisfies Model<"openai-completions">,
2068
+ "openai/o3-deep-research": {
2069
+ id: "openai/o3-deep-research",
2070
+ name: "OpenAI: o3 Deep Research",
2071
+ api: "openai-completions",
2072
+ provider: "openrouter",
2073
+ baseUrl: "https://openrouter.ai/api/v1",
2074
+ reasoning: true,
2075
+ input: ["text", "image"],
2076
+ cost: {
2077
+ input: 10,
2078
+ output: 40,
2079
+ cacheRead: 2.5,
2080
+ cacheWrite: 0,
2081
+ },
2082
+ contextWindow: 200000,
2083
+ maxTokens: 100000,
2084
+ } satisfies Model<"openai-completions">,
2085
+ "openai/o3-mini": {
2086
+ id: "openai/o3-mini",
2087
+ name: "OpenAI: o3 Mini",
2088
+ api: "openai-completions",
2089
+ provider: "openrouter",
2090
+ baseUrl: "https://openrouter.ai/api/v1",
2091
+ reasoning: true,
2092
+ input: ["text"],
2093
+ cost: {
2094
+ input: 1.1,
2095
+ output: 4.4,
2096
+ cacheRead: 0.55,
2097
+ cacheWrite: 0,
2098
+ },
2099
+ contextWindow: 200000,
2100
+ maxTokens: 100000,
2101
+ } satisfies Model<"openai-completions">,
2102
+ "openai/o3-mini-high": {
2103
+ id: "openai/o3-mini-high",
2104
+ name: "OpenAI: o3 Mini High",
2105
+ api: "openai-completions",
2106
+ provider: "openrouter",
2107
+ baseUrl: "https://openrouter.ai/api/v1",
2108
+ reasoning: true,
2109
+ input: ["text"],
2110
+ cost: {
2111
+ input: 1.1,
2112
+ output: 4.4,
2113
+ cacheRead: 0.55,
2114
+ cacheWrite: 0,
2115
+ },
2116
+ contextWindow: 200000,
2117
+ maxTokens: 100000,
2118
+ } satisfies Model<"openai-completions">,
2119
+ "openai/o3-pro": {
2120
+ id: "openai/o3-pro",
2121
+ name: "OpenAI: o3 Pro",
2122
+ api: "openai-completions",
2123
+ provider: "openrouter",
2124
+ baseUrl: "https://openrouter.ai/api/v1",
2125
+ reasoning: true,
2126
+ input: ["text", "image"],
2127
+ cost: {
2128
+ input: 20,
2129
+ output: 80,
2130
+ cacheRead: 0,
2131
+ cacheWrite: 0,
2132
+ },
2133
+ contextWindow: 200000,
2134
+ maxTokens: 100000,
2135
+ } satisfies Model<"openai-completions">,
2136
+ "openai/o4-mini": {
2137
+ id: "openai/o4-mini",
2138
+ name: "OpenAI: o4 Mini",
2139
+ api: "openai-completions",
2140
+ provider: "openrouter",
2141
+ baseUrl: "https://openrouter.ai/api/v1",
2142
+ reasoning: true,
2143
+ input: ["text", "image"],
2144
+ cost: {
2145
+ input: 1.1,
2146
+ output: 4.4,
2147
+ cacheRead: 0.275,
2148
+ cacheWrite: 0,
2149
+ },
2150
+ contextWindow: 200000,
2151
+ maxTokens: 100000,
2152
+ } satisfies Model<"openai-completions">,
2153
+ "openai/o4-mini-deep-research": {
2154
+ id: "openai/o4-mini-deep-research",
2155
+ name: "OpenAI: o4 Mini Deep Research",
2156
+ api: "openai-completions",
2157
+ provider: "openrouter",
2158
+ baseUrl: "https://openrouter.ai/api/v1",
2159
+ reasoning: true,
2160
+ input: ["text", "image"],
2161
+ cost: {
2162
+ input: 2,
2163
+ output: 8,
2164
+ cacheRead: 0.5,
2165
+ cacheWrite: 0,
2166
+ },
2167
+ contextWindow: 200000,
2168
+ maxTokens: 100000,
2169
+ } satisfies Model<"openai-completions">,
2170
+ "openai/o4-mini-high": {
2171
+ id: "openai/o4-mini-high",
2172
+ name: "OpenAI: o4 Mini High",
2173
+ api: "openai-completions",
2174
+ provider: "openrouter",
2175
+ baseUrl: "https://openrouter.ai/api/v1",
2176
+ reasoning: true,
2177
+ input: ["text", "image"],
2178
+ cost: {
2179
+ input: 1.1,
2180
+ output: 4.4,
2181
+ cacheRead: 0.275,
2182
+ cacheWrite: 0,
2183
+ },
2184
+ contextWindow: 200000,
2185
+ maxTokens: 100000,
2186
+ } satisfies Model<"openai-completions">,
2187
+ },
2188
+ } as const;