Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Sources/OpenUsage/Resources/pricing_supplement.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$comment": "OpenUsage pricing supplement. Prices Cursor-native models that no public catalog carries, supplies fast-variant multipliers the catalogs omit, and maps provider log/CSV model slugs to canonical pricing keys (LiteLLM keys, models.dev ids, or entries in this file). Cursor Router rows name the routed model in prose instead of a slug ('Opus 5 (Auto Balanced)'), so those labels get alias rules too. Published to gh-pages by .github/workflows/pricing-supplement.yml on every change, so installed apps pick edits up within about an hour - no release needed. Rates are USD per million tokens. Sources: https://cursor.com/docs/models-and-pricing.md for Cursor-native entries; https://developers.openai.com/api/docs/models/daybreak-blue-latest and https://developers.openai.com/api/docs/pricing for Daybreak aliases and rates.",
"updated_at": "2026-08-14T12:55:21Z",
"updated_at": "2026-08-19T10:51:18Z",
"pricing": {
"auto": {
"input_per_million": 1.25,
Expand Down Expand Up @@ -229,6 +229,7 @@
{ "pattern": "^grok-build-0\\.1$", "canonical": "grok-build-0.1" },
{ "pattern": "^grok-code-fast-1$", "canonical": "grok-build-0.1" },
{ "pattern": "^grok-build$", "canonical": "grok-build-0.1" },
{ "pattern": "^grok-proxy$", "canonical": "grok-build-0.1" },
{ "pattern": "^grok-composer-2\\.5-fast$", "canonical": "composer-2.5-fast" },
{ "pattern": "^gpt-5\\.1-codex-max(?:-(?:low|medium|high|xhigh))?-fast$", "canonical": "gpt-5.1-codex-max-fast" },
{ "pattern": "^gpt-5\\.1-codex-max(?:-(?:low|medium|high|xhigh))?$", "canonical": "gpt-5.1-codex-max" },
Expand Down
2 changes: 2 additions & 0 deletions Tests/OpenUsageTests/PricingBundledResourceTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,8 @@ final class PricingBundledResourceTests: XCTestCase {
func testGrokCLIModelAliases() {
let pricing = Self.pricing
XCTAssertEqual(pricing.resolve(model: "grok-build")?.inputPerMillion, 1)
// grok-proxy is the recent Grok Build CLI log slug for the same model.
XCTAssertEqual(pricing.resolve(model: "grok-proxy"), pricing.resolve(model: "grok-build-0.1"))
XCTAssertEqual(pricing.resolve(model: "grok-composer-2.5-fast")?.inputPerMillion, 3)
}

Expand Down