Skip to content

Bundled jawcode prices for gpt-5.6-terra and gpt-5.6-luna are the pre-price-cut rates #907

Description

@brunoflma

Client or integration

OpenCodex dashboard

Area

Dashboard

Summary

The bundled jawcode cost rows for openai/gpt-5.6-terra and openai/gpt-5.6-luna are the pre-price-cut rates. OpenAI has since lowered both, so the ~$ column and /api/usage over-estimate every request on those two models.

Model src/generated/jawcode-model-metadata.ts OpenAI official (2026-08-02)
gpt-5.6-terra { input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 3.125 } 2 / 12 / 0.20 / 0
gpt-5.6-luna { input: 1, output: 6, cacheRead: 0.1, cacheWrite: 1.25 } 0.20 / 1.20 / 0.02 / 0
gpt-5.6-sol { input: 5, output: 30, cacheRead: 0.5, cacheWrite: 6.25 } 5 / 30 / 0.50 / 0 — input/output/cacheRead match

Sol matching while Terra and Luna do not lines up with the two models having been repriced after the bundle snapshot; Sol was not.

The expected-price overlay cannot correct this, and I do not think it should: resolveMatchedPriceExact() deliberately prefers a non-zero jawcode row over any overlay, which is the right priority. The fix belongs in the source data.

Three separate points, in case they want splitting:

  1. Terra and Luna carry stale input/output/cacheRead rates.
  2. All three gpt-5.6-* rows carry a non-zero cacheWrite. OpenAI's automatic caching has no write charge — the published table has input / cached input / output and no write column. gpt-5.5 and gpt-5.4 in the same bundle correctly carry cacheWrite: 0, so the gpt-5.6 family looks like it picked up the Anthropic 1.25×-input convention by accident (6.25 = 5 × 1.25, 3.125 = 2.5 × 1.25, 1.25 = 1 × 1.25). No impact on my host — I have zero cacheCreationInputTokens on these models — but it would bite anyone whose client sends explicit cache writes.
  3. Unrelated to the stale values but in the same area: none of the gpt-5.6-* rows carries the long-context tier. OpenAI bills prompts above 272k input tokens at 2× input (and cached input) and 1.5× output for the whole request. Cost4 has no way to express that, so requests over the threshold are billed at the short rate. On my 30-day window 391 requests crossed a published threshold. I am happy to open that as its own issue if you would rather keep this one to the data fix.

Reproduction

Read the rows straight out of the bundle — no proxy needed:

bun -e 'import {getJawcodeModelMetadata} from "./src/generated/jawcode-model-metadata";
for (const m of ["gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna","gpt-5.5","gpt-5.4"])
  console.log(m, JSON.stringify(getJawcodeModelMetadata("openai", m)?.cost));'

Then compare against https://developers.openai.com/api/docs/pricing.

To see it end to end: send any request through openai/gpt-5.6-luna, then open Logs. The ~$ value is 5× the amount OpenAI actually bills.

Version

2.10.0

Operating system

Windows 11 Home Single Language 10.0.26200

Provider and model

openai / gpt-5.6-terra, openai / gpt-5.6-luna (and gpt-5.6-sol for the cacheWrite point)

Logs or error output

# Bundled rows, 2.10.0
gpt-5.6-sol   {"input":5,"output":30,"cacheRead":0.5,"cacheWrite":6.25}
gpt-5.6-terra {"input":2.5,"output":15,"cacheRead":0.25,"cacheWrite":3.125}
gpt-5.6-luna  {"input":1,"output":6,"cacheRead":0.1,"cacheWrite":1.25}
gpt-5.5       {"input":5,"output":30,"cacheRead":0.5,"cacheWrite":0}
gpt-5.4       {"input":2.5,"output":15,"cacheRead":0.25,"cacheWrite":0}

# Effect on 30 days of my own usage.jsonl, replaying calculateCost() with each rate table.
# Same requests, same normalized tokens; only the Cost4 differs.
gpt-5.6-sol    n=6283  jawcode=$640.16  official=$640.16  delta=$0.00   (0%)
gpt-5.6-terra  n=1104  jawcode=$33.24   official=$26.59   delta=$6.65   (+25%)
gpt-5.6-luna   n=424   jawcode=$4.02    official=$0.80    delta=$3.22   (+400%)

The absolute numbers are small on my host because Sol carries most of my volume and Sol is correct. The percentages are the point — anyone whose workload leans on Luna sees a 5× over-estimate.

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, request credentials, and personal data.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingguiDashboard, tray, settings UI

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions