@cat-factory/spend 0.20.2 → 0.21.1

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.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { SpendService, type SpendServiceDependencies, type RecordUsageInput, type ScopedSpendForecast, type BudgetTierScope, } from './SpendService.js';
2
- export { type ModelPrice, type ResolvedModelPrice, type InputTokenClassUsage, type SpendPricing, CACHE_READ_MULTIPLIER, CACHE_WRITE_MULTIPLIER, DEFAULT_MODEL_PRICES, DEFAULT_MONTHLY_LIMIT_EUR, DEFAULT_SPEND_PRICING, budgetCapsOverlay, effectiveTierLimit, priceFor, ratesFor, modelCostResolver, estimateCost, estimateClassedCost, withDynamicPrices, startOfMonthUtc, startOfNextMonthUtc, } from './pricing.js';
2
+ export { type BandRates, type LongContextBand, type ModelPrice, type ResolvedModelPrice, type InputTokenClassUsage, type SpendPricing, CACHE_READ_MULTIPLIER, CACHE_WRITE_MULTIPLIER, DEFAULT_MODEL_PRICES, DEFAULT_MONTHLY_LIMIT_EUR, DEFAULT_SPEND_PRICING, bandFor, budgetCapsOverlay, effectiveTierLimit, priceFor, ratesFor, modelCostResolver, estimateCost, estimateClassedCost, withDynamicPrices, startOfMonthUtc, startOfNextMonthUtc, } from './pricing.js';
3
3
  export { type SpendAlertSignals, type SpendAlertState, type SpendForecast, type SpendForecastConfidence, type SpendForecastInput, BURN_RATE_WINDOW_MS, DEFAULT_SPEND_ALERT_THRESHOLDS, MIN_OBSERVED_SPAN_MS, forecastSpend, mergeSpendAlertStates, spendAlertEscalated, spendAlertFiring, spendAlertState, } from './forecast.logic.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EACZ,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,8BAA8B,EAC9B,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,GAChB,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EACZ,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,OAAO,EACP,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,8BAA8B,EAC9B,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,GAChB,MAAM,qBAAqB,CAAA"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // Pricing tables and spend metering/gating for @cat-factory.
2
2
  export { SpendService, } from './SpendService.js';
3
- export { CACHE_READ_MULTIPLIER, CACHE_WRITE_MULTIPLIER, DEFAULT_MODEL_PRICES, DEFAULT_MONTHLY_LIMIT_EUR, DEFAULT_SPEND_PRICING, budgetCapsOverlay, effectiveTierLimit, priceFor, ratesFor, modelCostResolver, estimateCost, estimateClassedCost, withDynamicPrices, startOfMonthUtc, startOfNextMonthUtc, } from './pricing.js';
3
+ export { CACHE_READ_MULTIPLIER, CACHE_WRITE_MULTIPLIER, DEFAULT_MODEL_PRICES, DEFAULT_MONTHLY_LIMIT_EUR, DEFAULT_SPEND_PRICING, bandFor, budgetCapsOverlay, effectiveTierLimit, priceFor, ratesFor, modelCostResolver, estimateCost, estimateClassedCost, withDynamicPrices, startOfMonthUtc, startOfNextMonthUtc, } from './pricing.js';
4
4
  export { BURN_RATE_WINDOW_MS, DEFAULT_SPEND_ALERT_THRESHOLDS, MIN_OBSERVED_SPAN_MS, forecastSpend, mergeSpendAlertStates, spendAlertEscalated, spendAlertFiring, spendAlertState, } from './forecast.logic.js';
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,OAAO,EACL,YAAY,GAKb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAKL,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAML,mBAAmB,EACnB,8BAA8B,EAC9B,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,GAChB,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,OAAO,EACL,YAAY,GAKb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAOL,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,OAAO,EACP,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAML,mBAAmB,EACnB,8BAA8B,EAC9B,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,GAChB,MAAM,qBAAqB,CAAA"}
package/dist/pricing.d.ts CHANGED
@@ -1,26 +1,67 @@
1
1
  import type { InputTokenClassCounts, LlmTokenRates, ModelRef } from '@cat-factory/kernel';
2
2
  import type { AgentTokenUsage } from '@cat-factory/kernel';
3
3
  import type { OpenRouterModelMeta, WorkspaceSettings } from '@cat-factory/contracts';
4
- /** Price per 1M input/output tokens for one model. */
5
- export interface ModelPrice {
4
+ /**
5
+ * The four per-1M rates ONE BAND bills at.
6
+ *
7
+ * Most models have a single band, which is why this shape is also a whole {@link ModelPrice}.
8
+ * A vendor that reprices an entire request past a prompt threshold has two, and both sit on the
9
+ * same entry: see {@link ModelPrice.longBand}.
10
+ *
11
+ * The two cache rates are relative to THIS band's own `inputPerMillion`, so a band that departs
12
+ * from the multiplier floors names its own pair rather than borrowing the other band's.
13
+ */
14
+ export interface BandRates {
6
15
  /** Price per 1M FRESH (uncached) input tokens. */
7
16
  inputPerMillion: number;
8
17
  outputPerMillion: number;
9
18
  /**
10
19
  * Price per 1M input tokens served from the provider's prompt cache. Omitted ⇒ derived
11
- * from {@link ModelPrice.inputPerMillion} via {@link CACHE_READ_MULTIPLIER}. An entry sets
12
- * this only where a vendor departs from the near-universal ratio, so the ~50 entries below
13
- * do not each restate the same arithmetic.
20
+ * from this band's {@link BandRates.inputPerMillion} via {@link CACHE_READ_MULTIPLIER}. An
21
+ * entry sets this only where a vendor departs from the near-universal ratio, so the ~50
22
+ * entries below do not each restate the same arithmetic.
14
23
  */
15
24
  cacheReadPerMillion?: number;
16
25
  /**
17
26
  * Price per 1M input tokens WRITTEN into the provider's cache. Omitted ⇒ derived via
18
27
  * {@link CACHE_WRITE_MULTIPLIER}. Dearer than fresh input, which is why it cannot be
19
- * folded into {@link ModelPrice.cacheReadPerMillion}: a loop that keeps invalidating its
28
+ * folded into {@link BandRates.cacheReadPerMillion}: a loop that keeps invalidating its
20
29
  * prefix and a loop riding a warm cache differ by roughly 12x per cached token.
21
30
  */
22
31
  cacheWritePerMillion?: number;
23
32
  }
33
+ /**
34
+ * The dearer rates a request is billed at once its input reaches {@link minPromptTokens}.
35
+ *
36
+ * Three vendors bill this way today (OpenAI at 272K input tokens, Gemini 3.1 Pro and Grok 4.6 at
37
+ * 200K): past the threshold the WHOLE request reprices, with no blending, so one model has two
38
+ * prices. The threshold is the only band condition modelled here, because it is the only one a
39
+ * meter can evaluate: the prompt size is recorded on the usage it prices. DeepSeek's peak /
40
+ * off-peak split is a band on the WALL CLOCK, which nothing hands {@link estimateCost}, so those
41
+ * rows carry the peak rate in their base band and say so.
42
+ */
43
+ export interface LongContextBand extends BandRates {
44
+ /**
45
+ * Total input tokens at which this band takes over, counting EVERY input class: the vendor
46
+ * bands on the size of the request it received, and fresh input, cache reads and cache writes
47
+ * are a partition of that (kernel's `InputTokenClassCounts`). Counting fresh input alone would
48
+ * leave a 300K-token prompt served mostly from cache priced in the short band.
49
+ */
50
+ minPromptTokens: number;
51
+ }
52
+ /** Price per 1M input/output tokens for one model, in each band the vendor bills it in. */
53
+ export interface ModelPrice extends BandRates {
54
+ /**
55
+ * The long-context band, for a vendor that has one. Absent ⇒ one price at any prompt size.
56
+ *
57
+ * Kept as a second band rather than folded into the base rates: a folded row prices every
58
+ * SHORT request on a two-band model at roughly double its cost, and the picker renders that
59
+ * doubled figure as the model's list price beside single-band models at their real one.
60
+ * {@link bandFor} picks between them, and answers the DEARER one where the caller cannot say
61
+ * how large the prompt was.
62
+ */
63
+ longBand?: LongContextBand;
64
+ }
24
65
  /**
25
66
  * Fallback ratio of a cache READ to fresh input, applied when a {@link ModelPrice} names no
26
67
  * `cacheReadPerMillion`. Anthropic, OpenAI, DeepSeek and Google all bill a prefix-cache hit at
@@ -118,6 +159,14 @@ export declare const DEFAULT_SPEND_PRICING: SpendPricing;
118
159
  * catalog's 4-dp rounding makes of any real rate below 0.00005/1M. Overlaid, it would meter every
119
160
  * cache hit on that model at nothing, which is the one direction a budget safeguard may never be
120
161
  * wrong in. The multiplier over-states instead, which is the direction that keeps safeguarding.
162
+ *
163
+ * An overlaid entry carries NO {@link ModelPrice.longBand}, and is a single rate on purpose: the
164
+ * catalog's own fold (`dearestRate` in `openRouterModels.ts`) has already collapsed a model's
165
+ * conditional bands to their MAXIMUM, because which band applies depends on the prompt actually
166
+ * sent and a catalog is refreshed long before it. So enabling a two-band model in a workspace's
167
+ * OpenRouter catalog meters its short requests in the long band, where the curated row beside it
168
+ * prices each band exactly. That is the safe direction of the two, and closing the gap means
169
+ * carrying the threshold through {@link OpenRouterModelMeta} rather than re-deriving it here.
121
170
  */
122
171
  export declare function withDynamicPrices(pricing: SpendPricing, models: OpenRouterModelMeta[]): SpendPricing;
123
172
  /**
@@ -130,11 +179,26 @@ export declare function mergeSpendPricing(base: SpendPricing, overrides: Pick<Wo
130
179
  /** Resolve the price for a model, most-specific entry first. */
131
180
  export declare function priceFor(pricing: SpendPricing, ref: ModelRef): ModelPrice;
132
181
  /**
133
- * {@link priceFor} with both cache tiers filled in from the multipliers where the entry names
134
- * none. Every per-class cost goes through this rather than reading {@link ModelPrice} directly,
135
- * so a caller can never silently price a cache class at the fresh rate by forgetting the `??`.
182
+ * The band an entry bills a request of `inputTokens` at: its {@link ModelPrice.longBand} once the
183
+ * threshold is reached, else its base rates.
184
+ *
185
+ * An UNKNOWN `inputTokens` answers the LONG band, which is the whole reason the argument is
186
+ * optional rather than required. A caller that cannot see the prompt size (the telemetry rollup's
187
+ * rate resolver holds a model and an aggregate, never one call's counts) must still be handed a
188
+ * rate a budget can meter with, and of the two only the dearer one keeps a safeguard safeguarding.
189
+ * A single-band entry ignores the argument entirely.
136
190
  */
137
- export declare function ratesFor(pricing: SpendPricing, ref: ModelRef): ResolvedModelPrice;
191
+ export declare function bandFor(price: ModelPrice, inputTokens?: number): BandRates;
192
+ /**
193
+ * {@link priceFor} resolved to ONE band with both cache tiers filled in from the multipliers where
194
+ * that band names none. Every per-class cost goes through this rather than reading
195
+ * {@link ModelPrice} directly, so a caller can never silently price a cache class at the fresh
196
+ * rate by forgetting the `??`, nor price a long-context request in the short band.
197
+ *
198
+ * `inputTokens` is the request's TOTAL input, the count a vendor's threshold is stated against;
199
+ * see {@link bandFor} for what an absent one resolves to.
200
+ */
201
+ export declare function ratesFor(pricing: SpendPricing, ref: ModelRef, inputTokens?: number): ResolvedModelPrice;
138
202
  /**
139
203
  * Cost of one call's usage priced PER INPUT CLASS, in the pricing currency — the accurate
140
204
  * form, used wherever the producer could report the split.
@@ -149,6 +213,13 @@ export declare function estimateClassedCost(pricing: SpendPricing, ref: ModelRef
149
213
  /**
150
214
  * A {@link ModelCostResolver}-shaped closure over a {@link SpendPricing}, for the
151
215
  * model catalog to surface each model's informational list cost in the picker.
216
+ *
217
+ * The BASE band, never {@link ModelPrice.longBand}, and that is the difference between this and
218
+ * the metering paths. A budget must cover what a request will really cost, so an unknown prompt
219
+ * size resolves to the dearer band; the picker is a human comparing models at a glance, where
220
+ * every other row shows one list rate and a doubled figure beside them reads as a model that
221
+ * costs twice what it does. The band is not annotated either, for the same reason it is a single
222
+ * number: the surface has one line per model and no room to state a threshold.
152
223
  */
153
224
  export declare function modelCostResolver(pricing: SpendPricing): (ref: ModelRef) => {
154
225
  inputPerMillion: number;
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
package/dist/pricing.js CHANGED
@@ -30,6 +30,18 @@ export function effectiveTierLimit(configured, cap) {
30
30
  // empty case needs no branch of its own.
31
31
  return Math.min(...values);
32
32
  }
33
+ /**
34
+ * The input-token thresholds the three two-band vendors reprice a whole request at, one constant
35
+ * per vendor: each moves on its own vendor's say-so, and two of them agree today by coincidence.
36
+ *
37
+ * Named rather than repeated on the rows that share one. The OpenAI threshold appears on ten
38
+ * entries (five direct, five gateway), and a per-row copy would be ten chances to mistype the
39
+ * number that decides which band a run is metered in, in a table where a wrong figure looks
40
+ * exactly like a right one.
41
+ */
42
+ const OPENAI_LONG_CONTEXT_TOKENS = 272_000;
43
+ const GEMINI_LONG_CONTEXT_TOKENS = 200_000;
44
+ const GROK_LONG_CONTEXT_TOKENS = 200_000;
33
45
  /**
34
46
  * Built-in approximate EUR prices per 1M tokens. Keys are matched most-specific
35
47
  * first: exact `provider:model`, then the bare `provider`, then `defaultPrice`.
@@ -66,20 +78,69 @@ export const DEFAULT_MODEL_PRICES = {
66
78
  // ChatGPT/Codex subscription models (informational list prices, USD→EUR ~0.92). Keys are
67
79
  // the Codex `--model` slugs the catalog dispatches, so GPT-6 Astra, the GPT-5.6 tiers and
68
80
  // plain GPT-5.5, never a `-codex`-suffixed id, which no longer exists past GPT-5.3.
69
- // Post-2026-07-30 list: Sol $5 / $30, Terra $2 / $12, Luna $0.20 / $1.20 per 1M. Terra and
70
- // Luna were both carrying HALF their real rate here, which meters a Terra run at a twelfth
71
- // of an equivalent Sol one when the true gap is 2.5x on output. Cache reads bill at 0.1x
72
- // and writes at 1.25x on all three tiers, so both derived tiers are already exact.
73
- // GPT-6 Astra is $10 / $50 per 1M, the most expensive model this catalog can select on
74
- // either OpenAI route. Its cached input is $1, i.e. the same 0.1x read multiplier as the
75
- // tiers below, so the derived cache tiers land exactly here too. The 2x "Fast mode" rate
76
- // is deliberately not modelled: nothing here dispatches it, and a row set to a mode we
77
- // never request would over-meter every ordinary Astra run against the budget gate.
78
- 'openai:gpt-6-astra': { inputPerMillion: 9.2, outputPerMillion: 46 },
79
- 'openai:gpt-5.6-sol': { inputPerMillion: 4.6, outputPerMillion: 27.6 },
80
- 'openai:gpt-5.6-terra': { inputPerMillion: 1.84, outputPerMillion: 11.04 },
81
- 'openai:gpt-5.6-luna': { inputPerMillion: 0.18, outputPerMillion: 1.1 },
82
- 'openai:gpt-5.5': { inputPerMillion: 4.6, outputPerMillion: 27.6 },
81
+ //
82
+ // ALL FIVE ARE TWO-BAND, the shape the `xai:grok-4.6` row below and the Gemini 3.1 Pro row also
83
+ // carry. OpenAI bills a request whose prompt reaches 272,000 input tokens ENTIRELY at roughly
84
+ // double the short rate, with no blending, so each row states both bands and `bandFor` picks
85
+ // the one the recorded input size lands in. Short list is $10 / $50 (Astra), $4 / $20 (Sol),
86
+ // $2 / $12 (Terra), $0.20 / $1.20 (Luna) and $5 / $30 (GPT-5.5); the long band is $20 / $75,
87
+ // $8 / $30, $4 / $18, $0.40 / $1.80 and $10 / $45. The catalog declares a 1,050,000-token
88
+ // window on these entries, so a container agent re-sending a large checkout reaches the long
89
+ // band as ordinary behaviour rather than as an edge case.
90
+ //
91
+ // Both DERIVED cache tiers stay exact in EITHER band: cache reads bill at 0.1x and writes at
92
+ // 1.25x of that band's own input rate on all five tiers, so no band here names one.
93
+ //
94
+ // The 2x "Fast mode" rate is deliberately not modelled: nothing here dispatches it, and a row
95
+ // set to a mode we never request would over-meter every ordinary run.
96
+ 'openai:gpt-6-astra': {
97
+ inputPerMillion: 9.2,
98
+ outputPerMillion: 46,
99
+ longBand: {
100
+ minPromptTokens: OPENAI_LONG_CONTEXT_TOKENS,
101
+ inputPerMillion: 18.4,
102
+ outputPerMillion: 69,
103
+ },
104
+ },
105
+ 'openai:gpt-5.6-sol': {
106
+ inputPerMillion: 3.68,
107
+ outputPerMillion: 18.4,
108
+ longBand: {
109
+ minPromptTokens: OPENAI_LONG_CONTEXT_TOKENS,
110
+ inputPerMillion: 7.36,
111
+ outputPerMillion: 27.6,
112
+ },
113
+ },
114
+ 'openai:gpt-5.6-terra': {
115
+ inputPerMillion: 1.84,
116
+ outputPerMillion: 11.04,
117
+ longBand: {
118
+ minPromptTokens: OPENAI_LONG_CONTEXT_TOKENS,
119
+ inputPerMillion: 3.68,
120
+ outputPerMillion: 16.56,
121
+ },
122
+ },
123
+ // Luna's bands round UP, both of them (0.184 to 0.19 short, 0.368 to 0.37 long): this is the one
124
+ // OpenAI tier whose EUR figures do not land on a clean two decimals, and rounding the other way
125
+ // is the understatement the table's whole margin exists to rule out.
126
+ 'openai:gpt-5.6-luna': {
127
+ inputPerMillion: 0.19,
128
+ outputPerMillion: 1.11,
129
+ longBand: {
130
+ minPromptTokens: OPENAI_LONG_CONTEXT_TOKENS,
131
+ inputPerMillion: 0.37,
132
+ outputPerMillion: 1.66,
133
+ },
134
+ },
135
+ 'openai:gpt-5.5': {
136
+ inputPerMillion: 4.6,
137
+ outputPerMillion: 27.6,
138
+ longBand: {
139
+ minPromptTokens: OPENAI_LONG_CONTEXT_TOKENS,
140
+ inputPerMillion: 9.2,
141
+ outputPerMillion: 41.4,
142
+ },
143
+ },
83
144
  openai: { inputPerMillion: 0.14, outputPerMillion: 0.55 },
84
145
  // Cloudflare Workers AI is billed per "neuron"; treat it as roughly free. Every model
85
146
  // BELOW is a per-token-billed exception — see the note on the Kimi entries: a model with
@@ -107,10 +168,13 @@ export const DEFAULT_MODEL_PRICES = {
107
168
  // $0.19 for K2.7), and each sits above the 0.1x floor these entries would otherwise derive.
108
169
  // All three are named for that reason: deriving the cheaper number under-meters every cache
109
170
  // read on the default coder route, which is the one direction the budget gate may not err in.
171
+ // Each is rounded UP to the two decimals this table states rates in (0.092 to 0.10, 0.1472 to
172
+ // 0.15, 0.1748 to 0.18), since rounding a named rate down re-creates the same undercount from
173
+ // the other side.
110
174
  'workers-ai:@cf/moonshotai/kimi-k2.5': {
111
175
  inputPerMillion: 0.55,
112
176
  outputPerMillion: 2.76,
113
- cacheReadPerMillion: 0.09,
177
+ cacheReadPerMillion: 0.1,
114
178
  },
115
179
  'workers-ai:@cf/moonshotai/kimi-k2.6': {
116
180
  inputPerMillion: 0.87,
@@ -120,7 +184,7 @@ export const DEFAULT_MODEL_PRICES = {
120
184
  'workers-ai:@cf/moonshotai/kimi-k2.7-code': {
121
185
  inputPerMillion: 0.87,
122
186
  outputPerMillion: 3.68,
123
- cacheReadPerMillion: 0.17,
187
+ cacheReadPerMillion: 0.18,
124
188
  },
125
189
  // The remaining per-token-billed Workers AI models the catalog exposes. GLM-5.2 is the
126
190
  // default architect/reviewer routing and the R1 distill is the DeepSeek Cloudflare
@@ -256,12 +320,33 @@ export const DEFAULT_MODEL_PRICES = {
256
320
  'zai:glm-5.2': { inputPerMillion: 1.29, outputPerMillion: 4.05, cacheReadPerMillion: 0.24 },
257
321
  zai: { inputPerMillion: 1.29, outputPerMillion: 4.05, cacheReadPerMillion: 0.24 },
258
322
  // xAI direct. Grok 4.6 bills in two bands: $2 in / $0.50 cached / $6 out per 1M below a
259
- // 200K-token prompt, and DOUBLE that for the whole request once the prompt crosses 200K.
260
- // Priced at the LONG band, because the budget gate must not undercount and this table has
261
- // no way to express a threshold that depends on the prompt actually sent. A short-prompt
262
- // run is over-metered by 2x as the accepted cost of that. (USD→EUR ~0.92.)
263
- 'xai:grok-4.6': { inputPerMillion: 3.68, outputPerMillion: 11.04, cacheReadPerMillion: 0.92 },
264
- xai: { inputPerMillion: 3.68, outputPerMillion: 11.04, cacheReadPerMillion: 0.92 },
323
+ // 200K-token prompt, and DOUBLE that for the whole request once the prompt crosses 200K. Both
324
+ // bands NAME their cache read, because xAI's cached-input rate is 0.25x its fresh input rather
325
+ // than the 0.1x floor either band would otherwise derive. The bare `xai` fallback carries the
326
+ // same pair: Grok 4.6 is the only model this catalog selects on the route, so the guess for an
327
+ // unlisted one is the model that is really there. (USD→EUR ~0.92.)
328
+ 'xai:grok-4.6': {
329
+ inputPerMillion: 1.84,
330
+ outputPerMillion: 5.52,
331
+ cacheReadPerMillion: 0.46,
332
+ longBand: {
333
+ minPromptTokens: GROK_LONG_CONTEXT_TOKENS,
334
+ inputPerMillion: 3.68,
335
+ outputPerMillion: 11.04,
336
+ cacheReadPerMillion: 0.92,
337
+ },
338
+ },
339
+ xai: {
340
+ inputPerMillion: 1.84,
341
+ outputPerMillion: 5.52,
342
+ cacheReadPerMillion: 0.46,
343
+ longBand: {
344
+ minPromptTokens: GROK_LONG_CONTEXT_TOKENS,
345
+ inputPerMillion: 3.68,
346
+ outputPerMillion: 11.04,
347
+ cacheReadPerMillion: 0.92,
348
+ },
349
+ },
265
350
  // OpenRouter — a passthrough gateway billed at the underlying provider's rates (no
266
351
  // per-token markup), so each curated model carries the upstream vendor's list price
267
352
  // (USD→EUR ~0.92). Keyed by the OpenRouter `vendor/model` slug. The bare `openrouter`
@@ -273,26 +358,87 @@ export const DEFAULT_MODEL_PRICES = {
273
358
  'openrouter:anthropic/claude-fable-5': { inputPerMillion: 9.2, outputPerMillion: 46 },
274
359
  'openrouter:anthropic/claude-opus-5': { inputPerMillion: 4.6, outputPerMillion: 23 },
275
360
  'openrouter:anthropic/claude-opus-4.8': { inputPerMillion: 4.6, outputPerMillion: 23 },
276
- 'openrouter:google/gemini-3.1-pro-preview': { inputPerMillion: 1.84, outputPerMillion: 11.04 },
361
+ // Gemini 3.1 Pro is the THIRD two-band route in this table, beside OpenAI below and xAI further
362
+ // down, and the only Gemini entry that has one: Google bills a prompt over 200,000 tokens at
363
+ // $4 in / $0.40 cached / $18 out per 1M against the $2 / $0.20 / $12 under it. The catalog gives
364
+ // this entry a 1,048,576-token window, so the long band is reachable by an ordinary long-context
365
+ // run rather than by an edge case. Neither band names a cache tier: the 0.1x floor lands exactly
366
+ // on each band's own published cached rate.
367
+ 'openrouter:google/gemini-3.1-pro-preview': {
368
+ inputPerMillion: 1.84,
369
+ outputPerMillion: 11.04,
370
+ longBand: {
371
+ minPromptTokens: GEMINI_LONG_CONTEXT_TOKENS,
372
+ inputPerMillion: 3.68,
373
+ outputPerMillion: 16.56,
374
+ },
375
+ },
376
+ // The three Flash rows are ONE band each, which is what makes them the plain case beside the
377
+ // entry above: Google prices them per token regardless of prompt length. All three sit at the
378
+ // $0.75 / $0.075 cached / $3.75 per 1M the gateway serves today, undiscounted, so these are the
379
+ // rate actually billed and the derived cache tier is exact.
380
+ //
381
+ // Google has published a 100% increase on all three for 2027-01-01, which this table does not
382
+ // pre-empt: a future price is not the current one, and the sweep after it lands it.
277
383
  'openrouter:google/gemini-3.6-flash': { inputPerMillion: 0.69, outputPerMillion: 3.45 },
278
- // Priced at Google's $0.75 / $3.75 list, NOT the $0.375 / $1.875 the route is still
279
- // discounted to. The discount is temporary and the budget gate may not undercount when it
280
- // lapses; over-metering by 2x while it holds is the accepted cost. Google has also
281
- // published a 100% increase on BOTH Flash rows for 2027-01-01, which this table does not
282
- // pre-empt: a future price is not the current one, and the next sweep lands it.
283
384
  'openrouter:google/gemini-3.7-flash': { inputPerMillion: 0.69, outputPerMillion: 3.45 },
284
- // 3.8 Flash launched at 3.7 Flash's list, $0.75 / $3.75, and is NOT discounted, so this row
285
- // is the rate actually billed rather than the deliberate over-count above it.
286
385
  'openrouter:google/gemini-3.8-flash': { inputPerMillion: 0.69, outputPerMillion: 3.45 },
287
- // The same OpenAI list prices as the direct rows above, and the same two stale halves
288
- // corrected. OpenRouter's own model page currently advertises Sol at $2 / $10, below both
289
- // OpenAI's list and its own Terra row; that is an upstream listing artefact, so the entry
290
- // stays on the vendor list price this passthrough gateway bills at.
291
- 'openrouter:openai/gpt-6-astra': { inputPerMillion: 9.2, outputPerMillion: 46 },
292
- 'openrouter:openai/gpt-5.6-sol': { inputPerMillion: 4.6, outputPerMillion: 27.6 },
293
- 'openrouter:openai/gpt-5.6-terra': { inputPerMillion: 1.84, outputPerMillion: 11.04 },
294
- 'openrouter:openai/gpt-5.6-luna': { inputPerMillion: 0.19, outputPerMillion: 1.11 },
295
- 'openrouter:openai/gpt-5.5': { inputPerMillion: 4.6, outputPerMillion: 27.6 },
386
+ // The same OpenAI list prices and the same two bands as the direct rows above, which
387
+ // `pricing.test.ts` asserts pair for pair rather than leaving to the eye: the gateway confirms
388
+ // the mechanism outright, since every one of these slugs carries an
389
+ // `overrides: [{ min_prompt_tokens: 272000, }]` entry in the `/models` payload at exactly the
390
+ // doubled rates OpenAI publishes. OpenRouter is a passthrough, so the band reaches this route
391
+ // too, and `openai` is `auto-prefix` on the gateway, so a long-prompt container turn really is
392
+ // billed in the band these rows state.
393
+ //
394
+ // OpenRouter's own model page advertises Sol at HALF OpenAI's list in both bands ($2 / $10
395
+ // short, $4 / $15 long), below its own Terra row in the short band; that is an upstream listing
396
+ // artefact, so the entry stays on the vendor list price this passthrough gateway bills at.
397
+ 'openrouter:openai/gpt-6-astra': {
398
+ inputPerMillion: 9.2,
399
+ outputPerMillion: 46,
400
+ longBand: {
401
+ minPromptTokens: OPENAI_LONG_CONTEXT_TOKENS,
402
+ inputPerMillion: 18.4,
403
+ outputPerMillion: 69,
404
+ },
405
+ },
406
+ 'openrouter:openai/gpt-5.6-sol': {
407
+ inputPerMillion: 3.68,
408
+ outputPerMillion: 18.4,
409
+ longBand: {
410
+ minPromptTokens: OPENAI_LONG_CONTEXT_TOKENS,
411
+ inputPerMillion: 7.36,
412
+ outputPerMillion: 27.6,
413
+ },
414
+ },
415
+ 'openrouter:openai/gpt-5.6-terra': {
416
+ inputPerMillion: 1.84,
417
+ outputPerMillion: 11.04,
418
+ longBand: {
419
+ minPromptTokens: OPENAI_LONG_CONTEXT_TOKENS,
420
+ inputPerMillion: 3.68,
421
+ outputPerMillion: 16.56,
422
+ },
423
+ },
424
+ 'openrouter:openai/gpt-5.6-luna': {
425
+ inputPerMillion: 0.19,
426
+ outputPerMillion: 1.11,
427
+ longBand: {
428
+ minPromptTokens: OPENAI_LONG_CONTEXT_TOKENS,
429
+ inputPerMillion: 0.37,
430
+ outputPerMillion: 1.66,
431
+ },
432
+ },
433
+ 'openrouter:openai/gpt-5.5': {
434
+ inputPerMillion: 4.6,
435
+ outputPerMillion: 27.6,
436
+ longBand: {
437
+ minPromptTokens: OPENAI_LONG_CONTEXT_TOKENS,
438
+ inputPerMillion: 9.2,
439
+ outputPerMillion: 41.4,
440
+ },
441
+ },
296
442
  'openrouter:openai/gpt-oss-120b': { inputPerMillion: 0.034, outputPerMillion: 0.16 },
297
443
  // Meta Muse Spark 1.3, both tiers: $1.25 / $4.25 standard, $0.10 / $0.20 contributor. The
298
444
  // two are the same model on the same route, so the gap between these rows IS the entire
@@ -315,14 +461,14 @@ export const DEFAULT_MODEL_PRICES = {
315
461
  // OpenRouter models API actually reported when it was last read, and why re-reading it is
316
462
  // part of every pricing sweep rather than something to infer from the vendor's own page.
317
463
  //
318
- // Observed 2026-09-04 by `scripts/check-openrouter-pins.mjs`: Flash $0.0886 in / $0.0177
319
- // cached / $0.1772 out, Pro $1.60 in / $0.135 cached / $3.20 out per 1M. Pro is unmoved since
320
- // the 2026-09-01 read; Flash has drifted up ~9% and the row below it was the checker's one
321
- // UNDERSTATED pin, which is the direction that matters: a budget metering below the live rate
322
- // is the failure this table's conservatism exists to rule out, so it is re-pinned even though
323
- // the gap is small. (An earlier read had Pro at $0.556 / $1.112 on 2026-08-26, a third of what
324
- // it bills now. That swing in five days is the case for the checker rather than for a sweep
325
- // nobody schedules.)
464
+ // Observed 2026-09-09 by `scripts/check-openrouter-pins.mjs`: Flash $0.0825 in / $0.0165
465
+ // cached / $0.1649 out, Pro $0.946 in / $0.0789 cached / $1.893 out per 1M. Both rows are left
466
+ // where they are: each now sits ABOVE its live rate, which is the margin this table is for, and
467
+ // Pro has swung $0.556 $1.60 $0.946 across three reads in a fortnight. Chasing that blend
468
+ // down would spend the margin on noise and hand the next reader a number that is wrong in the
469
+ // unsafe direction as soon as the cheap upstreams thin again; only an UNDERSTATED pin is
470
+ // re-pinned here. Re-reading the blend is still part of every sweep, because the stamp is the
471
+ // only record of which direction it moved.
326
472
  'openrouter:deepseek/deepseek-v4-flash': {
327
473
  inputPerMillion: 0.082,
328
474
  outputPerMillion: 0.164,
@@ -333,12 +479,19 @@ export const DEFAULT_MODEL_PRICES = {
333
479
  outputPerMillion: 2.95,
334
480
  cacheReadPerMillion: 0.125,
335
481
  },
336
- // K2.7 Code's cache-read rate ($0.19/M) is ~2.8x the 0.1x floor its input implies, so it is
337
- // named; K3's ($0.30/M) IS the floor, so it derives.
482
+ // K2.7 Code's cache-read rate ($0.19/M) is ~2.6x the 0.1x floor its input implies, so it is
483
+ // named; K3's ($0.30/M) IS the floor, so it derives. Named at 0.18 rather than the 0.1748 the
484
+ // conversion gives, because two decimals is the unit every other rate here is written in and
485
+ // 0.17 would sit under the live rate by more than the pin checker's rounding tolerance.
486
+ //
487
+ // The fresh classes read $0.71 / $3.50 on the gateway's blend today, up ~5% and ~3%: the slug is
488
+ // served by several upstreams and the cheap end of that pool thinned. Small, and acted on
489
+ // because the direction is the one this table may not sit on. `moonshotai` is `auto-prefix` on
490
+ // the gateway, so all three classes on this route are really recorded and really metered.
338
491
  'openrouter:moonshotai/kimi-k2.7-code': {
339
- inputPerMillion: 0.62,
340
- outputPerMillion: 3.13,
341
- cacheReadPerMillion: 0.17,
492
+ inputPerMillion: 0.66,
493
+ outputPerMillion: 3.22,
494
+ cacheReadPerMillion: 0.18,
342
495
  },
343
496
  'openrouter:moonshotai/kimi-k3': { inputPerMillion: 2.76, outputPerMillion: 13.8 },
344
497
  // $1.19 in / $0.221 cached / $3.74 out per 1M, roughly double the $0.63 / $1.98 this row
@@ -352,12 +505,18 @@ export const DEFAULT_MODEL_PRICES = {
352
505
  cacheReadPerMillion: 0.21,
353
506
  },
354
507
  // GLM-5.3's open weights landed after the last sweep, so the gateway now serves it and the
355
- // catalog routes to it. Same $1.40 / $4.40 list as every other GLM-5.3 row here. No cached
356
- // tier is NAMED: OpenRouter's blend reads $0.14/M, which the 0.1x floor this input implies
357
- // already lands a hair above, so deriving is both correct and the safe direction. That is a
358
- // real difference from the `zai:` row beside it, which names $0.26 because Z.ai's own API
359
- // charges nearly double for the same class.
360
- 'openrouter:z-ai/glm-5.3': { inputPerMillion: 1.29, outputPerMillion: 4.05 },
508
+ // catalog routes to it. Same $1.40 / $4.40 list as every other GLM-5.3 row here.
509
+ //
510
+ // The cached tier is NAMED because OpenRouter's blend now reads Z.ai's own $0.26/M, which the
511
+ // 0.1x floor this input implies ($0.129) would meter at 54% of. `z-ai` is `auto-prefix` on the
512
+ // gateway, so this is the class a container agent's re-sent prefix lands in on every turn: the
513
+ // one understatement on this row a budget could spend through. Rounded UP from 0.2392, as the
514
+ // `z-ai/glm-5.2` row beside it is.
515
+ 'openrouter:z-ai/glm-5.3': {
516
+ inputPerMillion: 1.29,
517
+ outputPerMillion: 4.05,
518
+ cacheReadPerMillion: 0.24,
519
+ },
361
520
  // The same Z.ai list rates as the `zai:` row above: OpenRouter passes the upstream vendor's
362
521
  // price through, and the launch promotion the slug is served at today is the half-rate this
363
522
  // row deliberately does not carry.
@@ -373,19 +532,28 @@ export const DEFAULT_MODEL_PRICES = {
373
532
  outputPerMillion: 0.37,
374
533
  cacheReadPerMillion: 0.01,
375
534
  },
376
- // The SAME long-band rates as the `xai:grok-4.6` row above, and for the same reason stated
377
- // there: xAI bills a request whose prompt reaches 200K tokens entirely at $4 in / $1 cached /
378
- // $12 out, and OpenRouter is a passthrough, so the doubling reaches this route too. This row
379
- // used to carry the SHORT band ($2 / $6) with its cache tier left to derive, which understated
380
- // a cache read by 60% against even the short-band rate ($0.184 derived against a live $0.50)
381
- // and every long-prompt token by half. `x-ai` is `auto-prefix` on the gateway, so that cache
382
- // class is really recorded and really metered: this was the one pinned row whose understatement
383
- // the budget gate could actually spend through.
535
+ // The SAME two bands as the `xai:grok-4.6` row above, for the reason stated there: xAI bills a
536
+ // request whose prompt reaches 200K tokens entirely at $4 in / $1 cached / $12 out against
537
+ // $2 / $0.50 / $6 below it, and OpenRouter is a passthrough, so both bands reach this route.
538
+ // `x-ai` is `auto-prefix` on the gateway, so the cache class is really recorded and really
539
+ // metered, which is why each band names its own rate instead of deriving one at 0.1x.
384
540
  'openrouter:x-ai/grok-4.6': {
385
- inputPerMillion: 3.68,
386
- outputPerMillion: 11.04,
387
- cacheReadPerMillion: 0.92,
541
+ inputPerMillion: 1.84,
542
+ outputPerMillion: 5.52,
543
+ cacheReadPerMillion: 0.46,
544
+ longBand: {
545
+ minPromptTokens: GROK_LONG_CONTEXT_TOKENS,
546
+ inputPerMillion: 3.68,
547
+ outputPerMillion: 11.04,
548
+ cacheReadPerMillion: 0.92,
549
+ },
388
550
  },
551
+ // BELOW the Alibaba list the `qwen:qwen3.7-max` row above carries (1.36 against 2.3), and
552
+ // deliberately so, which makes this the row that states which price a gateway entry is held to:
553
+ // the rate the ROUTE bills. OpenRouter's blend for this slug sits under Alibaba's own list, and
554
+ // a row must cover what a call through THIS route costs rather than what the same model costs
555
+ // elsewhere. The Z.ai rows depart the other way, carrying a list ABOVE the promotion the gateway
556
+ // serves today, and both are the same rule: never below the route, and above it is the margin.
389
557
  'openrouter:qwen/qwen3.7-max': { inputPerMillion: 1.36, outputPerMillion: 4.07 },
390
558
  // OpenRouter passes Alibaba's own Qwen3.8 rates through, cached tier included. The key is the
391
559
  // DATED slug: the gateway withdrew the undated `qwen/qwen3.8-max` and now serves `-0902` at the
@@ -473,6 +641,14 @@ export const DEFAULT_SPEND_PRICING = {
473
641
  * catalog's 4-dp rounding makes of any real rate below 0.00005/1M. Overlaid, it would meter every
474
642
  * cache hit on that model at nothing, which is the one direction a budget safeguard may never be
475
643
  * wrong in. The multiplier over-states instead, which is the direction that keeps safeguarding.
644
+ *
645
+ * An overlaid entry carries NO {@link ModelPrice.longBand}, and is a single rate on purpose: the
646
+ * catalog's own fold (`dearestRate` in `openRouterModels.ts`) has already collapsed a model's
647
+ * conditional bands to their MAXIMUM, because which band applies depends on the prompt actually
648
+ * sent and a catalog is refreshed long before it. So enabling a two-band model in a workspace's
649
+ * OpenRouter catalog meters its short requests in the long band, where the curated row beside it
650
+ * prices each band exactly. That is the safe direction of the two, and closing the gap means
651
+ * carrying the threshold through {@link OpenRouterModelMeta} rather than re-deriving it here.
476
652
  */
477
653
  export function withDynamicPrices(pricing, models) {
478
654
  if (models.length === 0)
@@ -518,17 +694,37 @@ export function priceFor(pricing, ref) {
518
694
  pricing.defaultPrice);
519
695
  }
520
696
  /**
521
- * {@link priceFor} with both cache tiers filled in from the multipliers where the entry names
522
- * none. Every per-class cost goes through this rather than reading {@link ModelPrice} directly,
523
- * so a caller can never silently price a cache class at the fresh rate by forgetting the `??`.
697
+ * The band an entry bills a request of `inputTokens` at: its {@link ModelPrice.longBand} once the
698
+ * threshold is reached, else its base rates.
699
+ *
700
+ * An UNKNOWN `inputTokens` answers the LONG band, which is the whole reason the argument is
701
+ * optional rather than required. A caller that cannot see the prompt size (the telemetry rollup's
702
+ * rate resolver holds a model and an aggregate, never one call's counts) must still be handed a
703
+ * rate a budget can meter with, and of the two only the dearer one keeps a safeguard safeguarding.
704
+ * A single-band entry ignores the argument entirely.
705
+ */
706
+ export function bandFor(price, inputTokens) {
707
+ const band = price.longBand;
708
+ if (!band)
709
+ return price;
710
+ return inputTokens !== undefined && inputTokens < band.minPromptTokens ? price : band;
711
+ }
712
+ /**
713
+ * {@link priceFor} resolved to ONE band with both cache tiers filled in from the multipliers where
714
+ * that band names none. Every per-class cost goes through this rather than reading
715
+ * {@link ModelPrice} directly, so a caller can never silently price a cache class at the fresh
716
+ * rate by forgetting the `??`, nor price a long-context request in the short band.
717
+ *
718
+ * `inputTokens` is the request's TOTAL input, the count a vendor's threshold is stated against;
719
+ * see {@link bandFor} for what an absent one resolves to.
524
720
  */
525
- export function ratesFor(pricing, ref) {
526
- const price = priceFor(pricing, ref);
721
+ export function ratesFor(pricing, ref, inputTokens) {
722
+ const band = bandFor(priceFor(pricing, ref), inputTokens);
527
723
  return {
528
- inputPerMillion: price.inputPerMillion,
529
- outputPerMillion: price.outputPerMillion,
530
- cacheReadPerMillion: price.cacheReadPerMillion ?? price.inputPerMillion * CACHE_READ_MULTIPLIER,
531
- cacheWritePerMillion: price.cacheWritePerMillion ?? price.inputPerMillion * CACHE_WRITE_MULTIPLIER,
724
+ inputPerMillion: band.inputPerMillion,
725
+ outputPerMillion: band.outputPerMillion,
726
+ cacheReadPerMillion: band.cacheReadPerMillion ?? band.inputPerMillion * CACHE_READ_MULTIPLIER,
727
+ cacheWritePerMillion: band.cacheWritePerMillion ?? band.inputPerMillion * CACHE_WRITE_MULTIPLIER,
532
728
  };
533
729
  }
534
730
  /**
@@ -540,9 +736,14 @@ export function ratesFor(pricing, ref) {
540
736
  * That direction is deliberate — a budget safeguard that undercounts stops safeguarding.
541
737
  */
542
738
  export function estimateClassedCost(pricing, ref, usage) {
739
+ // The three input classes are SUMMED for the band decision and priced apart for the cost. They
740
+ // are a partition of the request's input, and a vendor's long-context threshold is stated
741
+ // against the whole of it, so a prompt that crosses it mostly from cache crosses it all the
742
+ // same. Output tokens are not input and take no part in it.
743
+ const inputTokens = usage.promptTokens + usage.cacheReadTokens + usage.cacheWriteTokens;
543
744
  // The arithmetic itself is kernel's, shared with the telemetry rollup and the export, so the
544
745
  // ledger and the run surfaces cannot come to price the same classes differently.
545
- return costOfTokenClasses(ratesFor(pricing, ref), {
746
+ return costOfTokenClasses(ratesFor(pricing, ref, inputTokens), {
546
747
  promptTokens: usage.promptTokens,
547
748
  cacheReadTokens: usage.cacheReadTokens,
548
749
  cacheWriteTokens: usage.cacheWriteTokens,
@@ -552,6 +753,13 @@ export function estimateClassedCost(pricing, ref, usage) {
552
753
  /**
553
754
  * A {@link ModelCostResolver}-shaped closure over a {@link SpendPricing}, for the
554
755
  * model catalog to surface each model's informational list cost in the picker.
756
+ *
757
+ * The BASE band, never {@link ModelPrice.longBand}, and that is the difference between this and
758
+ * the metering paths. A budget must cover what a request will really cost, so an unknown prompt
759
+ * size resolves to the dearer band; the picker is a human comparing models at a glance, where
760
+ * every other row shows one list rate and a doubled figure beside them reads as a model that
761
+ * costs twice what it does. The band is not annotated either, for the same reason it is a single
762
+ * number: the surface has one line per model and no room to state a threshold.
555
763
  */
556
764
  export function modelCostResolver(pricing) {
557
765
  return (ref) => {
@@ -585,9 +793,10 @@ export function estimateCost(pricing, ref, usage) {
585
793
  outputTokens: usage.outputTokens,
586
794
  });
587
795
  }
588
- const price = priceFor(pricing, ref);
589
- return ((usage.inputTokens / 1_000_000) * price.inputPerMillion +
590
- (usage.outputTokens / 1_000_000) * price.outputPerMillion);
796
+ // A lumped count is still a count, so the band is as decidable here as on the classed path.
797
+ const rates = ratesFor(pricing, ref, usage.inputTokens);
798
+ return ((usage.inputTokens / 1_000_000) * rates.inputPerMillion +
799
+ (usage.outputTokens / 1_000_000) * rates.outputPerMillion);
591
800
  }
592
801
  /**
593
802
  * Build the env-driven operator budget-cap overlay for a {@link SpendPricing}. Each cap
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/spend",
3
- "version": "0.20.2",
3
+ "version": "0.21.1",
4
4
  "description": "Pricing tables and spend metering for the Agent Architecture Board.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,8 +24,8 @@
24
24
  "access": "public"
25
25
  },
26
26
  "dependencies": {
27
- "@cat-factory/contracts": "0.349.0",
28
- "@cat-factory/kernel": "0.341.0"
27
+ "@cat-factory/contracts": "0.350.0",
28
+ "@cat-factory/kernel": "0.342.1"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@stryker-mutator/core": "10.0.0",