Skip to content

fix(bedrock): align Bedrock prices with AWS Price List (Titan, Claude Instant, Nova regional, Nova Premier/Sonic) - #45679

Closed
myrison wants to merge 2 commits into
BerriAI:mainfrom
myrison:fix/bedrock-prices-aws-price-list
Closed

myrison wants to merge 2 commits into
BerriAI:mainfrom
myrison:fix/bedrock-prices-aws-price-list

Conversation

@myrison

@myrison myrison commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

TLDR

Problem this solves:

  • Eight Bedrock entries in model_prices_and_context_window.json do not match the AWS Price List
  • eu. / apac. Nova 2 Lite carry US prices (AWS charges 30% / 20% more there)
  • Titan Text Express/Lite and regional Claude Instant are 2x to 6.5x too high
  • amazon.nova-premier-v1:0 and amazon.nova-sonic-v1:0 have no Bedrock key at all

How it solves it:

  • Sets each price to the AWS Price List on-demand value, citing the SKU
  • Adds the two missing models with the same field shape as their siblings
  • Keeps litellm/model_prices_and_context_window_backup.json identical to the root file

User Flow

Before: a proxy admin routing Nova 2 Lite through the EU profile sees spend that is 30% below the AWS bill

  1. They route bedrock/eu.amazon.nova-2-lite-v1:0 and send POST https://litellm-domain/v1/chat/completions
  2. The response header x-litellm-response-cost prices 1M input tokens at $0.33 and 1M output at $2.75
  3. https://litellm-domain/ui/?page=logs shows that spend, and the month-end AWS invoice is 30% higher

After: the same request is priced at the AWS EU rate, so the logs page matches the invoice

  1. They route bedrock/eu.amazon.nova-2-lite-v1:0 and send POST https://litellm-domain/v1/chat/completions
  2. x-litellm-response-cost now prices 1M input tokens at $0.429 and 1M output at $3.597
  3. https://litellm-domain/ui/?page=logs shows spend that matches the AWS invoice

Changed values

Prices are USD per 1M tokens, old → new (input / output, cache read where noted). Source: AWS Price List on-demand terms, AmazonBedrock offer version 20261006144726 and AmazonBedrockFoundationModels offer version 20261008235637.

Key Old New AWS usagetype Region effectiveDate
amazon.titan-text-express-v1 1.30 / 1.70 0.20 / 0.60 USE1-TitanTextG1-Express-input-tokens / -output-tokens us-east-1 2026-10-01
amazon.titan-text-lite-v1 0.30 / 0.40 0.15 / 0.20 USE1-TitanTextG1-Lite-input-tokens / -output-tokens us-east-1 2026-10-01
bedrock/ap-northeast-1/anthropic.claude-instant-v1 2.23 / 7.55 0.80 / 2.40 APN1-MP:APN1_InputTokenCount-Units / APN1-MP:APN1_OutputTokenCount-Units ap-northeast-1 2026-07-01
bedrock/eu-central-1/anthropic.claude-instant-v1 2.48 / 8.38 0.80 / 2.40 EUC1-MP:EUC1_InputTokenCount-Units / EUC1-MP:EUC1_OutputTokenCount-Units eu-central-1 2026-07-01
eu.amazon.nova-2-lite-v1:0 0.33 / 2.75, cache read 0.0825 0.429 / 3.597, cache read 0.10725 EUC1-Nova2.0Lite-input-tokens / -output-tokens / -cache-read-input-token-count eu-central-1 2026-10-01
apac.amazon.nova-2-lite-v1:0 0.33 / 2.75, cache read 0.0825 0.396 / 3.311, cache read 0.099 APN1-Nova2.0Lite-input-tokens / -output-tokens / -cache-read-input-token-count ap-northeast-1 2026-10-01
bedrock/us-gov-west-1/amazon.titan-embed-text-v2:0 0.20 0.11 (input) UGW1-TitanEmbeddingV2-Text-input-tokens us-gov-west-1 2026-10-01
bedrock/us-gov-west-1/amazon.titan-text-express-v1 1.30 / 1.70 0.80 / 1.60 UGW1-TitanTextG1-Express-input-tokens / -output-tokens us-gov-west-1 2026-10-01

Added:

Key Price AWS usagetype Region Notes
amazon.nova-premier-v1:0 2.50 / 12.50 USE1-NovaPremier-input-tokens / -output-tokens us-east-1 1,000,000 in, 10,000 out (Amazon Nova user guide); same figures as the existing amazon-nova/nova-premier-v1 row
amazon.nova-sonic-v1:0 text 0.06 / 0.24, audio 3.40 / 13.60 USE1-NovaSonic-text-input-tokens, -text-output-tokens, -speech-input-tokens, -speech-output-tokens us-east-1 Field shape copied from amazon.nova-2-sonic-v1:0

Notes for reviewers:

  • eu. and apac. keys are cross-region inference profiles whose member regions have different prices. The EU value follows the convention already used by the eu.amazon.nova-{lite,micro,pro}-v1:0 rows (eu-central-1). For Nova 2 Lite, ap-northeast-1 is the only APAC region with an on-demand SKU in the offer files.
  • apac.amazon.nova-{lite,micro,pro}-v1:0 were checked and left unchanged; they equal ap-southeast-2 on-demand exactly.
  • Kimi K2 Thinking was checked and left unchanged; the regional values already match AWS on-demand terms.
  • Bare Claude keys (for example anthropic.claude-sonnet-4-5-…) and batch, priority and flex tiers are deliberately untouched. Those are modelling decisions outside this PR.
  • Nova Premier cache pricing is not added, to keep the new row to sourced fields.

Pre-Submission checklist

  • I have added meaningful tests — data-only change to the price JSON; no code path changes. The existing schema check and root-equals-backup check cover it.
  • The handful of test files covering my change pass locally: python -c "import json; json.load(open('model_prices_and_context_window.json'))", root file byte-equal to the backup, jsonschema validation against model_prices_and_context_window.schema.json reports 0 errors, git diff --check clean
  • My PR passes all required CI/CD checks
  • My PR's scope is as isolated as possible; it only solves 1 specific problem
  • I have received a Greptile Confidence Score of at least 4/5 before requesting a maintainer review

Screenshots / Proof of Fix

Each new value was read directly from the AWS Price List offer file for the region named above, terms.OnDemand → priceDimensions.pricePerUnit.USD, and multiplied by 1,000 (AWS lists per 1K tokens) to compare with the per-1M figures shown. Example for eu.amazon.nova-2-lite-v1:0 input:

$ curl -sO https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonBedrock/current/index.json
$ python3 - <<'EOF'
import json
offer = json.load(open("index.json"))
print("offer version", offer["version"], "published", offer["publicationDate"])
for sku, p in offer["products"].items():
    if p["attributes"].get("usagetype") == "EUC1-Nova2.0Lite-input-tokens":
        for term in offer["terms"]["OnDemand"][sku].values():
            for dim in term["priceDimensions"].values():
                print(dim["unit"], dim["pricePerUnit"]["USD"], term["effectiveDate"])
EOF
offer version 20261006144726 published 2026-10-06T14:47:26Z
1K tokens 0.0004290000 2026-10-01T00:00:00Z

0.000429 per 1K tokens = 4.29e-07 per token, which is the new input_cost_per_token in the diff.

… Instant, Nova regional, Nova Premier/Sonic)

Source: AWS Price List offer files, on-demand terms.
AmazonBedrock offer version 20261006144726 (published 2026-10-06T14:47:26Z).
AmazonBedrockFoundationModels offer version 20261008235637 (published 2026-10-08T23:56:37Z).
Prices below are USD per 1M tokens, old -> new (input / output).

Changed:
- amazon.titan-text-express-v1: 1.30/1.70 -> 0.20/0.60
  us-east-1 USE1-TitanTextG1-Express-input-tokens / -output-tokens, eff. 2026-10-01
- amazon.titan-text-lite-v1: 0.30/0.40 -> 0.15/0.20
  us-east-1 USE1-TitanTextG1-Lite-input-tokens / -output-tokens, eff. 2026-10-01
- bedrock/ap-northeast-1/anthropic.claude-instant-v1: 2.23/7.55 -> 0.80/2.40
  APN1-MP:APN1_InputTokenCount-Units / APN1-MP:APN1_OutputTokenCount-Units, eff. 2026-07-01
- bedrock/eu-central-1/anthropic.claude-instant-v1: 2.48/8.38 -> 0.80/2.40
  EUC1-MP:EUC1_InputTokenCount-Units / EUC1-MP:EUC1_OutputTokenCount-Units, eff. 2026-07-01
- eu.amazon.nova-2-lite-v1:0: 0.33/2.75, cache read 0.0825 -> 0.429/3.597, cache read 0.10725
  eu-central-1 EUC1-Nova2.0Lite-input-tokens / -output-tokens / -cache-read-input-token-count, eff. 2026-10-01
- apac.amazon.nova-2-lite-v1:0: 0.33/2.75, cache read 0.0825 -> 0.396/3.311, cache read 0.099
  ap-northeast-1 APN1-Nova2.0Lite-input-tokens / -output-tokens / -cache-read-input-token-count, eff. 2026-10-01
- bedrock/us-gov-west-1/amazon.titan-embed-text-v2:0: input 0.20 -> 0.11
  UGW1-TitanEmbeddingV2-Text-input-tokens, eff. 2026-10-01
- bedrock/us-gov-west-1/amazon.titan-text-express-v1: 1.30/1.70 -> 0.80/1.60
  UGW1-TitanTextG1-Express-input-tokens / -output-tokens, eff. 2026-10-01

Added (no bedrock key existed under any prefix):
- amazon.nova-premier-v1:0: 2.50/12.50, 1M context, 10K max output
  USE1-NovaPremier-input-tokens / -output-tokens, eff. 2026-10-01
- amazon.nova-sonic-v1:0: text 0.06/0.24, audio 3.40/13.60
  USE1-NovaSonic-text-input/output-tokens, -speech-input/output-tokens, eff. 2026-10-01

litellm/model_prices_and_context_window_backup.json is kept identical to the root file.
@CLAassistant

CLAassistant commented Oct 9, 2026 •

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@greptile-apps

greptile-apps Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 4/5

[Critical impact] Updates pricing data that affects customer billing calculations.

Fix the existing test’s rate assumption before merging

Findings

  1. P1 Corrected prices break a test ▶

Summary

Updates eight Bedrock price entries and adds Nova Premier and Nova Sonic to the catalog. The root catalog and packaged backup remain identical

  • Nova 2 Lite uses separate EU and APAC prices.
  • Titan, Claude Instant, and GovCloud entries use corrected rates.
  • Nova Premier now has a Bedrock price entry.
  • Nova Sonic now has text and audio prices in the catalog.

Reviews (1) · Last reviewed commit: "fix(bedrock): align Bedrock prices with ..." · Reviewed by Greptile

Comment thread model_prices_and_context_window.json
@codspeed

codspeed Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Merging this PR will not alter performance

✅ 31 untouched benchmarks


Comparing myrison:fix/bedrock-prices-aws-price-list (5512505) with main (2248fce)

Open in CodSpeed

@codecov

codecov Bot commented Oct 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Claude Instant's eu-central-1 row now equals the base row (both are the AWS on-demand
price), so the test's distinct-rate assumption needs a pair that really differs.
Titan Text Express is 0.20 base and 0.80 in us-gov-west-1.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@devin-ai-integration

Copy link
Copy Markdown
Contributor

Superseded by #45793, which carries the verified Titan, Nova 2 Lite, GovCloud and Nova Premier prices. Claude Instant regional rows and Nova Sonic were dropped, details in that PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants