Skip to content

chore(prices): sync OpenRouter prices: 7 models - #42261

Merged
kerry-berri merged 1 commit into
mainfrom
litellm-providers/price-sync-openrouter
Sep 21, 2026
Merged

kerry-berri merged 1 commit into
mainfrom
litellm-providers/price-sync-openrouter

Conversation

@berriai-litellm-provider-info-sync

@berriai-litellm-provider-info-sync berriai-litellm-provider-info-sync Bot commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

TLDR

Problem this solves:

  • OpenRouter prices in the catalog drifted from the provider's page
  • Spend and cost reporting for 7 models is stale

How it solves it:

  • Re-reads prices from OpenRouter's published pricing page
  • Updates only model_prices_and_context_window.json and its identical copies

User Flow

Before: a developer calling openrouter/moonshotai/kimi-k3 through the proxy gets spend computed at last sync's prices, which OpenRouter no longer charges.

  1. They send POST https://litellm-domain/v1/chat/completions with "model": "openrouter/moonshotai/kimi-k3"
  2. The call returns 200 with a normal completion
  3. They open https://litellm-domain/ui/?page=logs and see the request costed at $1.7/1M input and $8.5/1M output

After: the same call is costed at the prices OpenRouter currently publishes.

  1. They send the same POST https://litellm-domain/v1/chat/completions with "model": "openrouter/moonshotai/kimi-k3"
  2. The call returns 200 with a normal completion
  3. https://litellm-domain/ui/?page=logs now shows the request costed at $3/1M input and $15/1M output

Relevant issues

Affected release

Linear ticket

Pre-Submission checklist

Please complete all items before asking a LiteLLM maintainer to review your PR

  • I have added meaningful tests
  • The handful of test files covering my change pass locally, e.g. uv run pytest tests/test_litellm/<your_test_file>.py -v. Leave the suites (make test-unit-*, make test-unit) to CI: it finishes in ~15 minutes where a laptop takes an hour or more
  • My PR passes all required CI/CD checks (e.g., lint, schema.d.ts sync check, etc.)
  • 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 (Greptile reviews automatically once the PR is opened; only comment @greptileai to re-request a review after pushing changes)

Delays in PR merge?

If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).

Screenshots / Proof of Fix

Not applicable to an automated price sync; the audit trail for each value lives in the portal's sync history

Type

Infrastructure

Caveats (if any)

Medium

  • Kimi models roughly double in price, affecting budgets
    • openrouter/moonshotai/kimi-k3 and openrouter/~moonshotai/kimi-latest both go $1.7 to $3/1M input
  • openrouter/ibm-granite/granite-4.2-8b input drops but output rises to $0.25/1M
  • openrouter/qwen/qwen3.8-27b input roughly doubles to $0.42/1M

Low

  • DeepSeek pro entries move small amounts on input, output, and cache reads
  • Their max_tokens and max_output_tokens also shrink per the page
  • Off peak pricing blocks on those entries follow the same new values
  • 19 priced rows have no matching litellm key or field, so they were skipped
  • 2 rows without a serverless token price were not read

QA runbook

Not applicable; this PR does not touch tests or e2e

Final Attestation

  • The tests check the right things, including the edge cases, and regressions in the respective real-world customer use-cases are not possible after this PR
Sync report

Updates 7 models, each read from its provider's own published prices.

OpenRouter

Updates 7 models from the provider's pricing page (page a8eae63d3a49).

Changes

  • openrouter/~deepseek/deepseek-pro-latest: cache_read_input_token_cost $0.018186/1M → $0.019008/1M, input_cost_per_token $0.57156/1M → $0.57024/1M, max_output_tokens $393216000000/1M → $384000000000/1M, max_tokens $393216000000/1M → $384000000000/1M, off_peak_pricing {"windows":[{"weekdays":["saturday","sunday"],"hours_utc":"00:00-00:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"00:00-01:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"04:00-06:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"10:00-00:00"}],"input_cost_per_token":5.7156e-7,"output_cost_per_token":0.00000171468,"cache_read_input_token_cost":1.8186e-8} → {"windows":[{"weekdays":["saturday","sunday"],"hours_utc":"00:00-00:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"00:00-01:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"04:00-06:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"10:00-00:00"}],"input_cost_per_token":5.7024e-7,"output_cost_per_token":0.00000171072,"cache_read_input_token_cost":1.9008e-8}, output_cost_per_token $1.71468/1M → $1.71072/1M
  • openrouter/~moonshotai/kimi-latest: cache_read_input_token_cost $0.17/1M → $0.3/1M, input_cost_per_token $1.7/1M → $3/1M, output_cost_per_token $8.5/1M → $15/1M
  • openrouter/deepseek/deepseek-v4-pro: cache_read_input_token_cost $0.0778795/1M → $0.077314/1M, input_cost_per_token $0.934554/1M → $0.927768/1M, output_cost_per_token $1.86911/1M → $1.85554/1M
  • openrouter/deepseek/deepseek-v4-pro-0813: cache_read_input_token_cost $0.018186/1M → $0.019008/1M, input_cost_per_token $0.57156/1M → $0.57024/1M, max_output_tokens $393216000000/1M → $384000000000/1M, max_tokens $393216000000/1M → $384000000000/1M, off_peak_pricing {"windows":[{"weekdays":["saturday","sunday"],"hours_utc":"00:00-00:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"00:00-01:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"04:00-06:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"10:00-00:00"}],"input_cost_per_token":5.7156e-7,"output_cost_per_token":0.00000171468,"cache_read_input_token_cost":1.8186e-8} → {"windows":[{"weekdays":["saturday","sunday"],"hours_utc":"00:00-00:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"00:00-01:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"04:00-06:00"},{"weekdays":["monday","tuesday","wednesday","thursday","friday"],"hours_utc":"10:00-00:00"}],"input_cost_per_token":5.7024e-7,"output_cost_per_token":0.00000171072,"cache_read_input_token_cost":1.9008e-8}, output_cost_per_token $1.71468/1M → $1.71072/1M
  • openrouter/ibm-granite/granite-4.2-8b: cache_read_input_token_cost $0.05/1M → $0.015/1M, input_cost_per_token $0.1/1M → $0.06/1M, output_cost_per_token $0.15/1M → $0.25/1M
  • openrouter/moonshotai/kimi-k3: cache_read_input_token_cost $0.17/1M → $0.3/1M, input_cost_per_token $1.7/1M → $3/1M, output_cost_per_token $8.5/1M → $15/1M
  • openrouter/qwen/qwen3.8-27b: cache_read_input_token_cost $0.05/1M → $0.085/1M, input_cost_per_token $0.2/1M → $0.42/1M, output_cost_per_token $2.5/1M → $3/1M
No litellm key or field (19)

Rows the page prices that litellm has no key or field for. Nothing to apply; listed so the omission is deliberate, not missed.

  • qwen/qwen3.7-flash: override tier at 32000 prompt tokens has no litellm field
  • qwen/qwen3.7-flash: override tier at 256000 prompt tokens has no litellm field
  • openrouter/auto-beta: OpenRouter router, not a model
  • openrouter/fusion: OpenRouter router, not a model
  • qwen/qwen3.7-plus: override tier at 256000 prompt tokens has no litellm field
  • qwen/qwen3.5-plus-20260420: override tier at 256000 prompt tokens has no litellm field
  • qwen/qwen3.6-flash: override tier at 256000 prompt tokens has no litellm field
  • openrouter/pareto-code: OpenRouter router, not a model
  • qwen/qwen3.6-plus: override tier at 256000 prompt tokens has no litellm field
  • qwen/qwen3.5-plus-02-15: override tier at 256000 prompt tokens has no litellm field
  • qwen/qwen3-max-thinking: override tier at 32000 prompt tokens has no litellm field
  • openrouter/free: OpenRouter router, not a model
  • openrouter/bodybuilder: OpenRouter router, not a model
  • qwen/qwen3-max: override tier at 32000 prompt tokens has no litellm field
  • qwen/qwen3-coder-plus: override tier at 32000 prompt tokens has no litellm field
  • qwen/qwen3-coder-flash: override tier at 32000 prompt tokens has no litellm field
  • qwen/qwen-plus-2025-07-28: override tier at 256000 prompt tokens has no litellm field
  • qwen/qwen-plus: override tier at 256000 prompt tokens has no litellm field
  • openrouter/auto: OpenRouter router, not a model

2 rows the source lists without a serverless token price (dedicated or unpriced models) were not read.

Opened by the litellm-providers price sync. Every price is read from the provider's own published source and gated before it is applied; the audit trail for each value is in the portal's sync history.


Note

Medium Risk
Changes only the cost catalog but directly affects reported spend and budgets, including large price increases for Kimi models.

Overview
Syncs OpenRouter token pricing (and related limits) in model_prices_and_context_window.json and its backup for 7 models, so proxy spend and UI cost logs match OpenRouter’s current published rates.

Kimi (kimi-k3, ~moonshotai/kimi-latest) and Qwen qwen3.8-27b see materially higher input/output and cache-read costs. IBM Granite granite-4.2-8b lowers input and cache-read but raises output. DeepSeek pro entries (deepseek-v4-pro, v4-pro-0813, ~deepseek/deepseek-pro-latest) get small price tweaks; the 0813 and deepseek-pro-latest rows also drop max_tokens / max_output_tokens from 393216 to 384000 and refresh matching off_peak_pricing values.

Reviewed by Cursor Bugbot for commit bed94a4. Bugbot is set up for automated code reviews on this repo. Configure here.

openrouter/~deepseek/deepseek-pro-latest: max_tokens, max_output_tokens, input_cost_per_token, output_cost_per_token, cache_read_input_token_cost, off_peak_pricing
openrouter/~moonshotai/kimi-latest: input_cost_per_token, output_cost_per_token, cache_read_input_token_cost
openrouter/deepseek/deepseek-v4-pro: input_cost_per_token, output_cost_per_token, cache_read_input_token_cost
openrouter/deepseek/deepseek-v4-pro-0813: max_tokens, max_output_tokens, input_cost_per_token, output_cost_per_token, cache_read_input_token_cost, off_peak_pricing
openrouter/ibm-granite/granite-4.2-8b: input_cost_per_token, output_cost_per_token, cache_read_input_token_cost
openrouter/moonshotai/kimi-k3: input_cost_per_token, output_cost_per_token, cache_read_input_token_cost
openrouter/qwen/qwen3.8-27b: input_cost_per_token, output_cost_per_token, cache_read_input_token_cost
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@codspeed

codspeed Bot commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

Merging this PR will not alter performance

✅ 31 untouched benchmarks


Comparing litellm-providers/price-sync-openrouter (bed94a4) with main (51ae7ab)

Open in CodSpeed

@greptile-apps

greptile-apps Bot commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

The PR appears safe to merge because both catalogs remain identical and the updated metadata is internally consistent

Summary

This PR synchronizes OpenRouter pricing and output-limit metadata for seven catalog entries

  • Updates input, output, and cache-read token costs
  • Updates two DeepSeek output limits and their off-peak pricing blocks
  • Keeps the primary and backup model catalogs identical

Reviews (1) · Last reviewed commit: "chore(prices): sync OpenRouter prices: 7..."

@codecov

codecov Bot commented Sep 21, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@kerry-berri
kerry-berri merged commit 1fbfb46 into main Sep 21, 2026
93 of 94 checks passed
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.

1 participant