@pydantic/genai-prices 0.0.62 → 0.0.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -172,7 +172,7 @@ class De {
172
172
  let L = null;
173
173
  Ae();
174
174
  let V = [];
175
- const b = Object.assign(/* @__PURE__ */ Object.create(null), { _: [] }), se = {};
175
+ const w = Object.assign(/* @__PURE__ */ Object.create(null), { _: [] }), se = {};
176
176
  for (let e = 0; e < r.length; e++) {
177
177
  const a = r[e], c = a.replace(/^-{3,}/, "---");
178
178
  let n, t, l, p, d, v;
@@ -182,39 +182,39 @@ class De {
182
182
  Y(a);
183
183
  continue;
184
184
  } else if (a.match(/^--.+=/) || !k["short-option-groups"] && a.match(/^-.+=/))
185
- p = a.match(/^--?([^=]+)=([\s\S]*)$/), p !== null && Array.isArray(p) && p.length >= 3 && (g(p[1], m.arrays) ? e = K(e, p[1], r, p[2]) : g(p[1], m.nargs) !== !1 ? e = j(e, p[1], r, p[2]) : w(p[1], p[2], !0));
185
+ p = a.match(/^--?([^=]+)=([\s\S]*)$/), p !== null && Array.isArray(p) && p.length >= 3 && (g(p[1], m.arrays) ? e = K(e, p[1], r, p[2]) : g(p[1], m.nargs) !== !1 ? e = j(e, p[1], r, p[2]) : b(p[1], p[2], !0));
186
186
  else if (a.match(U) && k["boolean-negation"])
187
- p = a.match(U), p !== null && Array.isArray(p) && p.length >= 2 && (t = p[1], w(t, g(t, m.arrays) ? [!1] : !1));
187
+ p = a.match(U), p !== null && Array.isArray(p) && p.length >= 2 && (t = p[1], b(t, g(t, m.arrays) ? [!1] : !1));
188
188
  else if (a.match(/^--.+/) || !k["short-option-groups"] && a.match(/^-[^-]+/))
189
- p = a.match(/^--?(.+)/), p !== null && Array.isArray(p) && p.length >= 2 && (t = p[1], g(t, m.arrays) ? e = K(e, t, r) : g(t, m.nargs) !== !1 ? e = j(e, t, r) : (d = r[e + 1], d !== void 0 && (!d.match(/^-/) || d.match(I)) && !g(t, m.bools) && !g(t, m.counts) || /^(true|false)$/.test(d) ? (w(t, d), e++) : w(t, R(t))));
189
+ p = a.match(/^--?(.+)/), p !== null && Array.isArray(p) && p.length >= 2 && (t = p[1], g(t, m.arrays) ? e = K(e, t, r) : g(t, m.nargs) !== !1 ? e = j(e, t, r) : (d = r[e + 1], d !== void 0 && (!d.match(/^-/) || d.match(I)) && !g(t, m.bools) && !g(t, m.counts) || /^(true|false)$/.test(d) ? (b(t, d), e++) : b(t, R(t))));
190
190
  else if (a.match(/^-.\..+=/))
191
- p = a.match(/^-([^=]+)=([\s\S]*)$/), p !== null && Array.isArray(p) && p.length >= 3 && w(p[1], p[2]);
191
+ p = a.match(/^-([^=]+)=([\s\S]*)$/), p !== null && Array.isArray(p) && p.length >= 3 && b(p[1], p[2]);
192
192
  else if (a.match(/^-.\..+/) && !a.match(I))
193
- d = r[e + 1], p = a.match(/^-(.\..+)/), p !== null && Array.isArray(p) && p.length >= 2 && (t = p[1], d !== void 0 && !d.match(/^-/) && !g(t, m.bools) && !g(t, m.counts) ? (w(t, d), e++) : w(t, R(t)));
193
+ d = r[e + 1], p = a.match(/^-(.\..+)/), p !== null && Array.isArray(p) && p.length >= 2 && (t = p[1], d !== void 0 && !d.match(/^-/) && !g(t, m.bools) && !g(t, m.counts) ? (b(t, d), e++) : b(t, R(t)));
194
194
  else if (a.match(/^-[^-]+/) && !a.match(I)) {
195
195
  l = a.slice(1, -1).split(""), n = !1;
196
196
  for (let x = 0; x < l.length; x++) {
197
197
  if (d = a.slice(x + 2), l[x + 1] && l[x + 1] === "=") {
198
- v = a.slice(x + 3), t = l[x], g(t, m.arrays) ? e = K(e, t, r, v) : g(t, m.nargs) !== !1 ? e = j(e, t, r, v) : w(t, v), n = !0;
198
+ v = a.slice(x + 3), t = l[x], g(t, m.arrays) ? e = K(e, t, r, v) : g(t, m.nargs) !== !1 ? e = j(e, t, r, v) : b(t, v), n = !0;
199
199
  break;
200
200
  }
201
201
  if (d === "-") {
202
- w(l[x], d);
202
+ b(l[x], d);
203
203
  continue;
204
204
  }
205
205
  if (/[A-Za-z]/.test(l[x]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(d) && g(d, m.bools) === !1) {
206
- w(l[x], d), n = !0;
206
+ b(l[x], d), n = !0;
207
207
  break;
208
208
  }
209
209
  if (l[x + 1] && l[x + 1].match(/\W/)) {
210
- w(l[x], d), n = !0;
210
+ b(l[x], d), n = !0;
211
211
  break;
212
212
  } else
213
- w(l[x], R(l[x]));
213
+ b(l[x], R(l[x]));
214
214
  }
215
- t = a.slice(-1)[0], !n && t !== "-" && (g(t, m.arrays) ? e = K(e, t, r) : g(t, m.nargs) !== !1 ? e = j(e, t, r) : (d = r[e + 1], d !== void 0 && (!/^(-|--)[^-]/.test(d) || d.match(I)) && !g(t, m.bools) && !g(t, m.counts) || /^(true|false)$/.test(d) ? (w(t, d), e++) : w(t, R(t))));
215
+ t = a.slice(-1)[0], !n && t !== "-" && (g(t, m.arrays) ? e = K(e, t, r) : g(t, m.nargs) !== !1 ? e = j(e, t, r) : (d = r[e + 1], d !== void 0 && (!/^(-|--)[^-]/.test(d) || d.match(I)) && !g(t, m.bools) && !g(t, m.counts) || /^(true|false)$/.test(d) ? (b(t, d), e++) : b(t, R(t))));
216
216
  } else if (a.match(/^-[0-9]$/) && a.match(I) && g(a.slice(1), m.bools))
217
- t = a.slice(1), w(t, R(t));
217
+ t = a.slice(1), b(t, R(t));
218
218
  else if (a === "--") {
219
219
  V = r.slice(e + 1);
220
220
  break;
@@ -224,23 +224,23 @@ class De {
224
224
  } else
225
225
  Y(a);
226
226
  }
227
- me(b, !0), me(b, !1), fe(b), we(), ue(b, m.aliases, q, !0), be(b), k["set-placeholder-key"] && ve(b), Object.keys(m.counts).forEach(function(e) {
228
- N(b, e.split(".")) || w(e, 0);
229
- }), Q && V.length && (b[y] = []), V.forEach(function(e) {
230
- b[y].push(e);
231
- }), k["camel-case-expansion"] && k["strip-dashed"] && Object.keys(b).filter((e) => e !== "--" && e.includes("-")).forEach((e) => {
232
- delete b[e];
227
+ me(w, !0), me(w, !1), fe(w), be(), ue(w, m.aliases, q, !0), we(w), k["set-placeholder-key"] && ve(w), Object.keys(m.counts).forEach(function(e) {
228
+ N(w, e.split(".")) || b(e, 0);
229
+ }), Q && V.length && (w[y] = []), V.forEach(function(e) {
230
+ w[y].push(e);
231
+ }), k["camel-case-expansion"] && k["strip-dashed"] && Object.keys(w).filter((e) => e !== "--" && e.includes("-")).forEach((e) => {
232
+ delete w[e];
233
233
  }), k["strip-aliased"] && [].concat(...Object.keys(_).map((e) => _[e])).forEach((e) => {
234
- k["camel-case-expansion"] && e.includes("-") && delete b[e.split(".").map((a) => W(a)).join(".")], delete b[e];
234
+ k["camel-case-expansion"] && e.includes("-") && delete w[e.split(".").map((a) => W(a)).join(".")], delete w[e];
235
235
  });
236
236
  function Y(e) {
237
237
  const a = H("_", e);
238
- (typeof a == "string" || typeof a == "number") && b._.push(a);
238
+ (typeof a == "string" || typeof a == "number") && w._.push(a);
239
239
  }
240
240
  function j(e, a, c, n) {
241
241
  let t, l = g(a, m.nargs);
242
242
  if (l = typeof l != "number" || isNaN(l) ? 1 : l, l === 0)
243
- return G(n) || (L = Error(M("Argument unexpected for: %s", a))), w(a, R(a)), e;
243
+ return G(n) || (L = Error(M("Argument unexpected for: %s", a))), b(a, R(a)), e;
244
244
  let p = G(n) ? 0 : 1;
245
245
  if (k["nargs-eats-options"])
246
246
  c.length - (e + 1) + p < l && (L = Error(M("Not enough arguments following: %s", a))), p = l;
@@ -250,8 +250,8 @@ class De {
250
250
  p < l && (L = Error(M("Not enough arguments following: %s", a)));
251
251
  }
252
252
  let d = Math.min(p, l);
253
- for (!G(n) && d > 0 && (w(a, n), d--), t = e + 1; t < d + e + 1; t++)
254
- w(a, c[t]);
253
+ for (!G(n) && d > 0 && (b(a, n), d--), t = e + 1; t < d + e + 1; t++)
254
+ b(a, c[t]);
255
255
  return e + d;
256
256
  }
257
257
  function K(e, a, c, n) {
@@ -269,9 +269,9 @@ class De {
269
269
  for (let d = e + 1; d < c.length && !(!k["greedy-arrays"] && t.length > 0 || p && typeof p == "number" && t.length >= p || (l = c[d], /^-/.test(l) && !I.test(l) && !$(l))); d++)
270
270
  e = d, t.push(J(a, l, h));
271
271
  }
272
- return typeof p == "number" && (p && t.length < p || isNaN(p) && t.length === 0) && (L = Error(M("Not enough arguments following: %s", a))), w(a, t), e;
272
+ return typeof p == "number" && (p && t.length < p || isNaN(p) && t.length === 0) && (L = Error(M("Not enough arguments following: %s", a))), b(a, t), e;
273
273
  }
274
- function w(e, a, c = h) {
274
+ function b(e, a, c = h) {
275
275
  if (/-/.test(e) && k["camel-case-expansion"]) {
276
276
  const l = e.split(".").map(function(p) {
277
277
  return W(p);
@@ -279,13 +279,13 @@ class De {
279
279
  re(e, l);
280
280
  }
281
281
  const n = J(e, a, c), t = e.split(".");
282
- E(b, t, n), m.aliases[e] && m.aliases[e].forEach(function(l) {
282
+ E(w, t, n), m.aliases[e] && m.aliases[e].forEach(function(l) {
283
283
  const p = l.split(".");
284
- E(b, p, n);
284
+ E(w, p, n);
285
285
  }), t.length > 1 && k["dot-notation"] && (m.aliases[t[0]] || []).forEach(function(l) {
286
286
  let p = l.split(".");
287
287
  const d = [].concat(t);
288
- d.shift(), p = p.concat(d), (m.aliases[e] || []).includes(p.join(".")) || E(b, p, n);
288
+ d.shift(), p = p.concat(d), (m.aliases[e] || []).includes(p.join(".")) || E(w, p, n);
289
289
  }), g(e, m.normalize) && !g(e, m.arrays) && [e].concat(m.aliases[e] || []).forEach(function(p) {
290
290
  Object.defineProperty(se, p, {
291
291
  enumerable: !0,
@@ -340,10 +340,10 @@ class De {
340
340
  function Z(e, a) {
341
341
  Object.keys(e).forEach(function(c) {
342
342
  const n = e[c], t = a ? a + "." + c : c;
343
- typeof n == "object" && n !== null && !Array.isArray(n) && k["dot-notation"] ? Z(n, t) : (!N(b, t.split(".")) || g(t, m.arrays) && k["combine-arrays"]) && w(t, n);
343
+ typeof n == "object" && n !== null && !Array.isArray(n) && k["dot-notation"] ? Z(n, t) : (!N(w, t.split(".")) || g(t, m.arrays) && k["combine-arrays"]) && b(t, n);
344
344
  });
345
345
  }
346
- function we() {
346
+ function be() {
347
347
  typeof T < "u" && T.forEach(function(e) {
348
348
  Z(e);
349
349
  });
@@ -357,11 +357,11 @@ class De {
357
357
  const l = t.split("__").map(function(p, d) {
358
358
  return d === 0 && (p = p.substring(c.length)), W(p);
359
359
  });
360
- (a && m.configs[l.join(".")] || !a) && !N(e, l) && w(l.join("."), n[t]);
360
+ (a && m.configs[l.join(".")] || !a) && !N(e, l) && b(l.join("."), n[t]);
361
361
  }
362
362
  });
363
363
  }
364
- function be(e) {
364
+ function we(e) {
365
365
  let a;
366
366
  const c = /* @__PURE__ */ new Set();
367
367
  Object.keys(e).forEach(function(n) {
@@ -486,7 +486,7 @@ class De {
486
486
  }
487
487
  return {
488
488
  aliases: Object.assign({}, m.aliases),
489
- argv: Object.assign(se, b),
489
+ argv: Object.assign(se, w),
490
490
  configuration: k,
491
491
  defaulted: Object.assign({}, O),
492
492
  error: L,
@@ -1105,6 +1105,35 @@ const ne = [
1105
1105
  output_mtok: 25
1106
1106
  }
1107
1107
  },
1108
+ {
1109
+ id: "claude-opus-4-8",
1110
+ name: "Claude Opus 4.8",
1111
+ description: "Our most capable model for complex reasoning and agentic coding",
1112
+ match: {
1113
+ or: [
1114
+ {
1115
+ starts_with: "claude-opus-4-8"
1116
+ },
1117
+ {
1118
+ starts_with: "claude-opus-4.8"
1119
+ },
1120
+ {
1121
+ starts_with: "claude-4-8-opus"
1122
+ },
1123
+ {
1124
+ starts_with: "claude-4.8-opus"
1125
+ }
1126
+ ]
1127
+ },
1128
+ context_window: 1e6,
1129
+ price_comments: "Flat pricing across full 1M context window (no tiered pricing). Ref: https://platform.claude.com/docs/en/about-claude/pricing#long-context-pricing",
1130
+ prices: {
1131
+ input_mtok: 5,
1132
+ cache_write_mtok: 6.25,
1133
+ cache_read_mtok: 0.5,
1134
+ output_mtok: 25
1135
+ }
1136
+ },
1108
1137
  {
1109
1138
  id: "claude-sonnet-4-0",
1110
1139
  name: "Claude Sonnet 4",
@@ -1580,6 +1609,18 @@ const ne = [
1580
1609
  output_mtok: 25
1581
1610
  }
1582
1611
  },
1612
+ {
1613
+ id: "global.anthropic.claude-opus-4-8-v1:0",
1614
+ match: {
1615
+ contains: "global.anthropic.claude-opus-4-8"
1616
+ },
1617
+ prices: {
1618
+ input_mtok: 5,
1619
+ cache_write_mtok: 6.25,
1620
+ cache_read_mtok: 0.5,
1621
+ output_mtok: 25
1622
+ }
1623
+ },
1583
1624
  {
1584
1625
  id: "global.anthropic.claude-sonnet-4-20250514-v1:0",
1585
1626
  match: {
@@ -1648,6 +1689,39 @@ const ne = [
1648
1689
  }
1649
1690
  }
1650
1691
  },
1692
+ {
1693
+ id: "google.gemma-3-12b-it",
1694
+ name: "Gemma 3 12B IT",
1695
+ match: {
1696
+ contains: "google.gemma-3-12b-it"
1697
+ },
1698
+ prices: {
1699
+ input_mtok: 0.09,
1700
+ output_mtok: 0.29
1701
+ }
1702
+ },
1703
+ {
1704
+ id: "google.gemma-3-27b-it",
1705
+ name: "Gemma 3 27B IT",
1706
+ match: {
1707
+ contains: "google.gemma-3-27b-it"
1708
+ },
1709
+ prices: {
1710
+ input_mtok: 0.23,
1711
+ output_mtok: 0.38
1712
+ }
1713
+ },
1714
+ {
1715
+ id: "google.gemma-3-4b-it",
1716
+ name: "Gemma 3 4B IT",
1717
+ match: {
1718
+ contains: "google.gemma-3-4b-it"
1719
+ },
1720
+ prices: {
1721
+ input_mtok: 0.04,
1722
+ output_mtok: 0.08
1723
+ }
1724
+ },
1651
1725
  {
1652
1726
  id: "meta.llama3-1-70b-instruct-v1:0",
1653
1727
  name: "Llama 3.1 70B Instruct",
@@ -1769,6 +1843,61 @@ const ne = [
1769
1843
  output_mtok: 0.66
1770
1844
  }
1771
1845
  },
1846
+ {
1847
+ id: "mistral.devstral-2-123b",
1848
+ name: "Devstral 2 123B",
1849
+ match: {
1850
+ contains: "mistral.devstral-2-123b"
1851
+ },
1852
+ prices: {
1853
+ input_mtok: 0.4,
1854
+ output_mtok: 2
1855
+ }
1856
+ },
1857
+ {
1858
+ id: "mistral.magistral-small-2509",
1859
+ name: "Magistral Small 2509",
1860
+ match: {
1861
+ contains: "mistral.magistral-small-2509"
1862
+ },
1863
+ prices: {
1864
+ input_mtok: 0.5,
1865
+ output_mtok: 1.5
1866
+ }
1867
+ },
1868
+ {
1869
+ id: "mistral.ministral-3-14b-instruct",
1870
+ name: "Ministral 14B 3.0",
1871
+ match: {
1872
+ contains: "mistral.ministral-3-14b-instruct"
1873
+ },
1874
+ prices: {
1875
+ input_mtok: 0.2,
1876
+ output_mtok: 0.2
1877
+ }
1878
+ },
1879
+ {
1880
+ id: "mistral.ministral-3-3b-instruct",
1881
+ name: "Ministral 3B 3.0",
1882
+ match: {
1883
+ contains: "mistral.ministral-3-3b-instruct"
1884
+ },
1885
+ prices: {
1886
+ input_mtok: 0.1,
1887
+ output_mtok: 0.1
1888
+ }
1889
+ },
1890
+ {
1891
+ id: "mistral.ministral-3-8b-instruct",
1892
+ name: "Ministral 8B 3.0",
1893
+ match: {
1894
+ contains: "mistral.ministral-3-8b-instruct"
1895
+ },
1896
+ prices: {
1897
+ input_mtok: 0.15,
1898
+ output_mtok: 0.15
1899
+ }
1900
+ },
1772
1901
  {
1773
1902
  id: "mistral.mistral-7b-instruct-v0:2",
1774
1903
  name: "Mistral 7B Instruct",
@@ -1791,6 +1920,17 @@ const ne = [
1791
1920
  output_mtok: 12
1792
1921
  }
1793
1922
  },
1923
+ {
1924
+ id: "mistral.mistral-large-3-675b-instruct",
1925
+ name: "Mistral Large 3",
1926
+ match: {
1927
+ contains: "mistral.mistral-large-3-675b-instruct"
1928
+ },
1929
+ prices: {
1930
+ input_mtok: 0.5,
1931
+ output_mtok: 1.5
1932
+ }
1933
+ },
1794
1934
  {
1795
1935
  id: "mistral.mistral-small-2402-v1:0",
1796
1936
  name: "Mistral Small (24.02)",
@@ -1824,6 +1964,28 @@ const ne = [
1824
1964
  output_mtok: 6
1825
1965
  }
1826
1966
  },
1967
+ {
1968
+ id: "mistral.voxtral-mini-3b-2507",
1969
+ name: "Voxtral Mini 3B 2507",
1970
+ match: {
1971
+ contains: "mistral.voxtral-mini-3b-2507"
1972
+ },
1973
+ prices: {
1974
+ input_mtok: 0.04,
1975
+ output_mtok: 0.04
1976
+ }
1977
+ },
1978
+ {
1979
+ id: "mistral.voxtral-small-24b-2507",
1980
+ name: "Voxtral Small 24B 2507",
1981
+ match: {
1982
+ contains: "mistral.voxtral-small-24b-2507"
1983
+ },
1984
+ prices: {
1985
+ input_mtok: 0.1,
1986
+ output_mtok: 0.3
1987
+ }
1988
+ },
1827
1989
  {
1828
1990
  id: "nvidia.nemotron-nano-3-30b:0",
1829
1991
  name: "Nemotron 3 Nano 30B",
@@ -2257,6 +2419,37 @@ const ne = [
2257
2419
  output_mtok: 27.5
2258
2420
  }
2259
2421
  },
2422
+ {
2423
+ id: "regional.anthropic.claude-opus-4-8-v1:0",
2424
+ match: {
2425
+ or: [
2426
+ {
2427
+ starts_with: "anthropic.claude-opus-4-8"
2428
+ },
2429
+ {
2430
+ starts_with: "claude-opus-4-8"
2431
+ },
2432
+ {
2433
+ contains: "us.anthropic.claude-opus-4-8"
2434
+ },
2435
+ {
2436
+ contains: "au.anthropic.claude-opus-4-8"
2437
+ },
2438
+ {
2439
+ contains: "eu.anthropic.claude-opus-4-8"
2440
+ },
2441
+ {
2442
+ contains: "jp.anthropic.claude-opus-4-8"
2443
+ }
2444
+ ]
2445
+ },
2446
+ prices: {
2447
+ input_mtok: 5.5,
2448
+ cache_write_mtok: 6.875,
2449
+ cache_read_mtok: 0.55,
2450
+ output_mtok: 27.5
2451
+ }
2452
+ },
2260
2453
  {
2261
2454
  id: "regional.anthropic.claude-sonnet-4-20250514-v1:0",
2262
2455
  match: {
@@ -3244,11 +3437,10 @@ Compared to other leading proprietary and open-weights models Command A delivers
3244
3437
  ]
3245
3438
  },
3246
3439
  context_window: 1e6,
3247
- price_comments: "Standard (non-promotional) pricing. DeepSeek is offering a temporary 75% promotional discount that is not reflected here.",
3248
3440
  prices: {
3249
- input_mtok: 1.74,
3250
- cache_read_mtok: 0.0145,
3251
- output_mtok: 3.48
3441
+ input_mtok: 0.435,
3442
+ cache_read_mtok: 3625e-6,
3443
+ output_mtok: 0.87
3252
3444
  }
3253
3445
  }
3254
3446
  ]
@@ -3838,6 +4030,33 @@ Compared to other leading proprietary and open-weights models Command A delivers
3838
4030
  output_mtok: 25
3839
4031
  }
3840
4032
  },
4033
+ {
4034
+ id: "claude-opus-4-8",
4035
+ match: {
4036
+ or: [
4037
+ {
4038
+ contains: "claude-4-8-opus"
4039
+ },
4040
+ {
4041
+ contains: "claude-opus-4-8"
4042
+ },
4043
+ {
4044
+ contains: "claude-4.8-opus"
4045
+ },
4046
+ {
4047
+ contains: "claude-opus-4.8"
4048
+ }
4049
+ ]
4050
+ },
4051
+ context_window: 1e6,
4052
+ price_comments: "Flat pricing across full 1M context window. Ref: https://cloud.google.com/vertex-ai/generative-ai/pricing#claude-models",
4053
+ prices: {
4054
+ input_mtok: 5,
4055
+ cache_write_mtok: 6.25,
4056
+ cache_read_mtok: 0.5,
4057
+ output_mtok: 25
4058
+ }
4059
+ },
3841
4060
  {
3842
4061
  id: "gemini-1.0-pro-vision-001",
3843
4062
  name: "gemini 1.0 pro vision",
@@ -11768,6 +11987,27 @@ Compared to other leading proprietary and open-weights models Command A delivers
11768
11987
  output_mtok: 25
11769
11988
  }
11770
11989
  },
11990
+ {
11991
+ id: "anthropic/claude-opus-4.8",
11992
+ match: {
11993
+ or: [
11994
+ {
11995
+ equals: "anthropic/claude-opus-4.8"
11996
+ },
11997
+ {
11998
+ equals: "anthropic/claude-opus-4.8:beta"
11999
+ }
12000
+ ]
12001
+ },
12002
+ context_window: 1e6,
12003
+ price_comments: "Flat pricing across full 1M context window (no tiered pricing). Ref: https://platform.claude.com/docs/en/about-claude/pricing#long-context-pricing",
12004
+ prices: {
12005
+ input_mtok: 5,
12006
+ cache_write_mtok: 6.25,
12007
+ cache_read_mtok: 0.5,
12008
+ output_mtok: 25
12009
+ }
12010
+ },
11771
12011
  {
11772
12012
  id: "anthropic/claude-sonnet-4.5",
11773
12013
  match: {