@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/__tests__/billing-coverage.test.js +32 -8
- package/dist/__tests__/billing-coverage.test.js.map +1 -1
- package/dist/__tests__/pricing-gemini-billing.test.d.ts +2 -0
- package/dist/__tests__/pricing-gemini-billing.test.d.ts.map +1 -0
- package/dist/__tests__/pricing-gemini-billing.test.js +296 -0
- package/dist/__tests__/pricing-gemini-billing.test.js.map +1 -0
- package/dist/__tests__/pricing-gemini-embedding-2.test.d.ts +2 -0
- package/dist/__tests__/pricing-gemini-embedding-2.test.d.ts.map +1 -0
- package/dist/__tests__/pricing-gemini-embedding-2.test.js +104 -0
- package/dist/__tests__/pricing-gemini-embedding-2.test.js.map +1 -0
- package/dist/__tests__/pricing.test.js +138 -0
- package/dist/__tests__/pricing.test.js.map +1 -1
- package/dist/__tests__/usage-tracker.test.js +201 -3
- package/dist/__tests__/usage-tracker.test.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/pricing.d.ts +151 -14
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +355 -28
- package/dist/pricing.js.map +1 -1
- package/dist/types.d.ts +21 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/usage-tracker.d.ts.map +1 -1
- package/dist/usage-tracker.js +6 -1
- package/dist/usage-tracker.js.map +1 -1
- package/package.json +1 -1
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
|
|
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
|
-
*
|
|
73
|
-
* (
|
|
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
|
|
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
|
|
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
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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
|
|
111
|
-
const inputCost = inputTokens * p.input;
|
|
269
|
+
const inputCost = billableInputTokens * p.input;
|
|
112
270
|
const outputCost = outputTokens * p.output;
|
|
113
|
-
const cacheReadCost =
|
|
271
|
+
const cacheReadCost = billableCacheReadTokens * p.cacheRead;
|
|
114
272
|
const cacheWriteCost = cacheCreationTokens * p.cacheWrite;
|
|
115
|
-
|
|
116
|
-
|
|
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 (
|
|
365
|
+
// Vertex AI — Lyria 3 Pro music gen (billed per second of generated audio)
|
|
142
366
|
// ---------------------------------------------------------------------------
|
|
143
367
|
'lyria-3-pro-preview': {
|
|
144
|
-
unit: '
|
|
145
|
-
microdollarsPerUnit:
|
|
146
|
-
source: '
|
|
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
|
|
163
|
-
*
|
|
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
|
|
184
|
-
*
|
|
185
|
-
* the
|
|
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
|
|
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
|
package/dist/pricing.js.map
CHANGED
|
@@ -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-
|
|
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;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACrH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;CAC1B;AAMD,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;
|
|
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,
|
|
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"}
|
package/dist/usage-tracker.js
CHANGED
|
@@ -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
|
-
|
|
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":";;AAqBA,
|
|
1
|
+
{"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../src/usage-tracker.ts"],"names":[],"mappings":"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"}
|