@trendyvideo/billing 1.2.1 → 1.4.0

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/pricing.js CHANGED
@@ -1,20 +1,50 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MICRODOLLARS_PER_CREDIT = exports.MEDIA_RATE_PRICING = exports.COST_MARKUP = exports.DEFAULT_PRICING = exports.MODEL_PRICING = void 0;
3
+ exports.CREDIT_DECIMALS = exports.TRENDY_VOICE_SKU = exports.TRENDY_VOICE_MICRODOLLARS_PER_MINUTE = exports.TRENDY_VOICE_CREDITS_PER_MINUTE = exports.MICRODOLLARS_PER_CREDIT = exports.MEDIA_RATE_PRICING = exports.GEMINI_EMBEDDING_2_UNIT_RATES = exports.GEMINI_EMBEDDING_2_INPUT_PRICING = exports.COST_MARKUP = exports.DEFAULT_PRICING = exports.MODEL_PRICING = void 0;
4
+ exports.findPricingRow = findPricingRow;
4
5
  exports.getPricing = getPricing;
6
+ exports.promptTokensIncludeCacheReads = promptTokensIncludeCacheReads;
5
7
  exports.calculateCostMicrodollars = calculateCostMicrodollars;
8
+ exports.geminiEmbedding2VideoFrames = geminiEmbedding2VideoFrames;
9
+ exports.calculateGeminiEmbedding2CostMicrodollars = calculateGeminiEmbedding2CostMicrodollars;
6
10
  exports.estimateMediaCostMicrodollars = estimateMediaCostMicrodollars;
7
11
  exports.estimateBilledMediaCostMicrodollars = estimateBilledMediaCostMicrodollars;
8
12
  exports.microdollarsToCredits = microdollarsToCredits;
9
13
  exports.creditsToMicrodollars = creditsToMicrodollars;
14
+ exports.calculateBilledCredits = calculateBilledCredits;
10
15
  // ============================================================================
11
16
  // Model Pricing — Single Source of Truth
12
17
  // All prices in USD per 1 million tokens
13
18
  // ============================================================================
19
+ /**
20
+ * Gemini 3.7 / 3.8 Flash share one rate card. Promotional through
21
+ * 2026-12-31, standard from 2027-01-01 (ai.google.dev/gemini-api/docs/pricing,
22
+ * fetched 2026-09-04). Kept as a named constant so the two rows cannot drift.
23
+ */
24
+ const GEMINI_37_FLASH_PRICING = {
25
+ input: 0.75,
26
+ output: 3.75,
27
+ cacheRead: 0.075,
28
+ cacheWrite: 0.75,
29
+ cacheStoragePerHour: 0.50,
30
+ scheduledChange: {
31
+ effectiveFrom: '2027-01-01',
32
+ input: 1.50,
33
+ output: 7.50,
34
+ cacheRead: 0.15,
35
+ cacheWrite: 1.50,
36
+ cacheStoragePerHour: 1.00,
37
+ },
38
+ };
14
39
  exports.MODEL_PRICING = {
15
40
  // ---------------------------------------------------------------------------
16
41
  // Claude models
17
42
  // ---------------------------------------------------------------------------
43
+ // Editor / clip-curator default in trendy-video-agent/src/config.ts. Was
44
+ // unpriced and fell through to DEFAULT_PRICING (Sonnet $3/$15), which
45
+ // UNDER-charged Opus 5 calls. Rates from the Anthropic pricing table
46
+ // (Opus tier: $5/$25, cache read 10%, cache write 125%).
47
+ 'claude-opus-5': { input: 5, output: 25, cacheRead: 0.50, cacheWrite: 6.25 },
18
48
  'claude-opus-4-6': { input: 5, output: 25, cacheRead: 0.50, cacheWrite: 6.25 },
19
49
  'claude-opus-4-20250514': { input: 15, output: 75, cacheRead: 1.50, cacheWrite: 18.75 },
20
50
  'claude-sonnet-4-6': { input: 3, output: 15, cacheRead: 0.30, cacheWrite: 3.75 },
@@ -31,11 +61,40 @@ exports.MODEL_PRICING = {
31
61
  // gemini-3.1-flash-preview was a phantom SKU — never published on Vertex AI
32
62
  // (returns 404). The actual Flash 3.x SKUs are:
33
63
  // - `gemini-3-flash-preview` (regular Flash, global region)
34
- // - `gemini-3.1-flash-lite-preview` (cheaper Lite variant, global region)
64
+ // - `gemini-3.1-flash-lite` (cheaper Lite variant, global region, GA May 2026)
35
65
  'gemini-3-flash-preview': { input: 0.30, output: 2.50, cacheRead: 0, cacheWrite: 0 },
66
+ // Gemini 3.5 Flash (GA day-one) — replaces 3.1-flash-lite for vision
67
+ // ranking where the cheaper Lite variant was hanging then 500ing on
68
+ // multimodal inputs.
69
+ 'gemini-3.5-flash': { input: 1.50, output: 9, cacheRead: 0.15, cacheWrite: 1.50, cacheStoragePerHour: 1.00 },
70
+ // Gemini 3.7 / 3.8 Flash (GA Aug 2026). Orchestrator + clip curator default
71
+ // in trendy-video-agent/src/config.ts since 2026-08-21. Promotional rates
72
+ // "through December 31, 2026", then double from 2027-01-01 (both dates on
73
+ // ai.google.dev/gemini-api/docs/pricing, fetched 2026-09-04). The cliff is
74
+ // encoded in `scheduledChange` so `getPricing()` flips on its own.
75
+ //
76
+ // Google reports cached tokens INSIDE `promptTokenCount`; see
77
+ // `promptTokensIncludeCacheReads` below for how the formula handles that.
78
+ // Cache write = input rate (Google bills cache creation at the input
79
+ // price); storage is per-hour and not billed per row.
80
+ 'gemini-3.7-flash': GEMINI_37_FLASH_PRICING,
81
+ 'gemini-3.8-flash': GEMINI_37_FLASH_PRICING,
82
+ 'gemini-3.1-flash-lite': { input: 0.15, output: 0.60, cacheRead: 0, cacheWrite: 0 },
83
+ // Retained for backward-compat with stored usage rows pre-May 2026.
36
84
  'gemini-3.1-flash-lite-preview': { input: 0.15, output: 0.60, cacheRead: 0, cacheWrite: 0 },
85
+ // Retained for backward-compat with stored usage rows; line retires 2026-10-16.
37
86
  'gemini-2.5-pro': { input: 1.25, output: 10, cacheRead: 0, cacheWrite: 0 },
38
87
  'gemini-2.5-flash': { input: 0.15, output: 0.60, cacheRead: 0, cacheWrite: 0 },
88
+ // gemini-2.0-flash, gemini-1.5-pro, gemini-1.5-flash: Google shut these
89
+ // down / never mentions them in current docs (verified 2026-08). No live
90
+ // code path in this monorepo requests them anymore — grep confirms the
91
+ // only references are these 3 lines plus their own test fixtures. NOT
92
+ // deleted: getPricing() is also used to reprice historical usage_events
93
+ // rows for cost-history displays, and deleting these entries would make
94
+ // any old row billed under these IDs silently fall through to
95
+ // DEFAULT_PRICING (Claude Sonnet rates) — wildly wrong for old cheap
96
+ // Flash/Flash-Lite usage. Same rationale as the flash-lite-preview line
97
+ // above. Delete only after confirming no usage_events rows reference them.
39
98
  'gemini-2.0-flash': { input: 0.10, output: 0.40, cacheRead: 0, cacheWrite: 0 },
40
99
  'gemini-1.5-pro': { input: 1.25, output: 5, cacheRead: 0, cacheWrite: 0 },
41
100
  'gemini-1.5-flash': { input: 0.075, output: 0.30, cacheRead: 0, cacheWrite: 0 },
@@ -53,6 +112,19 @@ exports.MODEL_PRICING = {
53
112
  'chirp-tts': { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
54
113
  'veo-video-gen': { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
55
114
  'text-embedding-005': { input: 0.025, output: 0, cacheRead: 0, cacheWrite: 0 },
115
+ // Gemini Embedding 2 (unified multimodal, 1536-dim). Used by
116
+ // trendy-chunk-analyzer/src/utils/embeddings.ts (text + per-chunk video) and
117
+ // trendy-video-agent/src/utils/embeddings.ts (text). Both were unpriced and
118
+ // fell through to DEFAULT_PRICING (Sonnet $3/1M = 15x the real text rate).
119
+ //
120
+ // `input` here is the TEXT rate. Google bills every modality per 1M input
121
+ // tokens at a different rate (Vertex AI pricing page, "Gemini Embedding 2
122
+ // (Unified Multimodal, Preview)", online requests, fetched 2026-09-04):
123
+ // text $0.20 · image $0.45 · audio $6.50 · video $12.00 · output: no charge
124
+ // Non-text calls MUST pass `costMicrodollarsOverride` computed with
125
+ // `calculateGeminiEmbedding2CostMicrodollars()` below; a bare token count
126
+ // against this row would bill video at the text rate (60x too low).
127
+ 'gemini-embedding-2': { input: 0.20, output: 0, cacheRead: 0, cacheWrite: 0 },
56
128
  // ---------------------------------------------------------------------------
57
129
  // Storage (flat-rate — $0.05/GB/month, use costMicrodollarsOverride)
58
130
  // ---------------------------------------------------------------------------
@@ -69,10 +141,30 @@ exports.DEFAULT_PRICING = {
69
141
  cacheWrite: 3.75,
70
142
  };
71
143
  /**
72
- * Look up pricing for a model. Tries exact match first, then prefix match
73
- * (stripping date suffixes like `-20250514`), then falls back to DEFAULT_PRICING.
144
+ * Apply a row's `scheduledChange` if `at` is on or after its effective date
145
+ * (midnight UTC). Returns the row untouched when there is nothing scheduled.
146
+ */
147
+ function resolveScheduledPricing(pricing, at) {
148
+ const change = pricing.scheduledChange;
149
+ if (!change)
150
+ return pricing;
151
+ const effectiveAt = new Date(`${change.effectiveFrom}T00:00:00Z`);
152
+ if (at.getTime() < effectiveAt.getTime())
153
+ return pricing;
154
+ return {
155
+ input: change.input,
156
+ output: change.output,
157
+ cacheRead: change.cacheRead,
158
+ cacheWrite: change.cacheWrite,
159
+ cacheStoragePerHour: change.cacheStoragePerHour ?? pricing.cacheStoragePerHour,
160
+ };
161
+ }
162
+ /**
163
+ * Look up the raw pricing row for a model, ignoring any scheduled change.
164
+ * Tries exact match first, then prefix match, then strips a trailing date
165
+ * suffix (like `-20250514`). Returns `undefined` when nothing matches.
74
166
  */
75
- function getPricing(model) {
167
+ function findPricingRow(model) {
76
168
  // Exact match
77
169
  if (exports.MODEL_PRICING[model])
78
170
  return exports.MODEL_PRICING[model];
@@ -86,34 +178,166 @@ function getPricing(model) {
86
178
  if (stripped !== model && exports.MODEL_PRICING[stripped]) {
87
179
  return exports.MODEL_PRICING[stripped];
88
180
  }
89
- return exports.DEFAULT_PRICING;
181
+ return undefined;
182
+ }
183
+ /**
184
+ * Look up pricing for a model as of `at` (default: now). Resolution order is
185
+ * exact match, prefix match, date-suffix strip, then DEFAULT_PRICING.
186
+ * Rows with a `scheduledChange` return the scheduled rates once `at` reaches
187
+ * the effective date.
188
+ */
189
+ function getPricing(model, at = new Date()) {
190
+ const row = findPricingRow(model);
191
+ if (!row)
192
+ return exports.DEFAULT_PRICING;
193
+ return resolveScheduledPricing(row, at);
194
+ }
195
+ /**
196
+ * Does this provider report cached tokens as a SUBSET of `inputTokens`?
197
+ *
198
+ * Gemini's `usageMetadata.promptTokenCount` already includes
199
+ * `cachedContentTokenCount`, and the provider forwards them as
200
+ * `inputTokens` / `cacheReadTokens` unchanged. Anthropic reports
201
+ * `input_tokens` and `cache_read_input_tokens` disjointly. Billing the
202
+ * Gemini pair with the Anthropic formula charges every cached token twice
203
+ * (once at the input rate inside `inputTokens`, again at the cache-read
204
+ * rate). See docs/architecture/gemini-cache-with-tools.md §5.
205
+ */
206
+ function promptTokensIncludeCacheReads(model) {
207
+ return /^gemini-/i.test(model);
90
208
  }
91
209
  /**
92
- * Markup applied to all API costs to ensure profit margin.
93
- * 1.5x means we charge 50% more than raw cost → ~33% margin.
94
- * Applied to both token-based costs AND flat-rate overrides.
210
+ * Margin applied to every charge. 1.5x means the customer pays 50% more than
211
+ * the provider charges us (~33% margin).
212
+ *
213
+ * WHERE it is applied (Sully, 2026-09-04: "token to credit should be exact,
214
+ * markup after conversion"): to the CREDIT figure, in `calculateBilledCredits`,
215
+ * after the exact microdollar-to-credit conversion. It is NEVER applied to
216
+ * `cost_microdollars`: that column stores the true provider cost so it
217
+ * reconciles against Google's and Anthropic's invoices. `recordUsage` is the
218
+ * only writer and runs the two steps in that order.
219
+ *
220
+ * History: 1.0.0 to 1.2.1 multiplied inside `calculateCostMicrodollars`, so
221
+ * the margin was baked into the stored cost. #118 made that function return
222
+ * raw cost and nothing picked the markup back up (zero margin, never
223
+ * published). PR #255 first restored it on the microdollar side; this
224
+ * revision moves it to the credit side per the decision above.
225
+ *
226
+ * Callers that pass a `costMicrodollarsOverride` (voice, Seedance, image gen,
227
+ * music) pass the RAW provider cost. It is stored as-is and marked up on the
228
+ * credit side like everything else.
95
229
  */
96
230
  exports.COST_MARKUP = 1.5;
97
231
  /**
98
- * Calculate cost in microdollars (1 microdollar = $0.000001).
232
+ * True provider cost in microdollars (1 microdollar = $0.000001), NO markup.
99
233
  *
100
234
  * Since pricing is per-million tokens:
101
235
  * cost_usd = (tokens / 1_000_000) * rate_per_million
102
236
  * cost_microdollars = cost_usd * 1_000_000 = tokens * rate_per_million
103
237
  *
104
- * All costs include COST_MARKUP (1.5x) for profit margin.
238
+ * This is what Google or Anthropic invoices us and what `recordUsage` stores
239
+ * in `usage_events.cost_microdollars`. It is NOT what the customer is
240
+ * charged: `calculateBilledCredits` derives `credits_consumed` from it.
241
+ *
242
+ * Rounding: the exact figure is rounded to the nearest whole microdollar
243
+ * because the column is `bigint`. Maximum error 0.5 µ$ ($0.0000005), below
244
+ * any invoice's precision. An override gets the same treatment (callers pass
245
+ * integers, so in practice it passes through untouched). The full rounding
246
+ * rule for a charge is documented once, on `calculateBilledCredits`.
105
247
  */
106
- function calculateCostMicrodollars(model, inputTokens, outputTokens, cacheReadTokens = 0, cacheCreationTokens = 0, costMicrodollarsOverride) {
248
+ function calculateCostMicrodollars(model, inputTokens, outputTokens, cacheReadTokens = 0, cacheCreationTokens = 0, costMicrodollarsOverride, at = new Date()) {
107
249
  if (costMicrodollarsOverride !== undefined) {
108
- return Math.round(costMicrodollarsOverride * exports.COST_MARKUP);
250
+ return Math.round(costMicrodollarsOverride);
251
+ }
252
+ const p = getPricing(model, at);
253
+ // Cached tokens must be billed exactly once. For providers that report
254
+ // them inside `inputTokens` (Gemini), move them out of the input line and
255
+ // bill them at the row's cache-read rate. If the row has no cache-read
256
+ // rate (0 = "not applicable"), they stay in the input line at the input
257
+ // rate, which is still a single charge. Anthropic-style disjoint counts
258
+ // are billed line by line as before.
259
+ let billableInputTokens = inputTokens;
260
+ let billableCacheReadTokens = cacheReadTokens;
261
+ if (promptTokensIncludeCacheReads(model)) {
262
+ if (p.cacheRead > 0) {
263
+ billableInputTokens = Math.max(0, inputTokens - cacheReadTokens);
264
+ }
265
+ else {
266
+ billableCacheReadTokens = 0;
267
+ }
109
268
  }
110
- const p = getPricing(model);
111
- const inputCost = inputTokens * p.input;
269
+ const inputCost = billableInputTokens * p.input;
112
270
  const outputCost = outputTokens * p.output;
113
- const cacheReadCost = cacheReadTokens * p.cacheRead;
271
+ const cacheReadCost = billableCacheReadTokens * p.cacheRead;
114
272
  const cacheWriteCost = cacheCreationTokens * p.cacheWrite;
115
- const rawCost = inputCost + outputCost + cacheReadCost + cacheWriteCost;
116
- return Math.round(rawCost * exports.COST_MARKUP);
273
+ return Math.round(inputCost + outputCost + cacheReadCost + cacheWriteCost);
274
+ }
275
+ /** USD per 1M input tokens, by modality. */
276
+ exports.GEMINI_EMBEDDING_2_INPUT_PRICING = {
277
+ text: 0.20,
278
+ image: 0.45,
279
+ audio: 6.50,
280
+ video: 12.00,
281
+ };
282
+ /** Per-unit equivalents (raw microdollars) for when the API reports no token count. */
283
+ exports.GEMINI_EMBEDDING_2_UNIT_RATES = {
284
+ microdollarsPerImage: 120, // $0.00012
285
+ microdollarsPerAudioSecond: 160, // $0.00016
286
+ microdollarsPerVideoFrame: 790, // $0.00079
287
+ videoMaxFrames: 32,
288
+ /** Rough text fallback: ~4 chars per token. */
289
+ charsPerTextToken: 4,
290
+ };
291
+ /** Frames Google samples from a video of `durationSec` (1 fps, capped at 32). */
292
+ function geminiEmbedding2VideoFrames(durationSec) {
293
+ if (!Number.isFinite(durationSec) || durationSec <= 0)
294
+ return 0;
295
+ return Math.min(exports.GEMINI_EMBEDDING_2_UNIT_RATES.videoMaxFrames, Math.ceil(durationSec));
296
+ }
297
+ /**
298
+ * Raw cost of one `gemini-embedding-2:embedContent` call. Prefers the token
299
+ * count Google reports; otherwise falls back to the published per-unit rate
300
+ * for the modality. Always returns a cost for a non-empty input so a call can
301
+ * never be recorded as free by accident.
302
+ */
303
+ function calculateGeminiEmbedding2CostMicrodollars(input) {
304
+ const { modality, promptTokens } = input;
305
+ if (promptTokens !== undefined && promptTokens > 0) {
306
+ return {
307
+ costMicrodollars: Math.ceil(promptTokens * exports.GEMINI_EMBEDDING_2_INPUT_PRICING[modality]),
308
+ inputTokens: promptTokens,
309
+ basis: 'reported_tokens',
310
+ };
311
+ }
312
+ const r = exports.GEMINI_EMBEDDING_2_UNIT_RATES;
313
+ switch (modality) {
314
+ case 'text': {
315
+ const tokens = Math.ceil((input.textChars ?? 0) / r.charsPerTextToken);
316
+ return {
317
+ costMicrodollars: Math.ceil(tokens * exports.GEMINI_EMBEDDING_2_INPUT_PRICING.text),
318
+ inputTokens: tokens,
319
+ basis: 'estimated_units',
320
+ };
321
+ }
322
+ case 'image':
323
+ return {
324
+ costMicrodollars: Math.ceil((input.imageCount ?? 1) * r.microdollarsPerImage),
325
+ inputTokens: 0,
326
+ basis: 'estimated_units',
327
+ };
328
+ case 'audio':
329
+ return {
330
+ costMicrodollars: Math.ceil((input.durationSec ?? 0) * r.microdollarsPerAudioSecond),
331
+ inputTokens: 0,
332
+ basis: 'estimated_units',
333
+ };
334
+ case 'video':
335
+ return {
336
+ costMicrodollars: geminiEmbedding2VideoFrames(input.durationSec ?? 0) * r.microdollarsPerVideoFrame,
337
+ inputTokens: 0,
338
+ basis: 'estimated_units',
339
+ };
340
+ }
117
341
  }
118
342
  exports.MEDIA_RATE_PRICING = {
119
343
  // ---------------------------------------------------------------------------
@@ -138,12 +362,12 @@ exports.MEDIA_RATE_PRICING = {
138
362
  source: '$0.83110 for 4s transition clip — Atlas cost_history_2026-05-19.csv',
139
363
  },
140
364
  // ---------------------------------------------------------------------------
141
- // Vertex AI — Lyria 3 Pro music gen (FLAT per generation, no per-second)
365
+ // Vertex AI — Lyria 3 Pro music gen (billed per second of generated audio)
142
366
  // ---------------------------------------------------------------------------
143
367
  'lyria-3-pro-preview': {
144
- unit: 'per_clip',
145
- microdollarsPerUnit: 80_000, // $0.08 flat per song
146
- source: 'GCP Cloud Billing Catalog API SKU 4484-3A5F-5368: single-tier $0.080/count, no duration scaling (verified 2026-05-19)',
368
+ unit: 'per_second',
369
+ microdollarsPerUnit: 300_000, // $0.30 / sec (≈ 30 credits / 60s baseline)
370
+ source: 'derived from generate-music.ts priceCredits() verify vs. Lyria invoice when staging hits prod',
147
371
  },
148
372
  // ---------------------------------------------------------------------------
149
373
  // Remotion Lambda — final-reel render (per-second of compute @ 720p)
@@ -155,12 +379,53 @@ exports.MEDIA_RATE_PRICING = {
155
379
  microdollarsPerUnit: 1_000, // $0.001 / sec compute @ 720p
156
380
  source: 'render-billing.ts calculateOverageRenderCreditCost; preview only — render-server records true cost via getRenderProgress',
157
381
  },
382
+ // ---------------------------------------------------------------------------
383
+ // Trendy Voice — Gemini Live audio-only session, billed per minute.
384
+ // User-facing rate: 12 credits = $0.12 = 120,000 µ$ per minute.
385
+ // Raw Gemini cost is ~$0.023/min — Trendy's effective markup is much higher
386
+ // than the default 1.5× because voice is a premium experience and we want
387
+ // a comfortable margin on long sessions.
388
+ //
389
+ // Note: the rate stored here is `120,000 / COST_MARKUP` (80,000) so that
390
+ // `recordUsage({ costMicrodollarsOverride: 80_000 })` bills exactly
391
+ // 12 credits per minute (80,000 / 10,000 × 1.5, see calculateBilledCredits).
392
+ // This keeps the SKU's flow consistent with every other MEDIA_RATE_PRICING
393
+ // entry — override stored as cost, ×COST_MARKUP on the credit side. It also
394
+ // means `cost_microdollars` holds 80,000 for a voice minute, a derived
395
+ // figure rather than Gemini's ~23,000 µ$ true cost; the true cost is in
396
+ // `source`. Changing that is a video-agent (voice-meter.ts) decision.
397
+ // ---------------------------------------------------------------------------
398
+ 'trendy_voice_minute': {
399
+ unit: 'per_clip',
400
+ microdollarsPerUnit: 80_000, // 80,000 µ$ = 8 credits × 1.5 (COST_MARKUP) = 12 credits / minute
401
+ source: 'Gemini Live audio-only ~$0.023/min raw; Trendy user-facing 12 credits ($0.12) per minute',
402
+ },
403
+ // ---------------------------------------------------------------------------
404
+ // Trendy Slides — deck generation + document exports.
405
+ //
406
+ // NOTE: pricing PROVISIONAL — Sully to confirm before launch.
407
+ //
408
+ // MP4 (video) exports and TTS voiceover are NOT new SKUs — they reuse the
409
+ // existing `render-engine-lambda` (Remotion Lambda render) and
410
+ // `trendy_voice_minute` entries above.
411
+ // ---------------------------------------------------------------------------
412
+ 'slides-generate': {
413
+ unit: 'per_clip', // flat per-deck generation
414
+ microdollarsPerUnit: 500_000, // $0.50 raw × 1.5 (COST_MARKUP) = 750,000 µ$ = 75 credits / deck
415
+ source: 'estimated LLM + image-gen cost per deck; PROVISIONAL — Sully to confirm',
416
+ },
417
+ 'slides-export-doc': {
418
+ unit: 'per_clip', // flat per PPTX/PDF export
419
+ microdollarsPerUnit: 20_000, // $0.02 raw × 1.5 (COST_MARKUP) = 30,000 µ$ = 3 credits / export
420
+ source: 'estimated packages/slides-export compute per document; PROVISIONAL — Sully to confirm',
421
+ },
158
422
  };
159
423
  /**
160
424
  * Estimate the RAW microdollar cost of a media-generation call before
161
425
  * COST_MARKUP is applied. Callers pass the result as
162
- * `costMicrodollarsOverride` into `recordUsage`; the markup is applied
163
- * inside `calculateCostMicrodollars`.
426
+ * `costMicrodollarsOverride` into `recordUsage`, which stores it as the
427
+ * row's `cost_microdollars` and applies the markup on the credit side via
428
+ * `calculateBilledCredits`.
164
429
  *
165
430
  * - For `per_clip` rates, pass `units` (default 1).
166
431
  * - For `per_second` rates, pass `durationSec`.
@@ -180,9 +445,12 @@ function estimateMediaCostMicrodollars(model, opts = {}) {
180
445
  return Math.ceil(units * rate.microdollarsPerUnit);
181
446
  }
182
447
  /**
183
- * Same estimate but with COST_MARKUP applied i.e. what the user is
184
- * actually billed. Use this for cost-preview UIs that need to match
185
- * the final `usage_events.credits_consumed` write.
448
+ * Same estimate with COST_MARKUP applied, still in microdollars: what the
449
+ * user is billed, expressed as credits × 10,000. Use it for cost-preview
450
+ * UIs. `microdollarsToCredits` of this value equals the `credits_consumed`
451
+ * that `recordUsage` writes for the raw estimate, to the 0.01 credit, for
452
+ * every rate in the table (tests in usage-tracker.test.ts). It is NOT what
453
+ * `cost_microdollars` stores; that column holds the raw estimate.
186
454
  */
187
455
  function estimateBilledMediaCostMicrodollars(model, opts = {}) {
188
456
  return Math.round(estimateMediaCostMicrodollars(model, opts) * exports.COST_MARKUP);
@@ -191,10 +459,69 @@ function estimateBilledMediaCostMicrodollars(model, opts = {}) {
191
459
  // Credit System — 1 credit = $0.01 = 10,000 microdollars
192
460
  // ============================================================================
193
461
  exports.MICRODOLLARS_PER_CREDIT = 10_000;
462
+ /**
463
+ * Trendy Voice (Gemini Live) per-minute billing rate.
464
+ *
465
+ * 12 credits = $0.12 = 120,000 microdollars per session-minute.
466
+ *
467
+ * Minutes are rounded UP — partial minutes are billed as a full minute.
468
+ * Fairness goes to Trendy on the round-up; very short sessions (<10s)
469
+ * are not billed at all (see the meter's startup guard).
470
+ */
471
+ exports.TRENDY_VOICE_CREDITS_PER_MINUTE = 12;
472
+ exports.TRENDY_VOICE_MICRODOLLARS_PER_MINUTE = exports.TRENDY_VOICE_CREDITS_PER_MINUTE * exports.MICRODOLLARS_PER_CREDIT;
473
+ exports.TRENDY_VOICE_SKU = 'trendy_voice_minute';
474
+ /**
475
+ * Precision of `usage_events.credits_consumed` (`numeric(12,2)`): charges are
476
+ * kept to 0.01 credit = 100 µ$ = $0.0001.
477
+ */
478
+ exports.CREDIT_DECIMALS = 2;
479
+ const CREDIT_SCALE = 10 ** exports.CREDIT_DECIMALS;
480
+ /** 100 µ$: one 0.01-credit step. */
481
+ const MICRODOLLARS_PER_CREDIT_STEP = exports.MICRODOLLARS_PER_CREDIT / CREDIT_SCALE;
482
+ /** Exact conversion. No rounding, no markup. */
194
483
  function microdollarsToCredits(microdollars) {
195
- return Math.ceil(microdollars / exports.MICRODOLLARS_PER_CREDIT);
484
+ return microdollars / exports.MICRODOLLARS_PER_CREDIT;
196
485
  }
197
486
  function creditsToMicrodollars(credits) {
198
487
  return credits * exports.MICRODOLLARS_PER_CREDIT;
199
488
  }
489
+ /**
490
+ * Customer-billed credits for a true-cost `costMicrodollars` figure. This is
491
+ * the ONLY place COST_MARKUP is applied and the ONLY place a charge is
492
+ * rounded. `recordUsage` writes the result to `credits_consumed`.
493
+ *
494
+ * billed credits = round2( (cost_microdollars / 10,000) × COST_MARKUP )
495
+ *
496
+ * 1. exact conversion cost_microdollars / MICRODOLLARS_PER_CREDIT
497
+ * 2. margin × COST_MARKUP
498
+ * 3. one rounding half up, to 0.01 credit (CREDIT_DECIMALS), so the
499
+ * value passed to the RPC is the value stored and
500
+ * SQL reproduces it exactly:
501
+ * ROUND(cost_microdollars * 1.5 / 10000, 2)
502
+ *
503
+ * THE ROUNDING RULE, in full. Nothing else in this package rounds a charge.
504
+ * - `cost_microdollars`: nearest whole microdollar (bigint column), in
505
+ * `calculateCostMicrodollars`. A storage step, not a pricing step.
506
+ * - `credits_consumed`: here, once, half up, to 0.01 credit, computed from
507
+ * the stored `cost_microdollars` so every row is self-consistent.
508
+ * - No rounding up to a whole credit (1.2.1 did that with Math.ceil), no
509
+ * rounding before the markup, no rounding in `microdollarsToCredits`.
510
+ * - A charge below 0.005 credit (true cost of 33 µ$ or less) rounds to
511
+ * 0.00. The `record_usage_atomic` RPC then falls back to
512
+ * ROUND(cost_microdollars / 10000, 2), which is also 0.00 for every such
513
+ * value, so the two never disagree (test in pricing.test.ts).
514
+ *
515
+ * Implementation note: steps 1 and 2 commute, and the arithmetic is done in
516
+ * whole microdollars (`cost × 1.5` is exact for any integer) before the one
517
+ * division, because `1500 / 10000 * 1.5` is 0.224999… in floating point and
518
+ * would round to 0.22 instead of 0.23. `pricing.test.ts` checks the result
519
+ * against an integer reference implementation for every value up to
520
+ * 5,000,000 µ$ and a set of larger ones.
521
+ */
522
+ function calculateBilledCredits(costMicrodollars) {
523
+ const billedMicrodollars = costMicrodollars * exports.COST_MARKUP;
524
+ const hundredths = Math.round(billedMicrodollars / MICRODOLLARS_PER_CREDIT_STEP);
525
+ return hundredths / CREDIT_SCALE;
526
+ }
200
527
  //# sourceMappingURL=pricing.js.map
@@ -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/dist/types.d.ts CHANGED
@@ -20,6 +20,26 @@ export interface ModelPricing {
20
20
  cacheRead: number;
21
21
  /** Cost per 1M cache creation tokens (USD). 0 if not applicable. */
22
22
  cacheWrite: number;
23
+ /**
24
+ * Cache storage cost per 1M tokens per hour (USD). Informational only:
25
+ * providers bill storage by wall-clock TTL, which `usage_events` does not
26
+ * record, so it is NOT included in `calculateCostMicrodollars`.
27
+ */
28
+ cacheStoragePerHour?: number;
29
+ /**
30
+ * A scheduled rate change. From `effectiveFrom` (ISO date, UTC) onward,
31
+ * `getPricing` returns these rates instead of the base ones. Encodes
32
+ * promotional pricing with a published end date so the cliff is in the
33
+ * table, not in someone's calendar.
34
+ */
35
+ scheduledChange?: {
36
+ effectiveFrom: string;
37
+ input: number;
38
+ output: number;
39
+ cacheRead: number;
40
+ cacheWrite: number;
41
+ cacheStoragePerHour?: number;
42
+ };
23
43
  }
24
44
  export type PlanName = 'free' | 'creator' | 'pro' | 'agency';
25
45
  export interface PlanLimits {
@@ -54,7 +74,7 @@ export interface UsageEvent {
54
74
  organizationId: string;
55
75
  /** Service name (e.g. 'agent', 'chunk-analyzer', 'reviral') */
56
76
  service: string;
57
- /** Model identifier (e.g. 'claude-sonnet-4-6', 'gemini-2.5-pro') */
77
+ /** Model identifier (e.g. 'claude-sonnet-4-6', 'gemini-3.1-pro-preview') */
58
78
  model: string;
59
79
  inputTokens: number;
60
80
  outputTokens: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../src/usage-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAUpE;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC,IAAI,CAAC,CA4Kf;AAMD,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,GAAG,mBAAmB,CASjF"}
1
+ {"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../src/usage-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAUpE;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC,IAAI,CAAC,CAiLf;AAMD,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,OAAO,GAAG,mBAAmB,CASjF"}
@@ -26,8 +26,13 @@ async function recordUsage(supabase, event, logger = defaultLogger) {
26
26
  event.outputTokens +
27
27
  (event.cacheReadTokens ?? 0) +
28
28
  (event.cacheCreationTokens ?? 0);
29
+ // Step 1: true provider cost, no markup. Stored in cost_microdollars so
30
+ // it reconciles against Google's and Anthropic's invoices. An override is
31
+ // the caller's raw provider cost and is stored as passed.
29
32
  const costMicrodollars = (0, pricing_1.calculateCostMicrodollars)(event.model, event.inputTokens, event.outputTokens, event.cacheReadTokens ?? 0, event.cacheCreationTokens ?? 0, event.costMicrodollarsOverride);
30
- const creditsConsumed = (0, pricing_1.microdollarsToCredits)(costMicrodollars);
33
+ // Step 2: exact conversion to credits, then COST_MARKUP, rounded once to
34
+ // 0.01 credit. The only place the customer's margin is applied.
35
+ const creditsConsumed = (0, pricing_1.calculateBilledCredits)(costMicrodollars);
31
36
  // Platform-paid metadata (auto-tag so analytics can filter)
32
37
  const effectiveMetadata = event.platformPaid
33
38
  ? { ...(event.metadata ?? {}), platform_paid: true }
@@ -1 +1 @@
1
- {"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../src/usage-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../src/usage-tracker.ts"],"names":[],"mappings":"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"}