usertrust 1.4.0 → 2.0.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/README.md +17 -1
- package/dist/anomaly/detector.d.ts.map +1 -1
- package/dist/anomaly/detector.js +36 -11
- package/dist/anomaly/detector.js.map +1 -1
- package/dist/anomaly/index.d.ts +2 -2
- package/dist/anomaly/index.d.ts.map +1 -1
- package/dist/anomaly/index.js +1 -1
- package/dist/anomaly/index.js.map +1 -1
- package/dist/anomaly/signals/spend-velocity.d.ts +39 -12
- package/dist/anomaly/signals/spend-velocity.d.ts.map +1 -1
- package/dist/anomaly/signals/spend-velocity.js +66 -43
- package/dist/anomaly/signals/spend-velocity.js.map +1 -1
- package/dist/anomaly/signals/token-rate.d.ts +33 -13
- package/dist/anomaly/signals/token-rate.d.ts.map +1 -1
- package/dist/anomaly/signals/token-rate.js +124 -38
- package/dist/anomaly/signals/token-rate.js.map +1 -1
- package/dist/anomaly/types.d.ts +28 -6
- package/dist/anomaly/types.d.ts.map +1 -1
- package/dist/audit/anchor-doctor.d.ts +42 -0
- package/dist/audit/anchor-doctor.d.ts.map +1 -0
- package/dist/audit/anchor-doctor.js +285 -0
- package/dist/audit/anchor-doctor.js.map +1 -0
- package/dist/audit/anchor-verify.d.ts +229 -0
- package/dist/audit/anchor-verify.d.ts.map +1 -0
- package/dist/audit/anchor-verify.js +809 -0
- package/dist/audit/anchor-verify.js.map +1 -0
- package/dist/audit/anchor.d.ts +177 -0
- package/dist/audit/anchor.d.ts.map +1 -0
- package/dist/audit/anchor.js +922 -0
- package/dist/audit/anchor.js.map +1 -0
- package/dist/audit/canonical.js +1 -1
- package/dist/audit/canonical.js.map +1 -1
- package/dist/audit/chain.d.ts.map +1 -1
- package/dist/audit/chain.js +21 -7
- package/dist/audit/chain.js.map +1 -1
- package/dist/audit/read.d.ts +19 -0
- package/dist/audit/read.d.ts.map +1 -0
- package/dist/audit/read.js +94 -0
- package/dist/audit/read.js.map +1 -0
- package/dist/audit/rekor-verify.d.ts +116 -0
- package/dist/audit/rekor-verify.d.ts.map +1 -0
- package/dist/audit/rekor-verify.js +533 -0
- package/dist/audit/rekor-verify.js.map +1 -0
- package/dist/audit/rekor.d.ts +71 -0
- package/dist/audit/rekor.d.ts.map +1 -0
- package/dist/audit/rekor.js +556 -0
- package/dist/audit/rekor.js.map +1 -0
- package/dist/audit/rotation.js +1 -1
- package/dist/audit/rotation.js.map +1 -1
- package/dist/audit/sigv4.d.ts +44 -0
- package/dist/audit/sigv4.d.ts.map +1 -0
- package/dist/audit/sigv4.js +134 -0
- package/dist/audit/sigv4.js.map +1 -0
- package/dist/audit/verify.d.ts +78 -0
- package/dist/audit/verify.d.ts.map +1 -1
- package/dist/audit/verify.js +195 -1
- package/dist/audit/verify.js.map +1 -1
- package/dist/cli/anchor.d.ts +3 -0
- package/dist/cli/anchor.d.ts.map +1 -0
- package/dist/cli/anchor.js +626 -0
- package/dist/cli/anchor.js.map +1 -0
- package/dist/cli/completions.js +1 -1
- package/dist/cli/export.d.ts +3 -0
- package/dist/cli/export.d.ts.map +1 -0
- package/dist/cli/export.js +58 -0
- package/dist/cli/export.js.map +1 -0
- package/dist/cli/health.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +99 -2
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/inspect.d.ts.map +1 -1
- package/dist/cli/inspect.js +4 -34
- package/dist/cli/inspect.js.map +1 -1
- package/dist/cli/main.d.ts +2 -2
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +20 -1
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/pricing.js +1 -1
- package/dist/cli/pricing.js.map +1 -1
- package/dist/cli/ui.d.ts +3 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +35 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/cli/verify.d.ts.map +1 -1
- package/dist/cli/verify.js +342 -3
- package/dist/cli/verify.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/detect.d.ts +71 -16
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +141 -6
- package/dist/detect.js.map +1 -1
- package/dist/export/markdown.d.ts +12 -0
- package/dist/export/markdown.d.ts.map +1 -0
- package/dist/export/markdown.js +142 -0
- package/dist/export/markdown.js.map +1 -0
- package/dist/govern.d.ts +67 -3
- package/dist/govern.d.ts.map +1 -1
- package/dist/govern.js +1011 -219
- package/dist/govern.js.map +1 -1
- package/dist/headless.d.ts +41 -2
- package/dist/headless.d.ts.map +1 -1
- package/dist/headless.js +58 -7
- package/dist/headless.js.map +1 -1
- package/dist/index.d.ts +33 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -23
- package/dist/index.js.map +1 -1
- package/dist/ledger/client.d.ts.map +1 -1
- package/dist/ledger/client.js +57 -46
- package/dist/ledger/client.js.map +1 -1
- package/dist/ledger/engine.d.ts.map +1 -1
- package/dist/ledger/engine.js +22 -13
- package/dist/ledger/engine.js.map +1 -1
- package/dist/ledger/pricing.d.ts +54 -0
- package/dist/ledger/pricing.d.ts.map +1 -1
- package/dist/ledger/pricing.js +128 -8
- package/dist/ledger/pricing.js.map +1 -1
- package/dist/shared/types.d.ts +154 -340
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +67 -17
- package/dist/shared/types.js.map +1 -1
- package/dist/snapshot/checkpoint.d.ts.map +1 -1
- package/dist/snapshot/checkpoint.js +20 -2
- package/dist/snapshot/checkpoint.js.map +1 -1
- package/dist/streaming.d.ts +13 -3
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +88 -30
- package/dist/streaming.js.map +1 -1
- package/dist/supply-chain/sign.d.ts.map +1 -1
- package/dist/supply-chain/sign.js +3 -0
- package/dist/supply-chain/sign.js.map +1 -1
- package/package.json +6 -4
package/dist/ledger/pricing.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Canonical pricing source for supported LLM models.
|
|
7
7
|
*/
|
|
8
|
+
import type { CostBasis, EndpointClass, RateSource, TrustConfig } from "../shared/types.js";
|
|
8
9
|
export interface ModelRates {
|
|
9
10
|
inputPer1k: number;
|
|
10
11
|
outputPer1k: number;
|
|
@@ -25,11 +26,64 @@ export declare function modelsForProvider(provider: string): string[];
|
|
|
25
26
|
* then FALLBACK_RATE for unknown models.
|
|
26
27
|
*/
|
|
27
28
|
export declare function getModelRates(model: string, customRates?: Record<string, ModelRates>): ModelRates;
|
|
29
|
+
/**
|
|
30
|
+
* Emit the once-per-process cloud-scope "unknown model" warning for
|
|
31
|
+
* unknownModelPolicy "warn". Shared by trust() and createGovernor() so both
|
|
32
|
+
* governance paths log identical text and share a single dedup set. Idempotent
|
|
33
|
+
* per model string; the receipt's meter.rateSource "fallback" marker is set by
|
|
34
|
+
* the caller independently of this dedup.
|
|
35
|
+
*/
|
|
36
|
+
export declare function warnUnknownModel(model: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Compute usertoken cost from explicit rates.
|
|
39
|
+
* Applies the same non-finite/negative clamp and >=1 floor as estimateCost —
|
|
40
|
+
* the floor is per-call and load-bearing (zero-amount ledger transfers are
|
|
41
|
+
* invalid; it is what makes a {0,0}-rate local call settle at exactly 1
|
|
42
|
+
* nominal usertoken).
|
|
43
|
+
*/
|
|
44
|
+
export declare function costFromRates(rates: ModelRates, inputTokens: number, outputTokens: number): number;
|
|
28
45
|
/**
|
|
29
46
|
* Estimate cost in usertokens for a model call.
|
|
30
47
|
* Returns at least 1 (floor to prevent zero-amount transfers).
|
|
31
48
|
*/
|
|
32
49
|
export declare function estimateCost(model: string, inputTokens: number, outputTokens: number, customRates?: Record<string, ModelRates>): number;
|
|
50
|
+
/** A matched model-pattern entry: the pattern key that won and its value. */
|
|
51
|
+
export interface ModelPatternMatch<T> {
|
|
52
|
+
pattern: string;
|
|
53
|
+
value: T;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Match a model string against a record keyed by exact models or TRAILING-star
|
|
57
|
+
* globs ("llama3.3*"; "*" matches everything). Exact match beats any glob;
|
|
58
|
+
* among globs the longest prefix wins. This is the model-pattern matcher (A2) —
|
|
59
|
+
* hostname patterns use a different leading-star syntax, implemented in detect.ts.
|
|
60
|
+
*
|
|
61
|
+
* Used by local.models, anomaly tokenRate.perModel.
|
|
62
|
+
*/
|
|
63
|
+
export declare function matchModelPattern<T>(model: string, patterns: Record<string, T>): ModelPatternMatch<T> | undefined;
|
|
64
|
+
/** Result of scope-aware rate resolution. */
|
|
65
|
+
export interface RateResolution {
|
|
66
|
+
rates: ModelRates;
|
|
67
|
+
scope: EndpointClass;
|
|
68
|
+
costBasis: CostBasis;
|
|
69
|
+
rateSource: RateSource;
|
|
70
|
+
/** true when cloud scope missed table+custom+prefix and fell back. */
|
|
71
|
+
unknown: boolean;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Resolve rates for a model within an endpoint scope. Never throws —
|
|
75
|
+
* unknownModelPolicy enforcement lives in the callers (govern/headless).
|
|
76
|
+
*
|
|
77
|
+
* Local scope: local.models exact match → longest trailing-* glob →
|
|
78
|
+
* local.defaultRate (rateSource "local-default"). NEVER FALLBACK_RATE, never
|
|
79
|
+
* the cloud table, never `unknown: true` (A5). costBasis is "usd-proxy" when
|
|
80
|
+
* local.rateClass is "amortized-usd", else "nominal".
|
|
81
|
+
*
|
|
82
|
+
* Cloud scope: delegates to the existing getModelRates(model, customRates)
|
|
83
|
+
* semantics, including the callers' pricing==="custom" gate on customRates;
|
|
84
|
+
* costBasis "usd-proxy"; unknown=true iff the result came from FALLBACK_RATE.
|
|
85
|
+
*/
|
|
86
|
+
export declare function resolveRates(model: string, scope: EndpointClass, config: TrustConfig): RateResolution;
|
|
33
87
|
/**
|
|
34
88
|
* Estimate input token count from a messages array.
|
|
35
89
|
* Heuristic: ~4 chars/token with a 1.5x safety margin so the PENDING
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/ledger/pricing.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,MAAM,WAAW,UAAU;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA0CpD,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAKlD,+DAA+D;AAC/D,eAAO,MAAM,aAAa,EAAE,UAAiD,CAAC;AAiB9E,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/ledger/pricing.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE5F,MAAM,WAAW,UAAU;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA0CpD,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAKlD,+DAA+D;AAC/D,eAAO,MAAM,aAAa,EAAE,UAAiD,CAAC;AAiB9E,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAO5D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,UAAU,CAsBjG;AAKD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAMpD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GAClB,MAAM,CAUR;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GACtC,MAAM,CAER;AAID,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,CAAC,CAAC;CACT;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAClC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GACzB,iBAAiB,CAAC,CAAC,CAAC,GAAG,SAAS,CAiBlC;AAED,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,sEAAsE;IACtE,OAAO,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,WAAW,GACjB,cAAc,CAiDhB;AA6BD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAqC/D"}
|
package/dist/ledger/pricing.js
CHANGED
|
@@ -59,6 +59,10 @@ const PROVIDER_MODEL_MAP = {
|
|
|
59
59
|
};
|
|
60
60
|
/** Return all PRICING_TABLE model keys that belong to a given provider. */
|
|
61
61
|
export function modelsForProvider(provider) {
|
|
62
|
+
// Object.hasOwn guards against inherited Object.prototype keys: a provider
|
|
63
|
+
// name like "constructor" must resolve to nothing, not Object's constructor.
|
|
64
|
+
if (!Object.hasOwn(PROVIDER_MODEL_MAP, provider))
|
|
65
|
+
return [];
|
|
62
66
|
const prefixes = PROVIDER_MODEL_MAP[provider];
|
|
63
67
|
if (!prefixes)
|
|
64
68
|
return [];
|
|
@@ -69,14 +73,21 @@ export function modelsForProvider(provider) {
|
|
|
69
73
|
* then FALLBACK_RATE for unknown models.
|
|
70
74
|
*/
|
|
71
75
|
export function getModelRates(model, customRates) {
|
|
72
|
-
|
|
76
|
+
// Object.hasOwn guards both direct lookups against inherited Object.prototype
|
|
77
|
+
// members: a model string like "constructor"/"__proto__"/"toString" would
|
|
78
|
+
// otherwise resolve to a Function/object, survive the truthiness check, and
|
|
79
|
+
// yield NaN cost (NaN then defeats the Math.max(1, ...) floor and poisons the
|
|
80
|
+
// ledger). Prefix matching below is already own-key-only (SORTED_TABLE).
|
|
81
|
+
if (customRates && Object.hasOwn(customRates, model)) {
|
|
73
82
|
const custom = customRates[model];
|
|
74
83
|
if (custom)
|
|
75
84
|
return custom;
|
|
76
85
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
86
|
+
if (Object.hasOwn(PRICING_TABLE, model)) {
|
|
87
|
+
const exact = PRICING_TABLE[model];
|
|
88
|
+
if (exact)
|
|
89
|
+
return exact;
|
|
90
|
+
}
|
|
80
91
|
// Prefix match — longest key first prevents partial matches
|
|
81
92
|
for (const [key, rates] of SORTED_TABLE) {
|
|
82
93
|
if (model.startsWith(key))
|
|
@@ -84,12 +95,29 @@ export function getModelRates(model, customRates) {
|
|
|
84
95
|
}
|
|
85
96
|
return FALLBACK_RATE;
|
|
86
97
|
}
|
|
98
|
+
/** Models already warned about — unknownModelPolicy "warn" fires once per model per process. */
|
|
99
|
+
const warnedUnknownModels = new Set();
|
|
87
100
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
101
|
+
* Emit the once-per-process cloud-scope "unknown model" warning for
|
|
102
|
+
* unknownModelPolicy "warn". Shared by trust() and createGovernor() so both
|
|
103
|
+
* governance paths log identical text and share a single dedup set. Idempotent
|
|
104
|
+
* per model string; the receipt's meter.rateSource "fallback" marker is set by
|
|
105
|
+
* the caller independently of this dedup.
|
|
90
106
|
*/
|
|
91
|
-
export function
|
|
92
|
-
|
|
107
|
+
export function warnUnknownModel(model) {
|
|
108
|
+
if (warnedUnknownModels.has(model))
|
|
109
|
+
return;
|
|
110
|
+
warnedUnknownModels.add(model);
|
|
111
|
+
console.warn(`[usertrust] unknown model "${model}": metering at FALLBACK_RATE (sonnet-class); add it to customRates or set unknownModelPolicy`);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Compute usertoken cost from explicit rates.
|
|
115
|
+
* Applies the same non-finite/negative clamp and >=1 floor as estimateCost —
|
|
116
|
+
* the floor is per-call and load-bearing (zero-amount ledger transfers are
|
|
117
|
+
* invalid; it is what makes a {0,0}-rate local call settle at exactly 1
|
|
118
|
+
* nominal usertoken).
|
|
119
|
+
*/
|
|
120
|
+
export function costFromRates(rates, inputTokens, outputTokens) {
|
|
93
121
|
// Defend against non-finite/negative token counts (garbage `max_tokens`, or
|
|
94
122
|
// provider usage that reports a negative/NaN value): any count that is not a
|
|
95
123
|
// finite number >= 0 is treated as 0. A NaN would otherwise poison budget
|
|
@@ -100,6 +128,98 @@ export function estimateCost(model, inputTokens, outputTokens, customRates) {
|
|
|
100
128
|
const outputCost = (outTok / 1000) * rates.outputPer1k;
|
|
101
129
|
return Math.max(1, Math.ceil(inputCost + outputCost));
|
|
102
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Estimate cost in usertokens for a model call.
|
|
133
|
+
* Returns at least 1 (floor to prevent zero-amount transfers).
|
|
134
|
+
*/
|
|
135
|
+
export function estimateCost(model, inputTokens, outputTokens, customRates) {
|
|
136
|
+
return costFromRates(getModelRates(model, customRates), inputTokens, outputTokens);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Match a model string against a record keyed by exact models or TRAILING-star
|
|
140
|
+
* globs ("llama3.3*"; "*" matches everything). Exact match beats any glob;
|
|
141
|
+
* among globs the longest prefix wins. This is the model-pattern matcher (A2) —
|
|
142
|
+
* hostname patterns use a different leading-star syntax, implemented in detect.ts.
|
|
143
|
+
*
|
|
144
|
+
* Used by local.models, anomaly tokenRate.perModel.
|
|
145
|
+
*/
|
|
146
|
+
export function matchModelPattern(model, patterns) {
|
|
147
|
+
// Object.hasOwn guards against inherited Object.prototype keys
|
|
148
|
+
// (model "constructor" must not resolve to a Function).
|
|
149
|
+
if (Object.hasOwn(patterns, model)) {
|
|
150
|
+
return { pattern: model, value: patterns[model] };
|
|
151
|
+
}
|
|
152
|
+
let best;
|
|
153
|
+
let bestLen = -1;
|
|
154
|
+
for (const [pattern, value] of Object.entries(patterns)) {
|
|
155
|
+
if (!pattern.endsWith("*"))
|
|
156
|
+
continue;
|
|
157
|
+
const prefix = pattern.slice(0, -1);
|
|
158
|
+
if (model.startsWith(prefix) && prefix.length > bestLen) {
|
|
159
|
+
best = { pattern, value };
|
|
160
|
+
bestLen = prefix.length;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return best;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Resolve rates for a model within an endpoint scope. Never throws —
|
|
167
|
+
* unknownModelPolicy enforcement lives in the callers (govern/headless).
|
|
168
|
+
*
|
|
169
|
+
* Local scope: local.models exact match → longest trailing-* glob →
|
|
170
|
+
* local.defaultRate (rateSource "local-default"). NEVER FALLBACK_RATE, never
|
|
171
|
+
* the cloud table, never `unknown: true` (A5). costBasis is "usd-proxy" when
|
|
172
|
+
* local.rateClass is "amortized-usd", else "nominal".
|
|
173
|
+
*
|
|
174
|
+
* Cloud scope: delegates to the existing getModelRates(model, customRates)
|
|
175
|
+
* semantics, including the callers' pricing==="custom" gate on customRates;
|
|
176
|
+
* costBasis "usd-proxy"; unknown=true iff the result came from FALLBACK_RATE.
|
|
177
|
+
*/
|
|
178
|
+
export function resolveRates(model, scope, config) {
|
|
179
|
+
if (scope === "local") {
|
|
180
|
+
const costBasis = config.local.rateClass === "amortized-usd" ? "usd-proxy" : "nominal";
|
|
181
|
+
const match = matchModelPattern(model, config.local.models);
|
|
182
|
+
if (match !== undefined) {
|
|
183
|
+
return { rates: match.value, scope, costBasis, rateSource: "local-model", unknown: false };
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
rates: config.local.defaultRate,
|
|
187
|
+
scope,
|
|
188
|
+
costBasis,
|
|
189
|
+
rateSource: "local-default",
|
|
190
|
+
unknown: false,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// Cloud scope — mirrors getModelRates(model, customRates) exactly, including
|
|
194
|
+
// the pricing==="custom" gate applied at the existing govern/headless call sites.
|
|
195
|
+
// Object.hasOwn guards both lookups so a model string like "constructor"/
|
|
196
|
+
// "__proto__" resolves to FALLBACK_RATE, never an inherited prototype member.
|
|
197
|
+
const customRates = config.pricing === "custom" ? config.customRates : undefined;
|
|
198
|
+
if (customRates && Object.hasOwn(customRates, model)) {
|
|
199
|
+
const custom = customRates[model];
|
|
200
|
+
if (custom) {
|
|
201
|
+
return { rates: custom, scope, costBasis: "usd-proxy", rateSource: "custom", unknown: false };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (Object.hasOwn(PRICING_TABLE, model)) {
|
|
205
|
+
const exact = PRICING_TABLE[model];
|
|
206
|
+
if (exact) {
|
|
207
|
+
return { rates: exact, scope, costBasis: "usd-proxy", rateSource: "table", unknown: false };
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
for (const [key, rates] of SORTED_TABLE) {
|
|
211
|
+
if (model.startsWith(key)) {
|
|
212
|
+
return { rates, scope, costBasis: "usd-proxy", rateSource: "table", unknown: false };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
rates: FALLBACK_RATE,
|
|
217
|
+
scope,
|
|
218
|
+
costBasis: "usd-proxy",
|
|
219
|
+
rateSource: "fallback",
|
|
220
|
+
unknown: true,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
103
223
|
/**
|
|
104
224
|
* Estimate the block-level token count for a non-text content block.
|
|
105
225
|
* Extracts textual payload where possible, falls back to serialised length.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/ledger/pricing.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/ledger/pricing.ts"],"names":[],"mappings":"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"}
|