@trazum/core 1.8.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/LICENSE +21 -0
- package/README.md +163 -0
- package/dist/advisories.d.ts +23 -0
- package/dist/advisories.d.ts.map +1 -0
- package/dist/advisories.js +376 -0
- package/dist/advisories.js.map +1 -0
- package/dist/aws-sigv4.d.ts +88 -0
- package/dist/aws-sigv4.d.ts.map +1 -0
- package/dist/aws-sigv4.js +117 -0
- package/dist/aws-sigv4.js.map +1 -0
- package/dist/baseline.d.ts +171 -0
- package/dist/baseline.d.ts.map +1 -0
- package/dist/baseline.js +273 -0
- package/dist/baseline.js.map +1 -0
- package/dist/cache.d.ts +26 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +28 -0
- package/dist/cache.js.map +1 -0
- package/dist/changes.d.ts +29 -0
- package/dist/changes.d.ts.map +1 -0
- package/dist/changes.js +142 -0
- package/dist/changes.js.map +1 -0
- package/dist/compare.d.ts +65 -0
- package/dist/compare.d.ts.map +1 -0
- package/dist/compare.js +58 -0
- package/dist/compare.js.map +1 -0
- package/dist/config-schema.d.ts +118 -0
- package/dist/config-schema.d.ts.map +1 -0
- package/dist/config-schema.js +315 -0
- package/dist/config-schema.js.map +1 -0
- package/dist/config.d.ts +47 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +112 -0
- package/dist/config.js.map +1 -0
- package/dist/detect.d.ts +70 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +228 -0
- package/dist/detect.js.map +1 -0
- package/dist/evaluate.d.ts +98 -0
- package/dist/evaluate.d.ts.map +1 -0
- package/dist/evaluate.js +110 -0
- package/dist/evaluate.js.map +1 -0
- package/dist/extract.d.ts +81 -0
- package/dist/extract.d.ts.map +1 -0
- package/dist/extract.js +280 -0
- package/dist/extract.js.map +1 -0
- package/dist/gcp-auth.d.ts +58 -0
- package/dist/gcp-auth.d.ts.map +1 -0
- package/dist/gcp-auth.js +113 -0
- package/dist/gcp-auth.js.map +1 -0
- package/dist/glob.d.ts +49 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +154 -0
- package/dist/glob.js.map +1 -0
- package/dist/host.d.ts +30 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +69 -0
- package/dist/host.js.map +1 -0
- package/dist/i18n/en.d.ts +4 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +168 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/es.d.ts +4 -0
- package/dist/i18n/es.d.ts.map +1 -0
- package/dist/i18n/es.js +168 -0
- package/dist/i18n/es.js.map +1 -0
- package/dist/i18n/index.d.ts +36 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +50 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/types.d.ts +180 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +11 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/llm.d.ts +226 -0
- package/dist/llm.d.ts.map +1 -0
- package/dist/llm.js +485 -0
- package/dist/llm.js.map +1 -0
- package/dist/nearest.d.ts +20 -0
- package/dist/nearest.d.ts.map +1 -0
- package/dist/nearest.js +54 -0
- package/dist/nearest.js.map +1 -0
- package/dist/net.d.ts +90 -0
- package/dist/net.d.ts.map +1 -0
- package/dist/net.js +203 -0
- package/dist/net.js.map +1 -0
- package/dist/node.d.ts +32 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +33 -0
- package/dist/node.js.map +1 -0
- package/dist/openrouter.d.ts +25 -0
- package/dist/openrouter.d.ts.map +1 -0
- package/dist/openrouter.js +72 -0
- package/dist/openrouter.js.map +1 -0
- package/dist/optimize.d.ts +38 -0
- package/dist/optimize.d.ts.map +1 -0
- package/dist/optimize.js +183 -0
- package/dist/optimize.js.map +1 -0
- package/dist/otlp.d.ts +91 -0
- package/dist/otlp.d.ts.map +1 -0
- package/dist/otlp.js +102 -0
- package/dist/otlp.js.map +1 -0
- package/dist/phrases.d.ts +169 -0
- package/dist/phrases.d.ts.map +1 -0
- package/dist/phrases.js +939 -0
- package/dist/phrases.js.map +1 -0
- package/dist/pricing-overlay.d.ts +55 -0
- package/dist/pricing-overlay.d.ts.map +1 -0
- package/dist/pricing-overlay.js +241 -0
- package/dist/pricing-overlay.js.map +1 -0
- package/dist/pricing.d.ts +115 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +400 -0
- package/dist/pricing.js.map +1 -0
- package/dist/profile.d.ts +71 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +55 -0
- package/dist/profile.js.map +1 -0
- package/dist/promptfoo.d.ts +58 -0
- package/dist/promptfoo.d.ts.map +1 -0
- package/dist/promptfoo.js +149 -0
- package/dist/promptfoo.js.map +1 -0
- package/dist/prune.d.ts +91 -0
- package/dist/prune.d.ts.map +1 -0
- package/dist/prune.js +110 -0
- package/dist/prune.js.map +1 -0
- package/dist/reorder.d.ts +82 -0
- package/dist/reorder.d.ts.map +1 -0
- package/dist/reorder.js +215 -0
- package/dist/reorder.js.map +1 -0
- package/dist/review.d.ts +54 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +131 -0
- package/dist/review.js.map +1 -0
- package/dist/rules.d.ts +5 -0
- package/dist/rules.d.ts.map +1 -0
- package/dist/rules.js +279 -0
- package/dist/rules.js.map +1 -0
- package/dist/savings.d.ts +36 -0
- package/dist/savings.d.ts.map +1 -0
- package/dist/savings.js +83 -0
- package/dist/savings.js.map +1 -0
- package/dist/segment.d.ts +8 -0
- package/dist/segment.d.ts.map +1 -0
- package/dist/segment.js +74 -0
- package/dist/segment.js.map +1 -0
- package/dist/shared-prefix.d.ts +63 -0
- package/dist/shared-prefix.d.ts.map +1 -0
- package/dist/shared-prefix.js +151 -0
- package/dist/shared-prefix.js.map +1 -0
- package/dist/similarity.d.ts +13 -0
- package/dist/similarity.d.ts.map +1 -0
- package/dist/similarity.js +30 -0
- package/dist/similarity.js.map +1 -0
- package/dist/structure.d.ts +144 -0
- package/dist/structure.d.ts.map +1 -0
- package/dist/structure.js +455 -0
- package/dist/structure.js.map +1 -0
- package/dist/suggest.d.ts +100 -0
- package/dist/suggest.d.ts.map +1 -0
- package/dist/suggest.js +151 -0
- package/dist/suggest.js.map +1 -0
- package/dist/tokenizer.d.ts +57 -0
- package/dist/tokenizer.d.ts.map +1 -0
- package/dist/tokenizer.js +157 -0
- package/dist/tokenizer.js.map +1 -0
- package/dist/types.d.ts +296 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/walk.d.ts +40 -0
- package/dist/walk.d.ts.map +1 -0
- package/dist/walk.js +95 -0
- package/dist/walk.js.map +1 -0
- package/package.json +56 -0
- package/src/advisories.ts +431 -0
- package/src/aws-sigv4.ts +174 -0
- package/src/baseline.ts +390 -0
- package/src/cache.ts +54 -0
- package/src/changes.ts +158 -0
- package/src/compare.ts +131 -0
- package/src/config-schema.ts +451 -0
- package/src/config.ts +161 -0
- package/src/detect.ts +312 -0
- package/src/evaluate.ts +188 -0
- package/src/extract.ts +336 -0
- package/src/gcp-auth.ts +166 -0
- package/src/glob.ts +160 -0
- package/src/host.ts +90 -0
- package/src/i18n/en.ts +236 -0
- package/src/i18n/es.ts +236 -0
- package/src/i18n/index.ts +68 -0
- package/src/i18n/types.ts +230 -0
- package/src/index.ts +228 -0
- package/src/llm.ts +708 -0
- package/src/nearest.ts +61 -0
- package/src/net.ts +233 -0
- package/src/node.ts +63 -0
- package/src/openrouter.ts +125 -0
- package/src/optimize.ts +228 -0
- package/src/otlp.ts +179 -0
- package/src/phrases.ts +1047 -0
- package/src/pricing-overlay.ts +319 -0
- package/src/pricing.ts +468 -0
- package/src/profile.ts +124 -0
- package/src/promptfoo.ts +213 -0
- package/src/prune.ts +211 -0
- package/src/reorder.ts +307 -0
- package/src/review.ts +180 -0
- package/src/rules.ts +324 -0
- package/src/savings.ts +121 -0
- package/src/segment.ts +106 -0
- package/src/shared-prefix.ts +198 -0
- package/src/similarity.ts +28 -0
- package/src/structure.ts +652 -0
- package/src/suggest.ts +254 -0
- package/src/tokenizer.ts +190 -0
- package/src/types.ts +323 -0
- package/src/walk.ts +117 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phrases.js","sourceRoot":"","sources":["../src/phrases.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { PricingCatalogue } from './pricing.js';
|
|
2
|
+
import type { ModelPricing } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Local price corrections, so a price change does not require a library upgrade.
|
|
5
|
+
*
|
|
6
|
+
* This is the honest answer to "pricing data separated from the release cycle".
|
|
7
|
+
* A separate `@trazum/pricing` package would not have achieved it — you would
|
|
8
|
+
* still need to install something to get current numbers. A JSON file in your own
|
|
9
|
+
* repository does, and it keeps the two properties that matter: **the core still
|
|
10
|
+
* makes no network call**, and it still has no dependencies.
|
|
11
|
+
*
|
|
12
|
+
* The bundled catalogue remains the default, so Trazum is correct out of the box
|
|
13
|
+
* and an overlay is only needed once a published price moves.
|
|
14
|
+
*
|
|
15
|
+
* Validation is as strict as the config parser's, for the same reason: a typo'd
|
|
16
|
+
* model id in an overlay would silently price against the bundled number, and a
|
|
17
|
+
* budget decision made on a price nobody applied is the failure this whole file
|
|
18
|
+
* exists to prevent.
|
|
19
|
+
*/
|
|
20
|
+
export declare const PRICING_OVERLAY_KEYS: readonly ['lastReviewed', 'models'];
|
|
21
|
+
export declare const PRICING_MODEL_KEYS: readonly ['displayName', 'inputPerMTok', 'outputPerMTok', 'contextWindow', 'cacheMinTokens', 'tier', 'capability', 'caching', 'notes', 'promo'];
|
|
22
|
+
/** Largest overlay this will read — a price list, not a dataset. */
|
|
23
|
+
export declare const MAX_PRICING_BYTES: number;
|
|
24
|
+
export interface PricingOverlay {
|
|
25
|
+
/**
|
|
26
|
+
* When these prices were checked, as `YYYY-MM-DD`. Required: an overlay whose
|
|
27
|
+
* age is unknown is worse than the bundled catalogue, whose age is printed on
|
|
28
|
+
* every report.
|
|
29
|
+
*/
|
|
30
|
+
lastReviewed: string;
|
|
31
|
+
/** Per-model corrections, keyed by model id. */
|
|
32
|
+
models: Record<string, Partial<Omit<ModelPricing, 'id'>>>;
|
|
33
|
+
}
|
|
34
|
+
export declare class PricingOverlayError extends Error {
|
|
35
|
+
readonly source: string;
|
|
36
|
+
constructor(message: string, source: string);
|
|
37
|
+
}
|
|
38
|
+
/** Validates an overlay document. Every failure throws, with the source named. */
|
|
39
|
+
export declare function parsePricingOverlay(raw: string, source?: string): PricingOverlay;
|
|
40
|
+
/**
|
|
41
|
+
* A new catalogue with the overlay applied. Neither argument is modified.
|
|
42
|
+
*
|
|
43
|
+
* **A model the bundled catalogue does not have must be complete.** Overriding
|
|
44
|
+
* one field of a known model is the common case and needs no more than that
|
|
45
|
+
* field; inventing a model needs every field, because a half-defined model would
|
|
46
|
+
* price at zero somewhere and report a saving that does not exist.
|
|
47
|
+
*
|
|
48
|
+
* `lastReviewed` becomes the *overlay's* date, and the report shows it — a
|
|
49
|
+
* catalogue is only as current as its most recently touched half, and claiming
|
|
50
|
+
* the bundled date over corrected prices would be a lie about provenance.
|
|
51
|
+
*/
|
|
52
|
+
export declare function applyPricingOverlay(base: PricingCatalogue, overlay: PricingOverlay, source?: string): PricingCatalogue;
|
|
53
|
+
/** Convenience: the bundled catalogue with an overlay document applied. */
|
|
54
|
+
export declare function catalogueFromOverlay(raw: string, source?: string): PricingCatalogue;
|
|
55
|
+
//# sourceMappingURL=pricing-overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing-overlay.d.ts","sourceRoot":"","sources":["../src/pricing-overlay.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAA2B,YAAY,EAAE,MAAM,YAAY,CAAC;AAExE;;;;;;;;;;;;;;;;GAgBG;AAEH,eAAO,MAAM,oBAAoB,YAAI,cAAc,EAAE,QAAQ,CAAU,CAAC;AAExE,eAAO,MAAM,kBAAkB,YAC7B,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,SAAS,EACT,OAAO,EACP,OAAO,CACC,CAAC;AAQX,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CAC3D;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAG1C,QAAQ,CAAC,MAAM,EAAE,MAAM;IAFzB,YACE,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM,EAIxB;CACF;AAqJD,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAoB,GAAG,cAAc,CAkC3F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,MAAM,SAAoB,GACzB,gBAAgB,CA6ClB;AAED,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAoB,GAAG,gBAAgB,CAE9F"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { BUNDLED_CATALOGUE } from './pricing.js';
|
|
2
|
+
import { nearestName } from './nearest.js';
|
|
3
|
+
/**
|
|
4
|
+
* Local price corrections, so a price change does not require a library upgrade.
|
|
5
|
+
*
|
|
6
|
+
* This is the honest answer to "pricing data separated from the release cycle".
|
|
7
|
+
* A separate `@trazum/pricing` package would not have achieved it — you would
|
|
8
|
+
* still need to install something to get current numbers. A JSON file in your own
|
|
9
|
+
* repository does, and it keeps the two properties that matter: **the core still
|
|
10
|
+
* makes no network call**, and it still has no dependencies.
|
|
11
|
+
*
|
|
12
|
+
* The bundled catalogue remains the default, so Trazum is correct out of the box
|
|
13
|
+
* and an overlay is only needed once a published price moves.
|
|
14
|
+
*
|
|
15
|
+
* Validation is as strict as the config parser's, for the same reason: a typo'd
|
|
16
|
+
* model id in an overlay would silently price against the bundled number, and a
|
|
17
|
+
* budget decision made on a price nobody applied is the failure this whole file
|
|
18
|
+
* exists to prevent.
|
|
19
|
+
*/
|
|
20
|
+
export const PRICING_OVERLAY_KEYS = ['lastReviewed', 'models'];
|
|
21
|
+
export const PRICING_MODEL_KEYS = [
|
|
22
|
+
'displayName',
|
|
23
|
+
'inputPerMTok',
|
|
24
|
+
'outputPerMTok',
|
|
25
|
+
'contextWindow',
|
|
26
|
+
'cacheMinTokens',
|
|
27
|
+
'tier',
|
|
28
|
+
'capability',
|
|
29
|
+
'caching',
|
|
30
|
+
'notes',
|
|
31
|
+
'promo',
|
|
32
|
+
];
|
|
33
|
+
const PROMO_KEYS = ['inputPerMTok', 'outputPerMTok', 'until'];
|
|
34
|
+
const TIERS = ['frontier', 'opus', 'sonnet', 'haiku', 'unknown'];
|
|
35
|
+
const CAPABILITIES = ['small', 'mid', 'large', 'frontier', 'unknown'];
|
|
36
|
+
const CACHING_MODES = ['explicit', 'automatic', 'none', 'unknown'];
|
|
37
|
+
/** Largest overlay this will read — a price list, not a dataset. */
|
|
38
|
+
export const MAX_PRICING_BYTES = 64 * 1024;
|
|
39
|
+
export class PricingOverlayError extends Error {
|
|
40
|
+
source;
|
|
41
|
+
constructor(message, source) {
|
|
42
|
+
super(`${source}: ${message}`);
|
|
43
|
+
this.source = source;
|
|
44
|
+
this.name = 'PricingOverlayError';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const isPlainObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
48
|
+
const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
|
|
49
|
+
function rejectUnknownKeys(object, allowed, source, path) {
|
|
50
|
+
for (const key of Object.keys(object)) {
|
|
51
|
+
if (allowed.includes(key))
|
|
52
|
+
continue;
|
|
53
|
+
const nearest = nearestName(key, allowed);
|
|
54
|
+
throw new PricingOverlayError(nearest
|
|
55
|
+
? `unknown key "${path}${key}" — did you mean "${nearest}"?`
|
|
56
|
+
: `unknown key "${path}${key}". Known keys: ${allowed.join(', ')}`, source);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function positiveNumber(value, label, source) {
|
|
60
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {
|
|
61
|
+
throw new PricingOverlayError(`"${label}" must be a number greater than 0`, source);
|
|
62
|
+
}
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
function integerAbove(value, label, source) {
|
|
66
|
+
const n = positiveNumber(value, label, source);
|
|
67
|
+
if (!Number.isInteger(n)) {
|
|
68
|
+
throw new PricingOverlayError(`"${label}" must be a whole number`, source);
|
|
69
|
+
}
|
|
70
|
+
return n;
|
|
71
|
+
}
|
|
72
|
+
function parsePromo(raw, label, source) {
|
|
73
|
+
if (!isPlainObject(raw)) {
|
|
74
|
+
throw new PricingOverlayError(`"${label}" must be an object`, source);
|
|
75
|
+
}
|
|
76
|
+
rejectUnknownKeys(raw, PROMO_KEYS, source, `${label}.`);
|
|
77
|
+
for (const key of PROMO_KEYS) {
|
|
78
|
+
if (raw[key] === undefined) {
|
|
79
|
+
throw new PricingOverlayError(`"${label}" needs all of ${PROMO_KEYS.join(', ')} — a partial promotion has no meaning`, source);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (typeof raw.until !== 'string' || !ISO_DATE.test(raw.until)) {
|
|
83
|
+
throw new PricingOverlayError(`"${label}.until" must be a date like 2026-08-31`, source);
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
inputPerMTok: positiveNumber(raw.inputPerMTok, `${label}.inputPerMTok`, source),
|
|
87
|
+
outputPerMTok: positiveNumber(raw.outputPerMTok, `${label}.outputPerMTok`, source),
|
|
88
|
+
until: raw.until,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function parseModel(raw, id, source) {
|
|
92
|
+
if (!isPlainObject(raw)) {
|
|
93
|
+
throw new PricingOverlayError(`"models.${id}" must be an object`, source);
|
|
94
|
+
}
|
|
95
|
+
rejectUnknownKeys(raw, PRICING_MODEL_KEYS, source, `models.${id}.`);
|
|
96
|
+
if (Object.keys(raw).length === 0) {
|
|
97
|
+
throw new PricingOverlayError(`"models.${id}" is empty — remove it, or say what it changes`, source);
|
|
98
|
+
}
|
|
99
|
+
const model = {};
|
|
100
|
+
if (raw.displayName !== undefined) {
|
|
101
|
+
if (typeof raw.displayName !== 'string' || raw.displayName.trim() === '') {
|
|
102
|
+
throw new PricingOverlayError(`"models.${id}.displayName" must be a non-empty string`, source);
|
|
103
|
+
}
|
|
104
|
+
model.displayName = raw.displayName;
|
|
105
|
+
}
|
|
106
|
+
if (raw.inputPerMTok !== undefined) {
|
|
107
|
+
model.inputPerMTok = positiveNumber(raw.inputPerMTok, `models.${id}.inputPerMTok`, source);
|
|
108
|
+
}
|
|
109
|
+
if (raw.outputPerMTok !== undefined) {
|
|
110
|
+
model.outputPerMTok = positiveNumber(raw.outputPerMTok, `models.${id}.outputPerMTok`, source);
|
|
111
|
+
}
|
|
112
|
+
if (raw.contextWindow !== undefined) {
|
|
113
|
+
model.contextWindow = integerAbove(raw.contextWindow, `models.${id}.contextWindow`, source);
|
|
114
|
+
}
|
|
115
|
+
if (raw.cacheMinTokens !== undefined) {
|
|
116
|
+
// `null` is "this catalogue does not know", which is a different statement
|
|
117
|
+
// from any number — including zero, which claims caching from the first
|
|
118
|
+
// token. A live price feed knows what a model costs and nothing about how
|
|
119
|
+
// it caches, so the distinction has to be expressible.
|
|
120
|
+
model.cacheMinTokens =
|
|
121
|
+
raw.cacheMinTokens === null
|
|
122
|
+
? null
|
|
123
|
+
: integerAbove(raw.cacheMinTokens, `models.${id}.cacheMinTokens`, source);
|
|
124
|
+
}
|
|
125
|
+
if (raw.capability !== undefined) {
|
|
126
|
+
if (typeof raw.capability !== 'string' || !CAPABILITIES.includes(raw.capability)) {
|
|
127
|
+
throw new PricingOverlayError(`"models.${id}.capability" must be one of ${CAPABILITIES.join(', ')}`, source);
|
|
128
|
+
}
|
|
129
|
+
model.capability = raw.capability;
|
|
130
|
+
}
|
|
131
|
+
if (raw.caching !== undefined) {
|
|
132
|
+
if (typeof raw.caching !== 'string' || !CACHING_MODES.includes(raw.caching)) {
|
|
133
|
+
throw new PricingOverlayError(`"models.${id}.caching" must be one of ${CACHING_MODES.join(', ')}`, source);
|
|
134
|
+
}
|
|
135
|
+
model.caching = raw.caching;
|
|
136
|
+
}
|
|
137
|
+
if (raw.tier !== undefined) {
|
|
138
|
+
if (typeof raw.tier !== 'string' || !TIERS.includes(raw.tier)) {
|
|
139
|
+
throw new PricingOverlayError(`"models.${id}.tier" must be one of ${TIERS.join(', ')}`, source);
|
|
140
|
+
}
|
|
141
|
+
model.tier = raw.tier;
|
|
142
|
+
}
|
|
143
|
+
if (raw.notes !== undefined) {
|
|
144
|
+
if (typeof raw.notes !== 'string') {
|
|
145
|
+
throw new PricingOverlayError(`"models.${id}.notes" must be a string`, source);
|
|
146
|
+
}
|
|
147
|
+
model.notes = raw.notes;
|
|
148
|
+
}
|
|
149
|
+
if (raw.promo !== undefined) {
|
|
150
|
+
// `null` is how you cancel a bundled promotion that has been withdrawn.
|
|
151
|
+
model.promo = raw.promo === null ? undefined : parsePromo(raw.promo, `models.${id}.promo`, source);
|
|
152
|
+
}
|
|
153
|
+
return model;
|
|
154
|
+
}
|
|
155
|
+
/** Validates an overlay document. Every failure throws, with the source named. */
|
|
156
|
+
export function parsePricingOverlay(raw, source = 'pricing overlay') {
|
|
157
|
+
let document;
|
|
158
|
+
try {
|
|
159
|
+
document = JSON.parse(raw);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
163
|
+
throw new PricingOverlayError(`not valid JSON — ${detail}`, source);
|
|
164
|
+
}
|
|
165
|
+
if (!isPlainObject(document)) {
|
|
166
|
+
throw new PricingOverlayError('the top level must be an object', source);
|
|
167
|
+
}
|
|
168
|
+
rejectUnknownKeys(document, PRICING_OVERLAY_KEYS, source, '');
|
|
169
|
+
if (typeof document.lastReviewed !== 'string' || !ISO_DATE.test(document.lastReviewed)) {
|
|
170
|
+
throw new PricingOverlayError('"lastReviewed" is required and must be a date like 2026-06-24. ' +
|
|
171
|
+
'An overlay of unknown age is worse than the bundled catalogue, whose age is printed.', source);
|
|
172
|
+
}
|
|
173
|
+
if (!isPlainObject(document.models) || Object.keys(document.models).length === 0) {
|
|
174
|
+
throw new PricingOverlayError('"models" must be a non-empty object keyed by model id', source);
|
|
175
|
+
}
|
|
176
|
+
const models = {};
|
|
177
|
+
for (const [id, value] of Object.entries(document.models)) {
|
|
178
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(id)) {
|
|
179
|
+
throw new PricingOverlayError(`"${id}" is not a plausible model id`, source);
|
|
180
|
+
}
|
|
181
|
+
models[id] = parseModel(value, id, source);
|
|
182
|
+
}
|
|
183
|
+
return { lastReviewed: document.lastReviewed, models };
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* A new catalogue with the overlay applied. Neither argument is modified.
|
|
187
|
+
*
|
|
188
|
+
* **A model the bundled catalogue does not have must be complete.** Overriding
|
|
189
|
+
* one field of a known model is the common case and needs no more than that
|
|
190
|
+
* field; inventing a model needs every field, because a half-defined model would
|
|
191
|
+
* price at zero somewhere and report a saving that does not exist.
|
|
192
|
+
*
|
|
193
|
+
* `lastReviewed` becomes the *overlay's* date, and the report shows it — a
|
|
194
|
+
* catalogue is only as current as its most recently touched half, and claiming
|
|
195
|
+
* the bundled date over corrected prices would be a lie about provenance.
|
|
196
|
+
*/
|
|
197
|
+
export function applyPricingOverlay(base, overlay, source = 'pricing overlay') {
|
|
198
|
+
const overridden = [];
|
|
199
|
+
const added = [];
|
|
200
|
+
const models = base.models.map((model) => {
|
|
201
|
+
const patch = overlay.models[model.id];
|
|
202
|
+
if (!patch)
|
|
203
|
+
return model;
|
|
204
|
+
overridden.push(model.id);
|
|
205
|
+
// `promo` is spread explicitly: a patch that sets it to undefined must remove
|
|
206
|
+
// a withdrawn promotion rather than be ignored as a missing key.
|
|
207
|
+
const merged = { ...model, ...patch };
|
|
208
|
+
if ('promo' in patch && patch.promo === undefined)
|
|
209
|
+
delete merged.promo;
|
|
210
|
+
return merged;
|
|
211
|
+
});
|
|
212
|
+
for (const [id, patch] of Object.entries(overlay.models)) {
|
|
213
|
+
if (base.byId.has(id))
|
|
214
|
+
continue;
|
|
215
|
+
// `capability` joins the list: it is a required field of `ModelPricing`, and
|
|
216
|
+
// an added model without one produced an object the type says cannot exist —
|
|
217
|
+
// the cast below was hiding it.
|
|
218
|
+
//
|
|
219
|
+
// `cacheMinTokens` is checked for `undefined` and not for falsiness, so an
|
|
220
|
+
// explicit `null` counts as supplied. That is the point of it: saying "not
|
|
221
|
+
// known" is an answer, leaving it out is not.
|
|
222
|
+
const missing = ['displayName', 'inputPerMTok', 'outputPerMTok', 'contextWindow', 'cacheMinTokens', 'tier', 'capability'].filter((key) => patch[key] === undefined);
|
|
223
|
+
if (missing.length > 0) {
|
|
224
|
+
throw new PricingOverlayError(`"models.${id}" is not in the bundled catalogue, so it has to be complete. Missing: ${missing.join(', ')}`, source);
|
|
225
|
+
}
|
|
226
|
+
models.push({ id, ...patch });
|
|
227
|
+
added.push(id);
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
models,
|
|
231
|
+
byId: new Map(models.map((m) => [m.id, m])),
|
|
232
|
+
lastReviewed: overlay.lastReviewed,
|
|
233
|
+
overriddenModels: overridden.sort(),
|
|
234
|
+
addedModels: added.sort(),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/** Convenience: the bundled catalogue with an overlay document applied. */
|
|
238
|
+
export function catalogueFromOverlay(raw, source = 'pricing overlay') {
|
|
239
|
+
return applyPricingOverlay(BUNDLED_CATALOGUE, parsePricingOverlay(raw, source), source);
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=pricing-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing-overlay.js","sourceRoot":"","sources":["../src/pricing-overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI3C;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAU,CAAC;AAExE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,aAAa;IACb,cAAc;IACd,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,MAAM;IACN,YAAY;IACZ,SAAS;IACT,OAAO;IACP,OAAO;CACC,CAAC;AAEX,MAAM,UAAU,GAAG,CAAC,cAAc,EAAE,eAAe,EAAE,OAAO,CAAU,CAAC;AAEvE,MAAM,KAAK,GAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACzF,MAAM,YAAY,GAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AACpF,MAAM,aAAa,GAAkB,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAElF,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AAa3C,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAGjC,MAAM;IAFjB,YACE,OAAe,EACN,MAAc;QAEvB,KAAK,CAAC,GAAG,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;sBAFtB,MAAM;QAGf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,aAAa,GAAG,CAAC,KAAc,EAAoC,EAAE,CACzE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AAEvC,SAAS,iBAAiB,CACxB,MAA+B,EAC/B,OAA0B,EAC1B,MAAc,EACd,IAAY;IAEZ,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QACpC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,IAAI,mBAAmB,CAC3B,OAAO;YACL,CAAC,CAAC,gBAAgB,IAAI,GAAG,GAAG,qBAAqB,OAAO,IAAI;YAC5D,CAAC,CAAC,gBAAgB,IAAI,GAAG,GAAG,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACpE,MAAM,CACP,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa,EAAE,MAAc;IACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,mBAAmB,CAAC,IAAI,KAAK,mCAAmC,EAAE,MAAM,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,KAAa,EAAE,MAAc;IACjE,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,mBAAmB,CAAC,IAAI,KAAK,0BAA0B,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,UAAU,CAAC,GAAY,EAAE,KAAa,EAAE,MAAc;IAC7D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,mBAAmB,CAAC,IAAI,KAAK,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IACD,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;IAExD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,mBAAmB,CAC3B,IAAI,KAAK,kBAAkB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,uCAAuC,EACvF,MAAM,CACP,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,mBAAmB,CAAC,IAAI,KAAK,wCAAwC,EAAE,MAAM,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO;QACL,YAAY,EAAE,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,KAAK,eAAe,EAAE,MAAM,CAAC;QAC/E,aAAa,EAAE,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,KAAK,gBAAgB,EAAE,MAAM,CAAC;QAClF,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,GAAY,EACZ,EAAU,EACV,MAAc;IAEd,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,mBAAmB,CAAC,WAAW,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC5E,CAAC;IACD,iBAAiB,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,mBAAmB,CAC3B,WAAW,EAAE,gDAAgD,EAC7D,MAAM,CACP,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAsC,EAAE,CAAC;IAEpD,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzE,MAAM,IAAI,mBAAmB,CAAC,WAAW,EAAE,0CAA0C,EAAE,MAAM,CAAC,CAAC;QACjG,CAAC;QACD,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IACtC,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACnC,KAAK,CAAC,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACpC,KAAK,CAAC,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACpC,KAAK,CAAC,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACrC,2EAA2E;QAC3E,wEAAwE;QACxE,0EAA0E;QAC1E,uDAAuD;QACvD,KAAK,CAAC,cAAc;YAClB,GAAG,CAAC,cAAc,KAAK,IAAI;gBACzB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAwB,CAAC,EAAE,CAAC;YAC/F,MAAM,IAAI,mBAAmB,CAC3B,WAAW,EAAE,+BAA+B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACrE,MAAM,CACP,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,UAAwB,CAAC;IAClD,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAsB,CAAC,EAAE,CAAC;YAC3F,MAAM,IAAI,mBAAmB,CAC3B,WAAW,EAAE,4BAA4B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACnE,MAAM,CACP,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,OAAsB,CAAC;IAC7C,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAA4B,CAAC,EAAE,CAAC;YACtF,MAAM,IAAI,mBAAmB,CAC3B,WAAW,EAAE,yBAAyB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACxD,MAAM,CACP,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAA4B,CAAC;IAChD,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,mBAAmB,CAAC,WAAW,EAAE,0BAA0B,EAAE,MAAM,CAAC,CAAC;QACjF,CAAC;QACD,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5B,wEAAwE;QACxE,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrG,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,MAAM,GAAG,iBAAiB;IACzE,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,IAAI,mBAAmB,CAAC,oBAAoB,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,mBAAmB,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;IACD,iBAAiB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAE9D,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACvF,MAAM,IAAI,mBAAmB,CAC3B,iEAAiE;YAC/D,sFAAsF,EACxF,MAAM,CACP,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,mBAAmB,CAAC,uDAAuD,EAAE,MAAM,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,MAAM,GAAsD,EAAE,CAAC;IACrE,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,mBAAmB,CAAC,IAAI,EAAE,+BAA+B,EAAE,MAAM,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAsB,EACtB,OAAuB,EACvB,MAAM,GAAG,iBAAiB;IAE1B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1B,8EAA8E;QAC9E,iEAAiE;QACjE,MAAM,MAAM,GAAiB,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;QACpD,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC;QACvE,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAS;QAEhC,6EAA6E;QAC7E,6EAA6E;QAC7E,gCAAgC;QAChC,EAAE;QACF,2EAA2E;QAC3E,2EAA2E;QAC3E,8CAA8C;QAC9C,MAAM,OAAO,GAAI,CAAC,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,CAAW,CAAC,MAAM,CACzI,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,CAClC,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,mBAAmB,CAC3B,WAAW,EAAE,yEAAyE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC1G,MAAM,CACP,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAkB,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO;QACL,MAAM;QACN,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,gBAAgB,EAAE,UAAU,CAAC,IAAI,EAAE;QACnC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE;KAC1B,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAE,MAAM,GAAG,iBAAiB;IAC1E,OAAO,mBAAmB,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { ModelPricing } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Model and pricing catalogue (USD per million tokens).
|
|
4
|
+
*
|
|
5
|
+
* Source: official Claude API documentation. Prices change: check
|
|
6
|
+
* `PRICING_LAST_REVIEWED` and update this file before making budget decisions.
|
|
7
|
+
* Amazon Bedrock and Vertex AI pricing is set by each partner and is NOT the
|
|
8
|
+
* pricing in this table.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PRICING_LAST_REVIEWED = "2026-06-24";
|
|
11
|
+
/** Cost multipliers relative to the input price. */
|
|
12
|
+
/**
|
|
13
|
+
* The defaults, which are Anthropic's numbers.
|
|
14
|
+
*
|
|
15
|
+
* Still exported and still correct for every Anthropic model, but no longer the
|
|
16
|
+
* whole story: a model can override any of these through `multipliers`, and
|
|
17
|
+
* anything computing a cost should go through `multipliersFor` rather than
|
|
18
|
+
* reading these directly. A cache read is ~10% of input on Anthropic and ~50%
|
|
19
|
+
* on OpenAI, and using one number for both invents a saving.
|
|
20
|
+
*/
|
|
21
|
+
export declare const COST_MULTIPLIERS: {
|
|
22
|
+
/** Cache write with a 5-minute TTL. */
|
|
23
|
+
readonly cacheWrite5m: 1.25;
|
|
24
|
+
/** Cache write with a 1-hour TTL. */
|
|
25
|
+
readonly cacheWrite1h: 2;
|
|
26
|
+
/** Cache read: ~10% of the input price. */
|
|
27
|
+
readonly cacheRead: 0.1;
|
|
28
|
+
/** Batch API: 50% discount on input and output. */
|
|
29
|
+
readonly batch: 0.5;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* The multipliers that apply to one model, defaults filled in.
|
|
33
|
+
*
|
|
34
|
+
* `batch` stays `null` when the provider has no batch API, which is different
|
|
35
|
+
* from "unspecified": the first should stop the advisory firing, the second
|
|
36
|
+
* should fall back to the default.
|
|
37
|
+
*/
|
|
38
|
+
export declare function multipliersFor(model: ModelPricing): {
|
|
39
|
+
cacheWrite5m: number;
|
|
40
|
+
cacheWrite1h: number;
|
|
41
|
+
cacheRead: number;
|
|
42
|
+
batch: number | null;
|
|
43
|
+
};
|
|
44
|
+
export declare const MODELS: ModelPricing[];
|
|
45
|
+
export declare const DEFAULT_MODEL = "claude-opus-5";
|
|
46
|
+
/**
|
|
47
|
+
* A set of prices to work from.
|
|
48
|
+
*
|
|
49
|
+
* Prices change on someone else's schedule, and until 1.0 correcting one meant
|
|
50
|
+
* upgrading the library — which is backwards: a stale price is a wrong number in
|
|
51
|
+
* a budget decision, and nobody should have to take a dependency bump to fix it.
|
|
52
|
+
*
|
|
53
|
+
* So the catalogue is a **value**, not module state. The bundled one below is the
|
|
54
|
+
* default, and `applyPricingOverlay` returns a *new* catalogue with local
|
|
55
|
+
* corrections layered on. Nothing mutates: a caller who overlays prices does not
|
|
56
|
+
* change what any other caller sees, and two catalogues can exist in one process
|
|
57
|
+
* — which is what makes it testable and what stops one consumer's local prices
|
|
58
|
+
* leaking into another's report.
|
|
59
|
+
*/
|
|
60
|
+
export interface PricingCatalogue {
|
|
61
|
+
models: ModelPricing[];
|
|
62
|
+
byId: Map<string, ModelPricing>;
|
|
63
|
+
/** The date the prices in this catalogue were last checked. */
|
|
64
|
+
lastReviewed: string;
|
|
65
|
+
/** Ids whose bundled prices an overlay replaced. Empty for the bundled set. */
|
|
66
|
+
overriddenModels: string[];
|
|
67
|
+
/** Ids an overlay introduced that the bundled catalogue does not have. */
|
|
68
|
+
addedModels: string[];
|
|
69
|
+
}
|
|
70
|
+
/** The prices compiled into this release. */
|
|
71
|
+
export declare const BUNDLED_CATALOGUE: PricingCatalogue;
|
|
72
|
+
/** Looks a model up in a specific catalogue. */
|
|
73
|
+
export declare function modelFrom(catalogue: PricingCatalogue, id: string): ModelPricing;
|
|
74
|
+
/**
|
|
75
|
+
* Cheapest model of a tier within a catalogue.
|
|
76
|
+
*
|
|
77
|
+
* Compared on the **effective** price, so a model in a promotional window is
|
|
78
|
+
* ranked at what it actually costs today rather than at its list price.
|
|
79
|
+
*/
|
|
80
|
+
export declare function cheapestOfTierIn(catalogue: PricingCatalogue, tier: ModelPricing['tier'], on?: Date,
|
|
81
|
+
/**
|
|
82
|
+
* Restrict to one provider. Omit to search the whole catalogue, which is what
|
|
83
|
+
* this did before other providers existed — kept as the default so the
|
|
84
|
+
* signature stays additive, though the advisory always passes one: switching
|
|
85
|
+
* vendor is a migration, not a cheaper model.
|
|
86
|
+
*/
|
|
87
|
+
provider?: string): ModelPricing;
|
|
88
|
+
export declare function getModel(id: string): ModelPricing;
|
|
89
|
+
export declare function listModels(): ModelPricing[];
|
|
90
|
+
/** Effective price on a given date, applying any live promotion. */
|
|
91
|
+
export declare function effectivePricing(model: ModelPricing, on?: Date): {
|
|
92
|
+
inputPerMTok: number;
|
|
93
|
+
outputPerMTok: number;
|
|
94
|
+
promoApplied: boolean;
|
|
95
|
+
};
|
|
96
|
+
/** Cheapest model of each capability tier, for recommendations. */
|
|
97
|
+
export declare function cheapestOfTier(tier: ModelPricing['tier']): ModelPricing;
|
|
98
|
+
/**
|
|
99
|
+
* Whole days between a `YYYY-MM-DD` review date and now, or `null`.
|
|
100
|
+
*
|
|
101
|
+
* Every dollar figure Trazum prints descends from a price list, and the list
|
|
102
|
+
* carries the date it was checked. Printing only that date makes the reader do
|
|
103
|
+
* arithmetic against today to learn the one thing they wanted to know — whether
|
|
104
|
+
* to trust it — and a reader who is not already suspicious will not bother.
|
|
105
|
+
*
|
|
106
|
+
* `now` is a parameter for the reason `computeSavings` takes a `Date`: a function
|
|
107
|
+
* that reads the clock can only be asserted for shape.
|
|
108
|
+
*
|
|
109
|
+
* Compared at UTC midnight on both sides, so the answer does not change by one
|
|
110
|
+
* depending on what time of day the command runs. `null` for anything that is not
|
|
111
|
+
* a date — an overlay supplies this string, and a wrong one should read as
|
|
112
|
+
* unknown rather than as a confident number computed from `NaN`.
|
|
113
|
+
*/
|
|
114
|
+
export declare function reviewAgeDays(lastReviewed: string, now: Date): number | null;
|
|
115
|
+
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAElD,oDAAoD;AACpD;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB;IAC3B,uCAAuC;aACvC,YAAY,EAAE,IAAI;IAClB,qCAAqC;aACrC,YAAY,EAAE,CAAG;IACjB,2CAA2C;aAC3C,SAAS,EAAE,GAAG;IACd,mDAAmD;aACnD,KAAK,EAAE,GAAG;CACF,CAAC;AAEX;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAQA;AAED,eAAO,MAAM,MAAM,EAAE,YAAY,EAiQhC,CAAC;AAEF,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAChC,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,0EAA0E;IAC1E,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAiBD,6CAA6C;AAC7C,eAAO,MAAM,iBAAiB,EAAE,gBAA+D,CAAC;AAEhG,gDAAgD;AAChD,wBAAgB,SAAS,CAAC,SAAS,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,CAQ/E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,gBAAgB,EAC3B,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAC1B,EAAE,GAAE,IAAiB;AACrB;;;;;GAKG;AACH,QAAQ,CAAC,EAAE,MAAM,GAChB,YAAY,CAcd;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAEjD;AAED,wBAAgB,UAAU,IAAI,YAAY,EAAE,CAE3C;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,EAAE,GAAE,IAAiB,GACpB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAgBxE;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,YAAY,CAKvE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAU5E"}
|