metergraph-core 0.2.26__tar.gz → 0.2.29__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metergraph-core
3
- Version: 0.2.26
3
+ Version: 0.2.29
4
4
  Summary: Reusable MeterGraph catalog and deterministic billing engine
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: >=3.10
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "metergraph-core"
3
- version = "0.2.26"
3
+ version = "0.2.29"
4
4
  description = "Reusable MeterGraph catalog and deterministic billing engine"
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -8,6 +8,7 @@ from .catalog import (
8
8
  ResolvedPrice,
9
9
  counts_cache_read_in_input,
10
10
  direct_channel_for_provider,
11
+ normalize_provider,
11
12
  )
12
13
  from .billing import (
13
14
  BillingDecision,
@@ -43,6 +44,7 @@ __all__ = [
43
44
  "RetrievalPrice",
44
45
  "counts_cache_read_in_input",
45
46
  "direct_channel_for_provider",
47
+ "normalize_provider",
46
48
  "load_catalog",
47
49
  "normalize_gateway_evidence",
48
50
  "parse_catalog",
@@ -14,6 +14,7 @@ _PROVIDER_ALIASES = {
14
14
  "aws-bedrock": "bedrock",
15
15
  "gemini": "google",
16
16
  "google-genai": "google",
17
+ "moonshot": "moonshotai",
17
18
  "perplexity": "perplexity-ai",
18
19
  "xai": "x-ai",
19
20
  }
@@ -35,7 +36,9 @@ _DIRECT_CHANNEL_BY_PROVIDER = {
35
36
  "perplexity-ai": "perplexity-api",
36
37
  "x-ai": "xai-api",
37
38
  "alibaba": "alibaba-api",
38
- "amazon": "amazon-api",
39
+ # Amazon publishes no first-party inference API: its own models are sold
40
+ # through Bedrock, so a trace naming "amazon" was billed on Bedrock.
41
+ "amazon": "aws-bedrock",
39
42
  "meta": "meta-api",
40
43
  "minimax": "minimax-api",
41
44
  "mistral": "mistral-api",
@@ -92,7 +95,7 @@ def counts_cache_read_in_input(
92
95
  return pair in _INPUT_INCLUDES_CACHE_READ_PAIRS
93
96
 
94
97
 
95
- def _normalize_provider(provider: str) -> str:
98
+ def normalize_provider(provider: str) -> str:
96
99
  """Fold a provider spelling through metergraph-core's provider-alias map
97
100
  (e.g. ``aws``/``amazon-bedrock`` -> ``bedrock``, ``google-genai`` ->
98
101
  ``google``) so identity and channel lookups accept every spelling the
@@ -108,7 +111,7 @@ def direct_channel_for_provider(provider: Any) -> str | None:
108
111
  channel."""
109
112
  if not isinstance(provider, str):
110
113
  return None
111
- return _DIRECT_CHANNEL_BY_PROVIDER.get(_normalize_provider(provider))
114
+ return _DIRECT_CHANNEL_BY_PROVIDER.get(normalize_provider(provider))
112
115
 
113
116
 
114
117
  def _coerce_datetime(at: Any) -> datetime:
@@ -193,10 +196,76 @@ def _tokens(value: Any) -> int | None:
193
196
  return result if result >= 0 else None
194
197
 
195
198
 
199
+ def _off_peak_multiplier(rules: Mapping[str, Any], at: datetime) -> Decimal:
200
+ """The discount a provider applies outside its published peak hours.
201
+
202
+ A row states the peak rate, which is the provider's list price, and the
203
+ window it applies in. A call outside that window is scaled by
204
+ ``multiplier``; a row with no window is time-independent.
205
+ """
206
+ discount = rules.get("off_peak_discount") or {}
207
+ windows = discount.get("peak_hours_utc") or ()
208
+ multiplier = _decimal(discount.get("multiplier"))
209
+ if not windows or multiplier is None:
210
+ return Decimal("1")
211
+ moment = at.astimezone(timezone.utc)
212
+ if discount.get("peak_weekdays_only") and moment.weekday() >= 5:
213
+ return multiplier
214
+ for window in windows:
215
+ try:
216
+ start, end = window
217
+ except (TypeError, ValueError):
218
+ continue
219
+ if _tokens(start) is None or _tokens(end) is None:
220
+ continue
221
+ if int(start) <= moment.hour < int(end):
222
+ return Decimal("1")
223
+ return multiplier
224
+
225
+ # A count that was never given and a count that was given but cannot be read are
226
+ # different facts with opposite billing consequences for cached tokens: absent
227
+ # means there was no cache to discount, unusable means we do not know. `_tokens`
228
+ # answers both with None, which is right for a count a caller may legitimately
229
+ # omit and wrong for one it supplied.
230
+ _UNUSABLE = object()
231
+
232
+
233
+ def _token_count(value: Any) -> Any:
234
+ """A usable token count, ``None`` when none was given, or ``_UNUSABLE`` when
235
+ one was given that cannot be read as a count."""
236
+ if value is None:
237
+ return None
238
+ if isinstance(value, bool):
239
+ return _UNUSABLE
240
+ try:
241
+ result = int(value)
242
+ except (ValueError, TypeError, OverflowError):
243
+ return _UNUSABLE
244
+ return result if result >= 0 else _UNUSABLE
245
+
246
+
247
+ def _cached_count(value: Any, name: str, reasons: list[str]) -> int | None:
248
+ """The count to bill for one cached-token field, recording why when the
249
+ value supplied cannot be used.
250
+
251
+ Returns ``None`` only when nothing was given, so a caller that omits a field
252
+ keeps the behaviour it had. An unusable value bills as nothing cached, which
253
+ is the same arithmetic as before, but it now says so: the reason turns the
254
+ result ``partial``, and a caller that trusts only a fully priced figure stops
255
+ reading a silent over-bill as a price.
256
+ """
257
+ count = _token_count(value)
258
+ if count is _UNUSABLE:
259
+ reasons.append(f"unusable_{name}")
260
+ return 0
261
+ return count
262
+
263
+
196
264
  def _price_tokens(
197
265
  price: Price,
198
266
  rules: Mapping[str, Any],
199
267
  *,
268
+ at: datetime,
200
269
  input_tokens: Any,
201
270
  output_tokens: Any,
202
271
  cache_read_tokens: Any,
@@ -211,11 +280,19 @@ def _price_tokens(
211
280
  reasons: list[str] = []
212
281
  input_count = _tokens(input_tokens)
213
282
  output_count = _tokens(output_tokens)
214
- cache_read_count = _tokens(cache_read_tokens) or 0
215
- cache_write_5m_count = _tokens(cache_write_5m_tokens)
283
+ cache_read_count = _cached_count(cache_read_tokens, "cache_read_tokens", reasons) or 0
284
+ cache_write_5m_count = _cached_count(
285
+ cache_write_5m_tokens, "cache_write_5m_tokens", reasons
286
+ )
216
287
  if cache_write_5m_count is None:
217
- cache_write_5m_count = _tokens(cache_write_tokens) or 0
218
- cache_write_1h_count = _tokens(cache_write_1h_tokens) or 0
288
+ # Only an absent split falls back to the aggregate. A stated split we
289
+ # cannot read is not an invitation to substitute a different field.
290
+ cache_write_5m_count = (
291
+ _cached_count(cache_write_tokens, "cache_write_tokens", reasons) or 0
292
+ )
293
+ cache_write_1h_count = (
294
+ _cached_count(cache_write_1h_tokens, "cache_write_1h_tokens", reasons) or 0
295
+ )
219
296
  cache_write_count = cache_write_5m_count + cache_write_1h_count
220
297
  if input_count is None:
221
298
  reasons.append("missing_input_tokens")
@@ -258,6 +335,11 @@ def _price_tokens(
258
335
  output_multiplier = _decimal(
259
336
  long_context.get("output_multiplier")
260
337
  ) or Decimal("1")
338
+ # Applies to every rate on the row, cache included, and composes with a
339
+ # long-context tier rather than replacing it.
340
+ off_peak = _off_peak_multiplier(rules, at)
341
+ input_multiplier *= off_peak
342
+ output_multiplier *= off_peak
261
343
 
262
344
  cost = Decimal("0")
263
345
  if input_rate is None:
@@ -436,6 +518,7 @@ class CatalogSnapshot:
436
518
  cost, reasons = _price_tokens(
437
519
  price,
438
520
  {**price.rules, **alias.rules},
521
+ at=_coerce_datetime(at),
439
522
  input_tokens=input_tokens,
440
523
  output_tokens=output_tokens,
441
524
  cache_read_tokens=cache_read_tokens,
@@ -483,6 +566,7 @@ class CatalogSnapshot:
483
566
  cost, reasons = _price_tokens(
484
567
  resolved.price,
485
568
  resolved.rules,
569
+ at=when,
486
570
  input_tokens=input_tokens,
487
571
  output_tokens=output_tokens,
488
572
  cache_read_tokens=cache_read_tokens,
@@ -16,6 +16,10 @@ models:
16
16
  - {provider: openai, alias: gpt-5.6, channel: openai-api}
17
17
  - {provider: openai, alias: gpt-5.6-sol, channel: openai-api}
18
18
  - {provider: openai, alias: openai/gpt-5.6, channel: openai-api}
19
+ - {provider: litellm, alias: gpt-5.6, channel: openai-api}
20
+ - {provider: litellm, alias: gpt-5.6-sol, channel: openai-api}
21
+ - {provider: unknown, alias: gpt-5.6, channel: openai-api}
22
+ - {provider: unknown, alias: gpt-5.6-sol, channel: openai-api}
19
23
  - provider: openai
20
24
  alias: openai/gpt-5.6-sol
21
25
  channel: vercel-ai-gateway
@@ -88,6 +92,8 @@ models:
88
92
  publisher: openai
89
93
  aliases:
90
94
  - {provider: openai, alias: gpt-5.6-terra, channel: openai-api}
95
+ - {provider: litellm, alias: gpt-5.6-terra, channel: openai-api}
96
+ - {provider: unknown, alias: gpt-5.6-terra, channel: openai-api}
91
97
  - provider: openai
92
98
  alias: openai/gpt-5.6-terra
93
99
  channel: vercel-ai-gateway
@@ -132,6 +138,8 @@ models:
132
138
  publisher: openai
133
139
  aliases:
134
140
  - {provider: openai, alias: gpt-5.6-luna, channel: openai-api}
141
+ - {provider: litellm, alias: gpt-5.6-luna, channel: openai-api}
142
+ - {provider: unknown, alias: gpt-5.6-luna, channel: openai-api}
135
143
  - provider: openai
136
144
  alias: openai/gpt-5.6-luna
137
145
  channel: vercel-ai-gateway
@@ -202,6 +210,11 @@ models:
202
210
  aliases:
203
211
  - {provider: openai, alias: gpt-5.4-mini, channel: openai-api}
204
212
  - {provider: openai, alias: gpt-5.4-mini-2026-03-17, channel: openai-api}
213
+ - {provider: litellm, alias: gpt-5.4-mini, channel: openai-api}
214
+ - {provider: litellm, alias: gpt-5.4-mini-2026-03-17, channel: openai-api}
215
+ - {provider: openai, alias: openai/gpt-5.4-mini-2026-03-17, channel: openai-api}
216
+ - {provider: unknown, alias: gpt-5.4-mini, channel: openai-api}
217
+ - {provider: unknown, alias: gpt-5.4-mini-2026-03-17, channel: openai-api}
205
218
  - provider: openai
206
219
  alias: openai/gpt-5.4-mini
207
220
  channel: vercel-ai-gateway
@@ -233,6 +246,8 @@ models:
233
246
  - {provider: openai, alias: gpt-5.4-2026-03-05, channel: openai-api}
234
247
  - {provider: openai, alias: openai/gpt-5.4, channel: openai-api}
235
248
  - {provider: vercel, alias: openai/gpt-5.4, channel: vercel-ai-gateway}
249
+ - {provider: litellm, alias: gpt-5.4, channel: openai-api}
250
+ - {provider: unknown, alias: gpt-5.4, channel: openai-api}
236
251
  prices:
237
252
  - channel: openai-api
238
253
  region: global
@@ -259,6 +274,11 @@ models:
259
274
  aliases:
260
275
  - {provider: openai, alias: gpt-5.4-nano, channel: openai-api}
261
276
  - {provider: openai, alias: gpt-5.4-nano-2026-03-17, channel: openai-api}
277
+ - {provider: litellm, alias: gpt-5.4-nano, channel: openai-api}
278
+ - {provider: litellm, alias: gpt-5.4-nano-2026-03-17, channel: openai-api}
279
+ - {provider: openai, alias: openai/gpt-5.4-nano-2026-03-17, channel: openai-api}
280
+ - {provider: unknown, alias: gpt-5.4-nano, channel: openai-api}
281
+ - {provider: unknown, alias: gpt-5.4-nano-2026-03-17, channel: openai-api}
262
282
  - provider: openai
263
283
  alias: openai/gpt-5.4-nano
264
284
  channel: vercel-ai-gateway
@@ -289,6 +309,8 @@ models:
289
309
  - {provider: openai, alias: gpt-4o-mini, channel: openai-api}
290
310
  - {provider: openai, alias: gpt-4o-mini-2024-07-18, channel: openai-api}
291
311
  - {provider: openai, alias: openai/gpt-4o-mini, channel: openai-api}
312
+ - {provider: litellm, alias: gpt-4o-mini, channel: openai-api}
313
+ - {provider: unknown, alias: gpt-4o-mini, channel: openai-api}
292
314
  prices:
293
315
  - channel: openai-api
294
316
  region: global
@@ -308,6 +330,9 @@ models:
308
330
  - {provider: openai, alias: gpt-4o, channel: openai-api}
309
331
  - {provider: openai, alias: gpt-4o-2024-08-06, channel: openai-api}
310
332
  - {provider: openai, alias: openai/gpt-4o, channel: openai-api}
333
+ - {provider: litellm, alias: gpt-4o, channel: openai-api}
334
+ - {provider: openai, alias: gpt-4o-2024-11-20, channel: openai-api}
335
+ - {provider: unknown, alias: gpt-4o, channel: openai-api}
311
336
  prices:
312
337
  - channel: openai-api
313
338
  region: global
@@ -328,6 +353,8 @@ models:
328
353
  - {provider: openai, alias: gpt-4.1-2025-04-14, channel: openai-api}
329
354
  - {provider: openai, alias: openai/gpt-4.1, channel: openai-api}
330
355
  - {provider: vercel, alias: openai/gpt-4.1, channel: vercel-ai-gateway}
356
+ - {provider: litellm, alias: gpt-4.1, channel: openai-api}
357
+ - {provider: unknown, alias: gpt-4.1, channel: openai-api}
331
358
  prices:
332
359
  - channel: openai-api
333
360
  region: global
@@ -413,6 +440,8 @@ models:
413
440
  - {provider: bedrock, alias: us.anthropic.claude-fable-5, channel: aws-bedrock}
414
441
  - {provider: bedrock, alias: anthropic.claude-fable-5, channel: aws-bedrock}
415
442
  - {provider: vercel, alias: anthropic/claude-fable-5, channel: vercel-ai-gateway}
443
+ - {provider: litellm, alias: claude-fable-5, channel: anthropic-api}
444
+ - {provider: unknown, alias: claude-fable-5, channel: anthropic-api}
416
445
  prices:
417
446
  - channel: anthropic-api
418
447
  region: global
@@ -449,6 +478,12 @@ models:
449
478
  publisher: anthropic
450
479
  aliases:
451
480
  - {provider: anthropic, alias: claude-opus-5, channel: anthropic-api}
481
+ - {provider: anthropic, alias: anthropic/claude-opus-5-20260724, channel: anthropic-api}
482
+ - {provider: anthropic, alias: claude-opus-5-20260724, channel: anthropic-api}
483
+ - {provider: litellm, alias: claude-opus-5, channel: anthropic-api}
484
+ - {provider: litellm, alias: claude-opus-5-20260724, channel: anthropic-api}
485
+ - {provider: unknown, alias: claude-opus-5, channel: anthropic-api}
486
+ - {provider: unknown, alias: claude-opus-5-20260724, channel: anthropic-api}
452
487
  - provider: anthropic
453
488
  alias: anthropic/claude-opus-5
454
489
  channel: vercel-ai-gateway
@@ -503,6 +538,10 @@ models:
503
538
  publisher: anthropic
504
539
  aliases:
505
540
  - {provider: anthropic, alias: claude-opus-4-8, channel: anthropic-api}
541
+ - {provider: litellm, alias: claude-opus-4-8, channel: anthropic-api}
542
+ - {provider: litellm, alias: claude-opus-4.8, channel: anthropic-api}
543
+ - {provider: unknown, alias: claude-opus-4-8, channel: anthropic-api}
544
+ - {provider: unknown, alias: claude-opus-4.8, channel: anthropic-api}
506
545
  - provider: anthropic
507
546
  alias: anthropic/claude-opus-4.8
508
547
  channel: vercel-ai-gateway
@@ -532,6 +571,15 @@ models:
532
571
  publisher: anthropic
533
572
  aliases:
534
573
  - {provider: anthropic, alias: claude-opus-4-7, channel: anthropic-api}
574
+ - {provider: anthropic, alias: anthropic/claude-opus-4-7-20260416, channel: anthropic-api}
575
+ - {provider: anthropic, alias: claude-opus-4-7-20260416, channel: anthropic-api}
576
+ - {provider: anthropic, alias: claude-opus-4.7, channel: anthropic-api}
577
+ - {provider: litellm, alias: claude-opus-4-7, channel: anthropic-api}
578
+ - {provider: litellm, alias: claude-opus-4-7-20260416, channel: anthropic-api}
579
+ - {provider: litellm, alias: claude-opus-4.7, channel: anthropic-api}
580
+ - {provider: unknown, alias: claude-opus-4-7, channel: anthropic-api}
581
+ - {provider: unknown, alias: claude-opus-4-7-20260416, channel: anthropic-api}
582
+ - {provider: unknown, alias: claude-opus-4.7, channel: anthropic-api}
535
583
  # The preflight reports the provider-qualified id it captured, and traffic
536
584
  # arrives under both spellings of the minor version.
537
585
  - {provider: anthropic, alias: anthropic/claude-opus-4-7, channel: anthropic-api}
@@ -570,6 +618,16 @@ models:
570
618
  - {provider: anthropic, alias: anthropic/claude-opus-4.6, channel: anthropic-api}
571
619
  - {provider: vertex-ai, alias: claude-opus-4-6, channel: google-vertex-ai}
572
620
  - {provider: vercel, alias: anthropic/claude-opus-4.6, channel: vercel-ai-gateway}
621
+ - {provider: anthropic, alias: anthropic/claude-opus-4-6, channel: anthropic-api}
622
+ - {provider: anthropic, alias: anthropic/claude-opus-4-6-20260205, channel: anthropic-api}
623
+ - {provider: anthropic, alias: claude-opus-4-6-20260205, channel: anthropic-api}
624
+ - {provider: anthropic, alias: claude-opus-4.6, channel: anthropic-api}
625
+ - {provider: litellm, alias: claude-opus-4-6, channel: anthropic-api}
626
+ - {provider: litellm, alias: claude-opus-4-6-20260205, channel: anthropic-api}
627
+ - {provider: litellm, alias: claude-opus-4.6, channel: anthropic-api}
628
+ - {provider: unknown, alias: claude-opus-4-6, channel: anthropic-api}
629
+ - {provider: unknown, alias: claude-opus-4-6-20260205, channel: anthropic-api}
630
+ - {provider: unknown, alias: claude-opus-4.6, channel: anthropic-api}
573
631
  prices:
574
632
  - channel: anthropic-api
575
633
  region: global
@@ -606,6 +664,8 @@ models:
606
664
  publisher: anthropic
607
665
  aliases:
608
666
  - {provider: anthropic, alias: claude-sonnet-5, channel: anthropic-api}
667
+ - {provider: litellm, alias: claude-sonnet-5, channel: anthropic-api}
668
+ - {provider: unknown, alias: claude-sonnet-5, channel: anthropic-api}
609
669
  - provider: anthropic
610
670
  alias: anthropic/claude-sonnet-5
611
671
  channel: vercel-ai-gateway
@@ -650,6 +710,10 @@ models:
650
710
  aliases:
651
711
  - {provider: anthropic, alias: claude-haiku-4-5, channel: anthropic-api}
652
712
  - {provider: anthropic, alias: claude-haiku-4-5-20251001, channel: anthropic-api}
713
+ - {provider: litellm, alias: claude-haiku-4-5, channel: anthropic-api}
714
+ - {provider: litellm, alias: claude-haiku-4.5, channel: anthropic-api}
715
+ - {provider: unknown, alias: claude-haiku-4-5, channel: anthropic-api}
716
+ - {provider: unknown, alias: claude-haiku-4.5, channel: anthropic-api}
653
717
  - provider: anthropic
654
718
  alias: anthropic/claude-haiku-4.5
655
719
  channel: vercel-ai-gateway
@@ -679,6 +743,10 @@ models:
679
743
  publisher: anthropic
680
744
  aliases:
681
745
  - {provider: anthropic, alias: claude-sonnet-4-6, channel: anthropic-api}
746
+ - {provider: litellm, alias: claude-sonnet-4-6, channel: anthropic-api}
747
+ - {provider: litellm, alias: claude-sonnet-4.6, channel: anthropic-api}
748
+ - {provider: unknown, alias: claude-sonnet-4-6, channel: anthropic-api}
749
+ - {provider: unknown, alias: claude-sonnet-4.6, channel: anthropic-api}
682
750
  - provider: anthropic
683
751
  alias: anthropic/claude-sonnet-4.6
684
752
  channel: vercel-ai-gateway
@@ -745,6 +813,10 @@ models:
745
813
  - {provider: anthropic, alias: claude-sonnet-4-5-20250929, channel: anthropic-api}
746
814
  - {provider: anthropic, alias: anthropic/claude-sonnet-4.5, channel: anthropic-api}
747
815
  - {provider: vercel, alias: anthropic/claude-sonnet-4.5, channel: vercel-ai-gateway}
816
+ - {provider: litellm, alias: claude-sonnet-4-5, channel: anthropic-api}
817
+ - {provider: litellm, alias: claude-sonnet-4.5, channel: anthropic-api}
818
+ - {provider: unknown, alias: claude-sonnet-4-5, channel: anthropic-api}
819
+ - {provider: unknown, alias: claude-sonnet-4.5, channel: anthropic-api}
748
820
  prices:
749
821
  - channel: anthropic-api
750
822
  region: global
@@ -792,6 +864,12 @@ models:
792
864
  - {provider: google, alias: gemini-3.1-pro-preview, channel: google-api}
793
865
  - {provider: google, alias: models/gemini-3.1-pro-preview, channel: google-api}
794
866
  - {provider: vertex-ai, alias: gemini-3.1-pro-preview, channel: google-vertex-ai}
867
+ - {provider: google, alias: google/gemini-3-pro-preview, channel: google-api}
868
+ - {provider: google, alias: google/models/gemini-3.1-pro-preview, channel: google-api}
869
+ - {provider: litellm, alias: gemini-3.1-pro-preview, channel: google-api}
870
+ - {provider: litellm, alias: models/gemini-3.1-pro-preview, channel: google-api}
871
+ - {provider: unknown, alias: gemini-3.1-pro-preview, channel: google-api}
872
+ - {provider: unknown, alias: models/gemini-3.1-pro-preview, channel: google-api}
795
873
  - provider: google
796
874
  alias: google/gemini-3.1-pro-preview
797
875
  channel: vercel-ai-gateway
@@ -836,6 +914,8 @@ models:
836
914
  - {provider: google, alias: gemini-3.5-flash, channel: google-api}
837
915
  - {provider: google, alias: models/gemini-3.5-flash, channel: google-api}
838
916
  - {provider: google, alias: google/gemini-3.5-flash, channel: vercel-ai-gateway, rules: {"input_includes_cache_read": true, "input_includes_cache_write": true}}
917
+ - {provider: litellm, alias: gemini-3.5-flash, channel: google-api}
918
+ - {provider: unknown, alias: gemini-3.5-flash, channel: google-api}
839
919
  prices:
840
920
  # Direct API and Vertex list the same rate for this model.
841
921
  - channel: google-api
@@ -870,6 +950,12 @@ models:
870
950
  aliases:
871
951
  - {provider: google, alias: gemini-3.5-flash-lite, channel: google-api}
872
952
  - {provider: google, alias: models/gemini-3.5-flash-lite, channel: google-api}
953
+ - {provider: google, alias: google/gemini-3.5-flash-lite, channel: google-api}
954
+ - {provider: google, alias: google/models/gemini-3.5-flash-lite, channel: google-api}
955
+ - {provider: litellm, alias: gemini-3.5-flash-lite, channel: google-api}
956
+ - {provider: litellm, alias: models/gemini-3.5-flash-lite, channel: google-api}
957
+ - {provider: unknown, alias: gemini-3.5-flash-lite, channel: google-api}
958
+ - {provider: unknown, alias: models/gemini-3.5-flash-lite, channel: google-api}
873
959
  prices:
874
960
  - channel: google-api
875
961
  region: global
@@ -885,6 +971,8 @@ models:
885
971
  - {provider: google, alias: gemini-2.5-pro, channel: google-api}
886
972
  - {provider: google, alias: models/gemini-2.5-pro, channel: google-api}
887
973
  - {provider: google, alias: google/gemini-2.5-pro, channel: vercel-ai-gateway, rules: {"input_includes_cache_read": true, "input_includes_cache_write": true}}
974
+ - {provider: litellm, alias: gemini-2.5-pro, channel: google-api}
975
+ - {provider: unknown, alias: gemini-2.5-pro, channel: google-api}
888
976
  prices:
889
977
  - channel: google-api
890
978
  region: global
@@ -910,6 +998,11 @@ models:
910
998
  aliases:
911
999
  - {provider: google, alias: gemini-2.5-flash, channel: google-api}
912
1000
  - {provider: google, alias: models/gemini-2.5-flash, channel: google-api}
1001
+ - {provider: google, alias: google/models/gemini-2.5-flash, channel: google-api}
1002
+ - {provider: litellm, alias: gemini-2.5-flash, channel: google-api}
1003
+ - {provider: litellm, alias: models/gemini-2.5-flash, channel: google-api}
1004
+ - {provider: unknown, alias: gemini-2.5-flash, channel: google-api}
1005
+ - {provider: unknown, alias: models/gemini-2.5-flash, channel: google-api}
913
1006
  - provider: google
914
1007
  alias: google/gemini-2.5-flash
915
1008
  channel: vercel-ai-gateway
@@ -964,6 +1057,8 @@ models:
964
1057
  - {provider: litellm, alias: google/gemini-flash-lite-latest, channel: google-api}
965
1058
  - {provider: litellm, alias: google/models/gemini-flash-lite-latest, channel: google-api}
966
1059
  - {provider: google, alias: google/gemini-2.5-flash-lite, channel: vercel-ai-gateway, rules: {"input_includes_cache_read": true, "input_includes_cache_write": true}}
1060
+ - {provider: litellm, alias: gemini-2.5-flash-lite, channel: google-api}
1061
+ - {provider: unknown, alias: gemini-2.5-flash-lite, channel: google-api}
967
1062
  prices:
968
1063
  - channel: google-api
969
1064
  region: global
@@ -1039,6 +1134,8 @@ models:
1039
1134
  - canonical_id: meta/muse-spark-1.1
1040
1135
  publisher: meta
1041
1136
  aliases:
1137
+ - {provider: meta, alias: muse-spark-1.1, channel: meta-api}
1138
+ - {provider: unknown, alias: muse-spark-1.1, channel: meta-api}
1042
1139
  - provider: meta
1043
1140
  alias: meta/muse-spark-1.1
1044
1141
  channel: vercel-ai-gateway
@@ -1067,6 +1164,8 @@ models:
1067
1164
  - {provider: litellm, alias: mistral-large-3, channel: mistral-api}
1068
1165
  - {provider: mistral, alias: mistral-large-latest, channel: mistral-api}
1069
1166
  - {provider: mistral, alias: mistral/mistral-large-3, channel: vercel-ai-gateway, rules: {"input_includes_cache_read": true, "input_includes_cache_write": true}}
1167
+ - {provider: mistral, alias: mistral-large-3, channel: mistral-api}
1168
+ - {provider: unknown, alias: mistral-large-3, channel: mistral-api}
1070
1169
  prices:
1071
1170
  - channel: aws-bedrock
1072
1171
  region: us-west-2
@@ -1123,6 +1222,11 @@ models:
1123
1222
  publisher: deepseek
1124
1223
  aliases:
1125
1224
  - {provider: deepseek, alias: deepseek-v4-flash, channel: deepseek-api}
1225
+ - {provider: deepseek, alias: deepseek/deepseek/deepseek-v4-flash, channel: deepseek-api}
1226
+ - {provider: litellm, alias: deepseek-v4-flash, channel: deepseek-api}
1227
+ - {provider: litellm, alias: deepseek/deepseek-v4-flash, channel: deepseek-api}
1228
+ - {provider: unknown, alias: deepseek-v4-flash, channel: deepseek-api}
1229
+ - {provider: unknown, alias: deepseek/deepseek-v4-flash, channel: deepseek-api}
1126
1230
  - provider: deepseek
1127
1231
  alias: deepseek/deepseek-v4-flash
1128
1232
  channel: vercel-ai-gateway
@@ -1131,12 +1235,28 @@ models:
1131
1235
  - channel: deepseek-api
1132
1236
  region: global
1133
1237
  effective_from: "2026-04-24"
1238
+ effective_to: "2026-09-10T04:00:00+00:00"
1134
1239
  input_per_mtok: 0.14
1135
1240
  output_per_mtok: 0.28
1136
1241
  cache_read_per_mtok: 0.0028
1137
1242
  rules:
1138
1243
  input_includes_cache_read: true
1139
1244
  source_url: https://api-docs.deepseek.com/quick_start/pricing/
1245
+ # This name is retired but still accepted, and billed at the Flash rate.
1246
+ - channel: deepseek-api
1247
+ region: global
1248
+ effective_from: "2026-09-10T04:00:00+00:00"
1249
+ input_per_mtok: 0.30
1250
+ output_per_mtok: 1.20
1251
+ cache_read_per_mtok: 0.006
1252
+ rules:
1253
+ input_includes_cache_read: true
1254
+ # Peak rate; halved outside the window. Footnote (3) on the source.
1255
+ off_peak_discount:
1256
+ multiplier: 0.5
1257
+ peak_hours_utc: [[1, 4], [6, 10]]
1258
+ peak_weekdays_only: true
1259
+ source_url: https://api-docs.deepseek.com/quick_start/pricing/
1140
1260
  - channel: vercel-ai-gateway
1141
1261
  region: global
1142
1262
  effective_from: "2026-04-24"
@@ -1157,6 +1277,11 @@ models:
1157
1277
  publisher: deepseek
1158
1278
  aliases:
1159
1279
  - {provider: deepseek, alias: deepseek-v4-pro, channel: deepseek-api}
1280
+ - {provider: deepseek, alias: deepseek/deepseek/deepseek-v4-pro, channel: deepseek-api}
1281
+ - {provider: litellm, alias: deepseek-v4-pro, channel: deepseek-api}
1282
+ - {provider: litellm, alias: deepseek/deepseek-v4-pro, channel: deepseek-api}
1283
+ - {provider: unknown, alias: deepseek-v4-pro, channel: deepseek-api}
1284
+ - {provider: unknown, alias: deepseek/deepseek-v4-pro, channel: deepseek-api}
1160
1285
  - provider: deepseek
1161
1286
  alias: deepseek/deepseek-v4-pro
1162
1287
  channel: vercel-ai-gateway
@@ -1165,12 +1290,27 @@ models:
1165
1290
  - channel: deepseek-api
1166
1291
  region: global
1167
1292
  effective_from: "2026-04-24"
1293
+ effective_to: "2026-09-10T04:00:00+00:00"
1168
1294
  input_per_mtok: 0.435
1169
1295
  output_per_mtok: 0.87
1170
1296
  cache_read_per_mtok: 0.003625
1171
1297
  rules:
1172
1298
  input_includes_cache_read: true
1173
1299
  source_url: https://api-docs.deepseek.com/quick_start/pricing/
1300
+ - channel: deepseek-api
1301
+ region: global
1302
+ effective_from: "2026-09-10T04:00:00+00:00"
1303
+ input_per_mtok: 1.32
1304
+ output_per_mtok: 3.96
1305
+ cache_read_per_mtok: 0.044
1306
+ rules:
1307
+ input_includes_cache_read: true
1308
+ # Peak rate; halved outside the window. Footnote (3) on the source.
1309
+ off_peak_discount:
1310
+ multiplier: 0.5
1311
+ peak_hours_utc: [[1, 4], [6, 10]]
1312
+ peak_weekdays_only: true
1313
+ source_url: https://api-docs.deepseek.com/quick_start/pricing/
1174
1314
  - channel: vercel-ai-gateway
1175
1315
  region: global
1176
1316
  effective_from: "2026-04-24"
@@ -1195,6 +1335,12 @@ models:
1195
1335
  - {provider: x-ai, alias: grok-latest, channel: xai-api}
1196
1336
  - {provider: bedrock, alias: xai.grok-4.3, channel: aws-bedrock}
1197
1337
  - {provider: vercel, alias: spacexai/grok-4.3, channel: vercel-ai-gateway}
1338
+ - {provider: litellm, alias: grok-4.3, channel: xai-api}
1339
+ - {provider: litellm, alias: grok-4.3-latest, channel: xai-api}
1340
+ - {provider: unknown, alias: grok-4.3, channel: xai-api}
1341
+ - {provider: unknown, alias: grok-4.3-latest, channel: xai-api}
1342
+ - {provider: x-ai, alias: xai/grok-4.3, channel: xai-api}
1343
+ - {provider: x-ai, alias: xai/grok-4.3-latest, channel: xai-api}
1198
1344
  prices:
1199
1345
  - channel: xai-api
1200
1346
  region: global
@@ -1233,6 +1379,10 @@ models:
1233
1379
  publisher: perplexity
1234
1380
  aliases:
1235
1381
  - {provider: perplexity-ai, alias: sonar, channel: perplexity-api}
1382
+ - {provider: litellm, alias: perplexity/sonar, channel: perplexity-api}
1383
+ - {provider: litellm, alias: sonar, channel: perplexity-api}
1384
+ - {provider: perplexity-ai, alias: perplexity/sonar, channel: perplexity-api}
1385
+ - {provider: unknown, alias: sonar, channel: perplexity-api}
1236
1386
  prices:
1237
1387
  - channel: perplexity-api
1238
1388
  region: global
@@ -1247,6 +1397,9 @@ models:
1247
1397
  publisher: openai
1248
1398
  aliases:
1249
1399
  - {provider: openai, alias: gpt-5-mini, channel: openai-api}
1400
+ - {provider: litellm, alias: gpt-5-mini, channel: openai-api}
1401
+ - {provider: openai, alias: gpt-5-mini-2025-08-07, channel: openai-api}
1402
+ - {provider: unknown, alias: gpt-5-mini, channel: openai-api}
1250
1403
  - provider: openai
1251
1404
  alias: openai/gpt-5-mini
1252
1405
  channel: vercel-ai-gateway
@@ -1299,6 +1452,12 @@ models:
1299
1452
  publisher: google
1300
1453
  aliases:
1301
1454
  - {provider: google, alias: gemini-3.6-flash, channel: google-api}
1455
+ - {provider: google, alias: google/models/gemini-3.6-flash, channel: google-api}
1456
+ - {provider: google, alias: models/gemini-3.6-flash, channel: google-api}
1457
+ - {provider: litellm, alias: gemini-3.6-flash, channel: google-api}
1458
+ - {provider: litellm, alias: models/gemini-3.6-flash, channel: google-api}
1459
+ - {provider: unknown, alias: gemini-3.6-flash, channel: google-api}
1460
+ - {provider: unknown, alias: models/gemini-3.6-flash, channel: google-api}
1302
1461
  - provider: google
1303
1462
  alias: google/gemini-3.6-flash
1304
1463
  channel: vercel-ai-gateway
@@ -1347,6 +1506,10 @@ models:
1347
1506
  - canonical_id: google/gemini-3.7-flash
1348
1507
  publisher: google
1349
1508
  aliases:
1509
+ - {provider: litellm, alias: gemini-3.7-flash, channel: google-api}
1510
+ - {provider: litellm, alias: models/gemini-3.7-flash, channel: google-api}
1511
+ - {provider: unknown, alias: gemini-3.7-flash, channel: google-api}
1512
+ - {provider: unknown, alias: models/gemini-3.7-flash, channel: google-api}
1350
1513
  - provider: google
1351
1514
  alias: google/gemini-3.7-flash
1352
1515
  channel: vercel-ai-gateway
@@ -1449,11 +1612,28 @@ models:
1449
1612
  - canonical_id: deepseek/deepseek-v4.1-flash
1450
1613
  publisher: deepseek
1451
1614
  aliases:
1615
+ - {provider: deepseek, alias: deepseek-flash, channel: deepseek-api}
1616
+ - {provider: litellm, alias: deepseek-flash, channel: deepseek-api}
1617
+ - {provider: unknown, alias: deepseek-flash, channel: deepseek-api}
1452
1618
  - provider: deepseek
1453
1619
  alias: deepseek/deepseek-v4.1-flash
1454
1620
  channel: vercel-ai-gateway
1455
1621
  rules: {input_includes_cache_read: true}
1456
1622
  prices:
1623
+ - channel: deepseek-api
1624
+ region: global
1625
+ effective_from: "2026-09-10T04:00:00+00:00"
1626
+ input_per_mtok: 0.30
1627
+ output_per_mtok: 1.20
1628
+ cache_read_per_mtok: 0.006
1629
+ rules:
1630
+ input_includes_cache_read: true
1631
+ # Peak rate; halved outside the window. Footnote (3) on the source.
1632
+ off_peak_discount:
1633
+ multiplier: 0.5
1634
+ peak_hours_utc: [[1, 4], [6, 10]]
1635
+ peak_weekdays_only: true
1636
+ source_url: https://api-docs.deepseek.com/quick_start/pricing/
1457
1637
  - channel: vercel-ai-gateway
1458
1638
  region: global
1459
1639
  effective_from: "2026-09-08"
@@ -1497,6 +1677,10 @@ models:
1497
1677
  - canonical_id: zai/glm-5.2
1498
1678
  publisher: zai
1499
1679
  aliases:
1680
+ - {provider: unknown, alias: glm-5.2, channel: zai-api}
1681
+ - {provider: unknown, alias: glm-5p2, channel: zai-api}
1682
+ - {provider: zai, alias: glm-5.2, channel: zai-api}
1683
+ - {provider: zai, alias: glm-5p2, channel: zai-api}
1500
1684
  - provider: zai
1501
1685
  alias: zai/glm-5.2
1502
1686
  channel: vercel-ai-gateway
@@ -1523,6 +1707,8 @@ models:
1523
1707
  - canonical_id: moonshotai/kimi-k3
1524
1708
  publisher: moonshotai
1525
1709
  aliases:
1710
+ - {provider: moonshotai, alias: kimi-k3, channel: moonshot-api}
1711
+ - {provider: unknown, alias: kimi-k3, channel: moonshot-api}
1526
1712
  - provider: moonshotai
1527
1713
  alias: moonshotai/kimi-k3
1528
1714
  channel: vercel-ai-gateway
@@ -1580,6 +1766,8 @@ models:
1580
1766
  - canonical_id: minimax/minimax-m3
1581
1767
  publisher: minimax
1582
1768
  aliases:
1769
+ - {provider: minimax, alias: minimax-m3, channel: minimax-api}
1770
+ - {provider: unknown, alias: minimax-m3, channel: minimax-api}
1583
1771
  - provider: minimax
1584
1772
  alias: minimax/minimax-m3
1585
1773
  channel: vercel-ai-gateway
@@ -1690,6 +1878,10 @@ models:
1690
1878
  - canonical_id: xai/grok-4.6
1691
1879
  publisher: xai
1692
1880
  aliases:
1881
+ - {provider: unknown, alias: grok-4.6, channel: xai-api}
1882
+ - {provider: unknown, alias: grok-4.6-latest, channel: xai-api}
1883
+ - {provider: x-ai, alias: grok-4.6, channel: xai-api}
1884
+ - {provider: x-ai, alias: grok-4.6-latest, channel: xai-api}
1693
1885
  - provider: xai
1694
1886
  alias: spacexai/grok-4.6
1695
1887
  channel: vercel-ai-gateway
@@ -1733,6 +1925,7 @@ models:
1733
1925
  aliases:
1734
1926
  - {provider: google, alias: gemini-3-flash-preview, channel: google-api}
1735
1927
  - {provider: google, alias: models/gemini-3-flash-preview, channel: google-api}
1928
+ - {provider: google, alias: google/gemini-3-flash-preview, channel: google-api}
1736
1929
  prices:
1737
1930
  - channel: google-api
1738
1931
  region: global
@@ -1754,6 +1947,8 @@ models:
1754
1947
  - {provider: google, alias: models/gemini-3.1-flash-lite, channel: google-api}
1755
1948
  - {provider: google, alias: gemini-3.1-flash-lite-preview, channel: google-api}
1756
1949
  - {provider: google, alias: google/gemini-3.1-flash-lite, channel: vercel-ai-gateway, rules: {"input_includes_cache_read": true, "input_includes_cache_write": true}}
1950
+ - {provider: litellm, alias: gemini-3.1-flash-lite, channel: google-api}
1951
+ - {provider: unknown, alias: gemini-3.1-flash-lite, channel: google-api}
1757
1952
  prices:
1758
1953
  - channel: google-api
1759
1954
  region: global
@@ -1930,6 +2125,8 @@ models:
1930
2125
  aliases:
1931
2126
  - {provider: alibaba, alias: alibaba/qwen3.7-max, channel: alibaba-api}
1932
2127
  - {provider: alibaba, alias: qwen3.7-max, channel: alibaba-api}
2128
+ - {provider: litellm, alias: qwen3.7-max, channel: alibaba-api}
2129
+ - {provider: unknown, alias: qwen3.7-max, channel: alibaba-api}
1933
2130
  prices:
1934
2131
  - channel: alibaba-api
1935
2132
  region: global
@@ -1944,6 +2141,8 @@ models:
1944
2141
  aliases:
1945
2142
  - {provider: alibaba, alias: qwen3.7-plus, channel: alibaba-api}
1946
2143
  - {provider: alibaba, alias: alibaba/qwen3.7-plus, channel: vercel-ai-gateway, rules: {"input_includes_cache_read": true, "input_includes_cache_write": true}}
2144
+ - {provider: litellm, alias: qwen3.7-plus, channel: alibaba-api}
2145
+ - {provider: unknown, alias: qwen3.7-plus, channel: alibaba-api}
1947
2146
  prices:
1948
2147
  - channel: alibaba-api
1949
2148
  region: global
@@ -1969,6 +2168,8 @@ models:
1969
2168
  - {provider: alibaba, alias: alibaba/qwen3.8-max, channel: alibaba-api}
1970
2169
  - {provider: alibaba, alias: qwen3.8-max, channel: alibaba-api}
1971
2170
  - {provider: vercel, alias: alibaba/qwen3.8-max, channel: vercel-ai-gateway}
2171
+ - {provider: litellm, alias: qwen3.8-max, channel: alibaba-api}
2172
+ - {provider: unknown, alias: qwen3.8-max, channel: alibaba-api}
1972
2173
  prices:
1973
2174
  - channel: alibaba-api
1974
2175
  region: global
@@ -1988,6 +2189,14 @@ models:
1988
2189
  - canonical_id: amazon/nova-2-lite
1989
2190
  publisher: amazon
1990
2191
  aliases:
2192
+ - {provider: amazon, alias: amazon-nova/nova-2-lite, channel: aws-bedrock}
2193
+ - {provider: amazon, alias: amazon/amazon-nova/nova-2-lite, channel: aws-bedrock}
2194
+ - {provider: amazon, alias: amazon/nova-2-lite, channel: aws-bedrock}
2195
+ - {provider: amazon, alias: nova-2-lite, channel: aws-bedrock}
2196
+ - {provider: litellm, alias: amazon-nova/nova-2-lite, channel: aws-bedrock}
2197
+ - {provider: litellm, alias: nova-2-lite, channel: aws-bedrock}
2198
+ - {provider: unknown, alias: amazon-nova/nova-2-lite, channel: aws-bedrock}
2199
+ - {provider: unknown, alias: nova-2-lite, channel: aws-bedrock}
1991
2200
  # Bedrock's global inference profile bills at standard / 1.1 on every
1992
2201
  # dimension. Every other prefix, and the bare id, is the higher tier.
1993
2202
  - {provider: bedrock, alias: global.amazon.nova-2-lite-v1:0, channel: aws-bedrock}
@@ -2021,6 +2230,14 @@ models:
2021
2230
  - canonical_id: amazon/nova-lite
2022
2231
  publisher: amazon
2023
2232
  aliases:
2233
+ - {provider: amazon, alias: amazon/nova-lite, channel: aws-bedrock}
2234
+ - {provider: amazon, alias: amazon/nova-lite-v1, channel: aws-bedrock}
2235
+ - {provider: amazon, alias: nova-lite, channel: aws-bedrock}
2236
+ - {provider: amazon, alias: nova-lite-v1, channel: aws-bedrock}
2237
+ - {provider: litellm, alias: nova-lite, channel: aws-bedrock}
2238
+ - {provider: litellm, alias: nova-lite-v1, channel: aws-bedrock}
2239
+ - {provider: unknown, alias: nova-lite, channel: aws-bedrock}
2240
+ - {provider: unknown, alias: nova-lite-v1, channel: aws-bedrock}
2024
2241
  # No global inference profile exists for this model, so every
2025
2242
  # prefix shares one rate.
2026
2243
  - {provider: bedrock, alias: amazon.nova-lite-v1:0, channel: aws-bedrock}
@@ -2037,6 +2254,14 @@ models:
2037
2254
  - canonical_id: amazon/nova-micro
2038
2255
  publisher: amazon
2039
2256
  aliases:
2257
+ - {provider: amazon, alias: amazon/nova-micro, channel: aws-bedrock}
2258
+ - {provider: amazon, alias: amazon/nova-micro-v1, channel: aws-bedrock}
2259
+ - {provider: amazon, alias: nova-micro, channel: aws-bedrock}
2260
+ - {provider: amazon, alias: nova-micro-v1, channel: aws-bedrock}
2261
+ - {provider: litellm, alias: nova-micro, channel: aws-bedrock}
2262
+ - {provider: litellm, alias: nova-micro-v1, channel: aws-bedrock}
2263
+ - {provider: unknown, alias: nova-micro, channel: aws-bedrock}
2264
+ - {provider: unknown, alias: nova-micro-v1, channel: aws-bedrock}
2040
2265
  # No global inference profile exists for this model, so every
2041
2266
  # prefix shares one rate.
2042
2267
  - {provider: bedrock, alias: amazon.nova-micro-v1:0, channel: aws-bedrock}
@@ -2053,6 +2278,18 @@ models:
2053
2278
  - canonical_id: amazon/nova-pro
2054
2279
  publisher: amazon
2055
2280
  aliases:
2281
+ - {provider: amazon, alias: amazon-nova/nova-pro-v1, channel: aws-bedrock}
2282
+ - {provider: amazon, alias: amazon/amazon-nova/nova-pro-v1, channel: aws-bedrock}
2283
+ - {provider: amazon, alias: amazon/nova-pro, channel: aws-bedrock}
2284
+ - {provider: amazon, alias: amazon/nova-pro-v1, channel: aws-bedrock}
2285
+ - {provider: amazon, alias: nova-pro, channel: aws-bedrock}
2286
+ - {provider: amazon, alias: nova-pro-v1, channel: aws-bedrock}
2287
+ - {provider: litellm, alias: amazon-nova/nova-pro-v1, channel: aws-bedrock}
2288
+ - {provider: litellm, alias: nova-pro, channel: aws-bedrock}
2289
+ - {provider: litellm, alias: nova-pro-v1, channel: aws-bedrock}
2290
+ - {provider: unknown, alias: amazon-nova/nova-pro-v1, channel: aws-bedrock}
2291
+ - {provider: unknown, alias: nova-pro, channel: aws-bedrock}
2292
+ - {provider: unknown, alias: nova-pro-v1, channel: aws-bedrock}
2056
2293
  # No global inference profile exists for this model, so every
2057
2294
  # prefix shares one rate.
2058
2295
  - {provider: bedrock, alias: amazon.nova-pro-v1:0, channel: aws-bedrock}
@@ -2092,6 +2329,10 @@ models:
2092
2329
  - {provider: anthropic, alias: anthropic/claude-mythos-preview, channel: anthropic-api}
2093
2330
  - {provider: anthropic, alias: claude-mythos-5, channel: anthropic-api}
2094
2331
  - {provider: anthropic, alias: claude-mythos-preview, channel: anthropic-api}
2332
+ - {provider: litellm, alias: claude-mythos-5, channel: anthropic-api}
2333
+ - {provider: litellm, alias: claude-mythos-preview, channel: anthropic-api}
2334
+ - {provider: unknown, alias: claude-mythos-5, channel: anthropic-api}
2335
+ - {provider: unknown, alias: claude-mythos-preview, channel: anthropic-api}
2095
2336
  prices:
2096
2337
  - channel: anthropic-api
2097
2338
  region: global
@@ -2113,6 +2354,12 @@ models:
2113
2354
  - {provider: anthropic, alias: claude-4-opus-20250514, channel: anthropic-api}
2114
2355
  - {provider: anthropic, alias: claude-opus-4, channel: anthropic-api}
2115
2356
  - {provider: anthropic, alias: claude-opus-4-20250514, channel: anthropic-api}
2357
+ - {provider: litellm, alias: claude-4-opus-20250514, channel: anthropic-api}
2358
+ - {provider: litellm, alias: claude-opus-4, channel: anthropic-api}
2359
+ - {provider: litellm, alias: claude-opus-4-20250514, channel: anthropic-api}
2360
+ - {provider: unknown, alias: claude-4-opus-20250514, channel: anthropic-api}
2361
+ - {provider: unknown, alias: claude-opus-4, channel: anthropic-api}
2362
+ - {provider: unknown, alias: claude-opus-4-20250514, channel: anthropic-api}
2116
2363
  prices:
2117
2364
  - channel: anthropic-api
2118
2365
  region: global
@@ -2134,6 +2381,12 @@ models:
2134
2381
  - {provider: anthropic, alias: claude-opus-4-1, channel: anthropic-api}
2135
2382
  - {provider: anthropic, alias: claude-opus-4.1, channel: anthropic-api}
2136
2383
  - {provider: anthropic, alias: claude-opus-4-1-20250805, channel: anthropic-api}
2384
+ - {provider: litellm, alias: claude-opus-4-1, channel: anthropic-api}
2385
+ - {provider: litellm, alias: claude-opus-4-1-20250805, channel: anthropic-api}
2386
+ - {provider: litellm, alias: claude-opus-4.1, channel: anthropic-api}
2387
+ - {provider: unknown, alias: claude-opus-4-1, channel: anthropic-api}
2388
+ - {provider: unknown, alias: claude-opus-4-1-20250805, channel: anthropic-api}
2389
+ - {provider: unknown, alias: claude-opus-4.1, channel: anthropic-api}
2137
2390
  prices:
2138
2391
  - channel: anthropic-api
2139
2392
  region: global
@@ -2178,6 +2431,8 @@ models:
2178
2431
  - {provider: anthropic, alias: anthropic/claude-opus-5-fast, channel: anthropic-api}
2179
2432
  - {provider: anthropic, alias: claude-opus-5-fast, channel: anthropic-api}
2180
2433
  - {provider: vercel, alias: anthropic/claude-opus-5-fast, channel: vercel-ai-gateway}
2434
+ - {provider: litellm, alias: claude-opus-5-fast, channel: anthropic-api}
2435
+ - {provider: unknown, alias: claude-opus-5-fast, channel: anthropic-api}
2181
2436
  prices:
2182
2437
  - channel: anthropic-api
2183
2438
  region: global
@@ -2223,6 +2478,14 @@ models:
2223
2478
  publisher: google
2224
2479
  aliases:
2225
2480
  - {provider: vercel, alias: google/gemini-3-flash, channel: vercel-ai-gateway}
2481
+ - {provider: google, alias: gemini-3-flash, channel: vercel-ai-gateway}
2482
+ - {provider: google, alias: google/gemini-3-flash, channel: vercel-ai-gateway}
2483
+ - {provider: google, alias: google/models/gemini-3-flash, channel: vercel-ai-gateway}
2484
+ - {provider: google, alias: models/gemini-3-flash, channel: vercel-ai-gateway}
2485
+ - {provider: litellm, alias: gemini-3-flash, channel: vercel-ai-gateway}
2486
+ - {provider: litellm, alias: models/gemini-3-flash, channel: vercel-ai-gateway}
2487
+ - {provider: unknown, alias: gemini-3-flash, channel: vercel-ai-gateway}
2488
+ - {provider: unknown, alias: models/gemini-3-flash, channel: vercel-ai-gateway}
2226
2489
  prices:
2227
2490
  - channel: vercel-ai-gateway
2228
2491
  region: global
@@ -2237,6 +2500,8 @@ models:
2237
2500
  - {provider: litellm, alias: muse-spark-1.2, channel: meta-api}
2238
2501
  - {provider: meta, alias: meta/muse-spark-1.2, channel: meta-api}
2239
2502
  - {provider: vercel, alias: meta/muse-spark-1.2, channel: vercel-ai-gateway}
2503
+ - {provider: meta, alias: muse-spark-1.2, channel: meta-api}
2504
+ - {provider: unknown, alias: muse-spark-1.2, channel: meta-api}
2240
2505
  prices:
2241
2506
  - channel: meta-api
2242
2507
  region: global
@@ -2269,6 +2534,8 @@ models:
2269
2534
  - {provider: litellm, alias: minimax-m2.7, channel: minimax-api}
2270
2535
  - {provider: minimax, alias: minimax-m2p7, channel: minimax-api}
2271
2536
  - {provider: minimax, alias: minimax/minimax-m2.7, channel: vercel-ai-gateway, rules: {"input_includes_cache_read": true, "input_includes_cache_write": true}}
2537
+ - {provider: minimax, alias: minimax-m2.7, channel: minimax-api}
2538
+ - {provider: unknown, alias: minimax-m2.7, channel: minimax-api}
2272
2539
  prices:
2273
2540
  - channel: minimax-api
2274
2541
  region: global
@@ -2295,6 +2562,12 @@ models:
2295
2562
  - {provider: mistral, alias: mistral/mistral-medium-2604, channel: mistral-api}
2296
2563
  - {provider: mistral, alias: mistral/mistral-medium-3.5, channel: mistral-api}
2297
2564
  - {provider: mistral, alias: mistral/mistral-medium-latest, channel: mistral-api}
2565
+ - {provider: mistral, alias: mistral-medium-2604, channel: mistral-api}
2566
+ - {provider: mistral, alias: mistral-medium-3.5, channel: mistral-api}
2567
+ - {provider: mistral, alias: mistral-medium-latest, channel: mistral-api}
2568
+ - {provider: unknown, alias: mistral-medium-2604, channel: mistral-api}
2569
+ - {provider: unknown, alias: mistral-medium-3.5, channel: mistral-api}
2570
+ - {provider: unknown, alias: mistral-medium-latest, channel: mistral-api}
2298
2571
  prices:
2299
2572
  - channel: mistral-api
2300
2573
  region: global
@@ -2311,6 +2584,12 @@ models:
2311
2584
  - {provider: mistral, alias: mistral/mistral-small-2603, channel: mistral-api}
2312
2585
  - {provider: mistral, alias: mistral/mistral-small-4, channel: mistral-api}
2313
2586
  - {provider: mistral, alias: mistral/mistral-small-latest, channel: mistral-api}
2587
+ - {provider: mistral, alias: mistral-small-2603, channel: mistral-api}
2588
+ - {provider: mistral, alias: mistral-small-4, channel: mistral-api}
2589
+ - {provider: mistral, alias: mistral-small-latest, channel: mistral-api}
2590
+ - {provider: unknown, alias: mistral-small-2603, channel: mistral-api}
2591
+ - {provider: unknown, alias: mistral-small-4, channel: mistral-api}
2592
+ - {provider: unknown, alias: mistral-small-latest, channel: mistral-api}
2314
2593
  prices:
2315
2594
  - channel: mistral-api
2316
2595
  region: global
@@ -2324,6 +2603,8 @@ models:
2324
2603
  - {provider: litellm, alias: gpt-5, channel: openai-api, rules: {"input_includes_cache_read": true}}
2325
2604
  - {provider: openai, alias: gpt-5-2025-08-07, channel: openai-api, rules: {"input_includes_cache_read": true}}
2326
2605
  - {provider: openai, alias: openai/gpt-5, channel: openai-api, rules: {"input_includes_cache_read": true}}
2606
+ - {provider: openai, alias: gpt-5, channel: openai-api, rules: {"input_includes_cache_read": true}}
2607
+ - {provider: unknown, alias: gpt-5, channel: openai-api, rules: {"input_includes_cache_read": true}}
2327
2608
  prices:
2328
2609
  - channel: openai-api
2329
2610
  region: global
@@ -2339,6 +2620,8 @@ models:
2339
2620
  aliases:
2340
2621
  - {provider: litellm, alias: gpt-5.3-codex, channel: openai-api}
2341
2622
  - {provider: openai, alias: openai/gpt-5.3-codex, channel: openai-api}
2623
+ - {provider: openai, alias: gpt-5.3-codex, channel: openai-api}
2624
+ - {provider: unknown, alias: gpt-5.3-codex, channel: openai-api}
2342
2625
  prices:
2343
2626
  - channel: openai-api
2344
2627
  region: global
@@ -2354,6 +2637,10 @@ models:
2354
2637
  - {provider: litellm, alias: gpt-5.4-pro-2026-03-05, channel: openai-api}
2355
2638
  - {provider: openai, alias: openai/gpt-5.4-pro, channel: openai-api}
2356
2639
  - {provider: openai, alias: openai/gpt-5.4-pro-2026-03-05, channel: openai-api}
2640
+ - {provider: openai, alias: gpt-5.4-pro, channel: openai-api}
2641
+ - {provider: openai, alias: gpt-5.4-pro-2026-03-05, channel: openai-api}
2642
+ - {provider: unknown, alias: gpt-5.4-pro, channel: openai-api}
2643
+ - {provider: unknown, alias: gpt-5.4-pro-2026-03-05, channel: openai-api}
2357
2644
  prices:
2358
2645
  - channel: openai-api
2359
2646
  region: global
@@ -2371,6 +2658,10 @@ models:
2371
2658
  - {provider: openai, alias: openai/gpt-5.5, channel: openai-api}
2372
2659
  - {provider: openai, alias: openai/gpt-5.5-2026-04-23, channel: openai-api}
2373
2660
  - {provider: vercel, alias: openai/gpt-5.5, channel: vercel-ai-gateway}
2661
+ - {provider: openai, alias: gpt-5.5, channel: openai-api}
2662
+ - {provider: openai, alias: gpt-5.5-2026-04-23, channel: openai-api}
2663
+ - {provider: unknown, alias: gpt-5.5, channel: openai-api}
2664
+ - {provider: unknown, alias: gpt-5.5-2026-04-23, channel: openai-api}
2374
2665
  prices:
2375
2666
  - channel: openai-api
2376
2667
  region: global
@@ -2396,6 +2687,10 @@ models:
2396
2687
  - {provider: openai, alias: openai/gpt-5.5-pro, channel: openai-api}
2397
2688
  - {provider: openai, alias: openai/gpt-5.5-pro-2026-04-23, channel: openai-api}
2398
2689
  - {provider: vercel, alias: openai/gpt-5.5-pro, channel: vercel-ai-gateway}
2690
+ - {provider: openai, alias: gpt-5.5-pro, channel: openai-api}
2691
+ - {provider: openai, alias: gpt-5.5-pro-2026-04-23, channel: openai-api}
2692
+ - {provider: unknown, alias: gpt-5.5-pro, channel: openai-api}
2693
+ - {provider: unknown, alias: gpt-5.5-pro-2026-04-23, channel: openai-api}
2399
2694
  prices:
2400
2695
  - channel: openai-api
2401
2696
  region: global
@@ -2416,6 +2711,8 @@ models:
2416
2711
  aliases:
2417
2712
  - {provider: litellm, alias: gpt-5.6-cyber, channel: openai-api}
2418
2713
  - {provider: openai, alias: openai/gpt-5.6-cyber, channel: openai-api}
2714
+ - {provider: openai, alias: gpt-5.6-cyber, channel: openai-api}
2715
+ - {provider: unknown, alias: gpt-5.6-cyber, channel: openai-api}
2419
2716
  prices:
2420
2717
  - channel: openai-api
2421
2718
  region: global
@@ -2431,6 +2728,8 @@ models:
2431
2728
  - {provider: litellm, alias: o4-mini, channel: openai-api}
2432
2729
  - {provider: openai, alias: o4-mini-2025-04-16, channel: openai-api}
2433
2730
  - {provider: openai, alias: openai/o4-mini, channel: vercel-ai-gateway, rules: {"input_includes_cache_read": true, "input_includes_cache_write": true}}
2731
+ - {provider: openai, alias: o4-mini, channel: openai-api}
2732
+ - {provider: unknown, alias: o4-mini, channel: openai-api}
2434
2733
  prices:
2435
2734
  - channel: openai-api
2436
2735
  region: global
@@ -2456,6 +2755,10 @@ models:
2456
2755
  - {provider: litellm, alias: grok-4.20-non-reasoning, channel: xai-api}
2457
2756
  - {provider: x-ai, alias: xai/grok-4.20-0309-non-reasoning, channel: xai-api}
2458
2757
  - {provider: x-ai, alias: xai/grok-4.20-non-reasoning, channel: xai-api}
2758
+ - {provider: unknown, alias: grok-4.20-0309-non-reasoning, channel: xai-api}
2759
+ - {provider: unknown, alias: grok-4.20-non-reasoning, channel: xai-api}
2760
+ - {provider: x-ai, alias: grok-4.20-0309-non-reasoning, channel: xai-api}
2761
+ - {provider: x-ai, alias: grok-4.20-non-reasoning, channel: xai-api}
2459
2762
  prices:
2460
2763
  - channel: vercel-ai-gateway
2461
2764
  region: global
@@ -2483,6 +2786,10 @@ models:
2483
2786
  - {provider: litellm, alias: grok-4.20-reasoning, channel: xai-api}
2484
2787
  - {provider: x-ai, alias: xai/grok-4.20-0309-reasoning, channel: xai-api}
2485
2788
  - {provider: x-ai, alias: xai/grok-4.20-reasoning, channel: xai-api}
2789
+ - {provider: unknown, alias: grok-4.20-0309-reasoning, channel: xai-api}
2790
+ - {provider: unknown, alias: grok-4.20-reasoning, channel: xai-api}
2791
+ - {provider: x-ai, alias: grok-4.20-0309-reasoning, channel: xai-api}
2792
+ - {provider: x-ai, alias: grok-4.20-reasoning, channel: xai-api}
2486
2793
  prices:
2487
2794
  - channel: vercel-ai-gateway
2488
2795
  region: global
@@ -2509,6 +2816,10 @@ models:
2509
2816
  - {provider: litellm, alias: grok-4.5-latest, channel: xai-api}
2510
2817
  - {provider: x-ai, alias: xai/grok-4.5, channel: xai-api}
2511
2818
  - {provider: x-ai, alias: xai/grok-4.5-latest, channel: xai-api}
2819
+ - {provider: unknown, alias: grok-4.5, channel: xai-api}
2820
+ - {provider: unknown, alias: grok-4.5-latest, channel: xai-api}
2821
+ - {provider: x-ai, alias: grok-4.5, channel: xai-api}
2822
+ - {provider: x-ai, alias: grok-4.5-latest, channel: xai-api}
2512
2823
  prices:
2513
2824
  - channel: xai-api
2514
2825
  region: global
@@ -2527,6 +2838,10 @@ models:
2527
2838
  - {provider: litellm, alias: glm-5p1, channel: zai-api}
2528
2839
  - {provider: zai, alias: zai/glm-5.1, channel: zai-api}
2529
2840
  - {provider: zai, alias: zai/glm-5p1, channel: zai-api}
2841
+ - {provider: unknown, alias: glm-5.1, channel: zai-api}
2842
+ - {provider: unknown, alias: glm-5p1, channel: zai-api}
2843
+ - {provider: zai, alias: glm-5.1, channel: zai-api}
2844
+ - {provider: zai, alias: glm-5p1, channel: zai-api}
2530
2845
  prices:
2531
2846
  - channel: vercel-ai-gateway
2532
2847
  region: global
@@ -15,7 +15,7 @@ from .catalog import (
15
15
  CostResult,
16
16
  Price,
17
17
  _decimal,
18
- _normalize_provider,
18
+ normalize_provider,
19
19
  )
20
20
  from .retrieval import RetrievalCatalog, RetrievalCostResult, RetrievalPrice
21
21
 
@@ -83,7 +83,7 @@ class LoadedCatalog:
83
83
  if not isinstance(model_id, str) or not isinstance(provider, str):
84
84
  return model_id
85
85
  return self.canonical_ids.get(
86
- (_normalize_provider(provider), model_id), model_id
86
+ (normalize_provider(provider), model_id), model_id
87
87
  )
88
88
 
89
89
  def infer_direct_channel(self, model: Any) -> str | None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: metergraph-core
3
- Version: 0.2.26
3
+ Version: 0.2.29
4
4
  Summary: Reusable MeterGraph catalog and deterministic billing engine
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: >=3.10