usertrust 1.4.0 → 1.5.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/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/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/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +98 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.js +0 -0
- package/dist/detect.d.ts +34 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +124 -0
- package/dist/detect.js.map +1 -1
- package/dist/govern.d.ts +8 -1
- package/dist/govern.d.ts.map +1 -1
- package/dist/govern.js +191 -12
- 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 +54 -3
- package/dist/headless.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.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 +175 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +55 -5
- package/dist/shared/types.js.map +1 -1
- package/dist/streaming.d.ts +8 -3
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +61 -30
- package/dist/streaming.js.map +1 -1
- package/package.json +1 -1
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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"}
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
/** Settlement scope of an endpoint: local (self-hosted) or cloud (metered provider). */
|
|
3
|
+
export type EndpointClass = "local" | "cloud";
|
|
4
|
+
/** Best-effort runtime label for a local endpoint (receipt/UX metadata only). */
|
|
5
|
+
export type LocalRuntime = "ollama" | "vllm" | "lmstudio" | "openai-compat" | "unknown";
|
|
6
|
+
/** Result of endpoint classification — selects the settlement regime for a call. */
|
|
7
|
+
export interface EndpointInfo {
|
|
8
|
+
class: EndpointClass;
|
|
9
|
+
runtime: LocalRuntime;
|
|
10
|
+
baseURL?: string | undefined;
|
|
11
|
+
}
|
|
12
|
+
/** Denomination of a settled cost: real-dollar proxy or nominal bookkeeping units. */
|
|
13
|
+
export type CostBasis = "usd-proxy" | "nominal";
|
|
14
|
+
/** Where the applied rates came from during resolution. */
|
|
15
|
+
export type RateSource = "table" | "custom" | "local-model" | "local-default" | "fallback";
|
|
2
16
|
export interface TrustReceipt {
|
|
3
17
|
transferId: string;
|
|
4
18
|
cost: number;
|
|
@@ -18,6 +32,17 @@ export interface TrustReceipt {
|
|
|
18
32
|
chunksDelivered?: number;
|
|
19
33
|
/** Action kind for governed non-LLM actions. Absent for LLM calls (backward compat). */
|
|
20
34
|
actionKind?: ActionKind;
|
|
35
|
+
/** Endpoint classification for this call. Absent on pre-M2 receipts. */
|
|
36
|
+
endpoint?: {
|
|
37
|
+
class: EndpointClass;
|
|
38
|
+
runtime: LocalRuntime;
|
|
39
|
+
};
|
|
40
|
+
/** Metering provenance: denomination and rate origin of the settled cost. */
|
|
41
|
+
meter?: {
|
|
42
|
+
costBasis: CostBasis;
|
|
43
|
+
rateSource: RateSource;
|
|
44
|
+
computeMs?: number;
|
|
45
|
+
};
|
|
21
46
|
}
|
|
22
47
|
export interface TrustedResponse<T> {
|
|
23
48
|
response: T;
|
|
@@ -105,6 +130,94 @@ export declare const TrustConfigSchema: z.ZodObject<{
|
|
|
105
130
|
inputPer1k: number;
|
|
106
131
|
outputPer1k: number;
|
|
107
132
|
}>>>;
|
|
133
|
+
/**
|
|
134
|
+
* Endpoint matchers consumed by classifyEndpoint(). First match wins.
|
|
135
|
+
* match forms: scheme URL ("http://gpu-box:8000", matched by origin),
|
|
136
|
+
* leading-star hostname suffix ("*.gpu.internal"), or bare hostname ("gpu-box").
|
|
137
|
+
*/
|
|
138
|
+
endpoints: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
139
|
+
match: z.ZodString;
|
|
140
|
+
class: z.ZodDefault<z.ZodEnum<["local", "cloud"]>>;
|
|
141
|
+
runtime: z.ZodDefault<z.ZodEnum<["ollama", "vllm", "lmstudio", "openai-compat", "unknown"]>>;
|
|
142
|
+
}, "strip", z.ZodTypeAny, {
|
|
143
|
+
match: string;
|
|
144
|
+
class: "local" | "cloud";
|
|
145
|
+
runtime: "ollama" | "vllm" | "lmstudio" | "openai-compat" | "unknown";
|
|
146
|
+
}, {
|
|
147
|
+
match: string;
|
|
148
|
+
class?: "local" | "cloud" | undefined;
|
|
149
|
+
runtime?: "ollama" | "vllm" | "lmstudio" | "openai-compat" | "unknown" | undefined;
|
|
150
|
+
}>, "many">>;
|
|
151
|
+
/** Local (zero-marginal-cost) settlement scope. */
|
|
152
|
+
local: z.ZodDefault<z.ZodObject<{
|
|
153
|
+
/** Loopback hosts (localhost/127.0.0.1/[::1]) classify as local without config. */
|
|
154
|
+
autoDetectLoopback: z.ZodDefault<z.ZodBoolean>;
|
|
155
|
+
/**
|
|
156
|
+
* Rate applied to any local-scope model with no local.models match. Default {0,0}:
|
|
157
|
+
* with the >=1 floor, every local call settles at exactly 1 nominal usertoken.
|
|
158
|
+
*/
|
|
159
|
+
defaultRate: z.ZodDefault<z.ZodObject<{
|
|
160
|
+
inputPer1k: z.ZodNumber;
|
|
161
|
+
outputPer1k: z.ZodNumber;
|
|
162
|
+
}, "strip", z.ZodTypeAny, {
|
|
163
|
+
inputPer1k: number;
|
|
164
|
+
outputPer1k: number;
|
|
165
|
+
}, {
|
|
166
|
+
inputPer1k: number;
|
|
167
|
+
outputPer1k: number;
|
|
168
|
+
}>>;
|
|
169
|
+
/**
|
|
170
|
+
* Denomination of local rates: "nominal" (bookkeeping units) or "amortized-usd"
|
|
171
|
+
* (operator's GPU-chargeback rate; 1 usertoken = $0.0001 as usual).
|
|
172
|
+
*/
|
|
173
|
+
rateClass: z.ZodDefault<z.ZodEnum<["nominal", "amortized-usd"]>>;
|
|
174
|
+
/**
|
|
175
|
+
* Per-model local rates. Keys: exact model strings or trailing-* globs
|
|
176
|
+
* ("llama3.3*", "*"). Exact match beats glob; longest glob wins.
|
|
177
|
+
*/
|
|
178
|
+
models: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
179
|
+
inputPer1k: z.ZodNumber;
|
|
180
|
+
outputPer1k: z.ZodNumber;
|
|
181
|
+
}, "strip", z.ZodTypeAny, {
|
|
182
|
+
inputPer1k: number;
|
|
183
|
+
outputPer1k: number;
|
|
184
|
+
}, {
|
|
185
|
+
inputPer1k: number;
|
|
186
|
+
outputPer1k: number;
|
|
187
|
+
}>>>;
|
|
188
|
+
/** Inject stream_options:{include_usage:true} into local openai-kind streams. */
|
|
189
|
+
injectUsageOptions: z.ZodDefault<z.ZodBoolean>;
|
|
190
|
+
}, "strip", z.ZodTypeAny, {
|
|
191
|
+
models: Record<string, {
|
|
192
|
+
inputPer1k: number;
|
|
193
|
+
outputPer1k: number;
|
|
194
|
+
}>;
|
|
195
|
+
autoDetectLoopback: boolean;
|
|
196
|
+
defaultRate: {
|
|
197
|
+
inputPer1k: number;
|
|
198
|
+
outputPer1k: number;
|
|
199
|
+
};
|
|
200
|
+
rateClass: "nominal" | "amortized-usd";
|
|
201
|
+
injectUsageOptions: boolean;
|
|
202
|
+
}, {
|
|
203
|
+
models?: Record<string, {
|
|
204
|
+
inputPer1k: number;
|
|
205
|
+
outputPer1k: number;
|
|
206
|
+
}> | undefined;
|
|
207
|
+
autoDetectLoopback?: boolean | undefined;
|
|
208
|
+
defaultRate?: {
|
|
209
|
+
inputPer1k: number;
|
|
210
|
+
outputPer1k: number;
|
|
211
|
+
} | undefined;
|
|
212
|
+
rateClass?: "nominal" | "amortized-usd" | undefined;
|
|
213
|
+
injectUsageOptions?: boolean | undefined;
|
|
214
|
+
}>>;
|
|
215
|
+
/**
|
|
216
|
+
* Cloud-scope policy when a model misses customRates, PRICING_TABLE, and prefix match.
|
|
217
|
+
* "fallback" = silent sonnet-class rate (legacy) · "warn" = same rate + one-time warn +
|
|
218
|
+
* receipt.meter.rateSource "fallback" · "deny" = PolicyDeniedError before the PENDING hold.
|
|
219
|
+
*/
|
|
220
|
+
unknownModelPolicy: z.ZodDefault<z.ZodEnum<["fallback", "warn", "deny"]>>;
|
|
108
221
|
supplyChain: z.ZodDefault<z.ZodObject<{
|
|
109
222
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
110
223
|
trustedPublishers: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
@@ -164,26 +277,38 @@ export declare const TrustConfigSchema: z.ZodObject<{
|
|
|
164
277
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
165
278
|
tokenRate: z.ZodDefault<z.ZodObject<{
|
|
166
279
|
thresholdTokPerSec: z.ZodDefault<z.ZodNumber>;
|
|
280
|
+
/** Local-scope threshold (fast local GPU inference legitimately exceeds 500). */
|
|
281
|
+
localThresholdTokPerSec: z.ZodDefault<z.ZodNumber>;
|
|
282
|
+
/** Per-model threshold overrides. Keys: exact model or trailing-* glob. */
|
|
283
|
+
perModel: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
167
284
|
windowMs: z.ZodDefault<z.ZodNumber>;
|
|
168
285
|
consecutiveWindows: z.ZodDefault<z.ZodNumber>;
|
|
169
286
|
}, "strip", z.ZodTypeAny, {
|
|
170
287
|
thresholdTokPerSec: number;
|
|
288
|
+
localThresholdTokPerSec: number;
|
|
289
|
+
perModel: Record<string, number>;
|
|
171
290
|
windowMs: number;
|
|
172
291
|
consecutiveWindows: number;
|
|
173
292
|
}, {
|
|
174
293
|
thresholdTokPerSec?: number | undefined;
|
|
294
|
+
localThresholdTokPerSec?: number | undefined;
|
|
295
|
+
perModel?: Record<string, number> | undefined;
|
|
175
296
|
windowMs?: number | undefined;
|
|
176
297
|
consecutiveWindows?: number | undefined;
|
|
177
298
|
}>>;
|
|
178
299
|
spendVelocity: z.ZodDefault<z.ZodObject<{
|
|
179
300
|
thresholdDollarsPerMin: z.ZodDefault<z.ZodNumber>;
|
|
301
|
+
/** Local-scope velocity threshold in nominal usertokens per minute. */
|
|
302
|
+
localThresholdUsertokensPerMin: z.ZodDefault<z.ZodNumber>;
|
|
180
303
|
windowMs: z.ZodDefault<z.ZodNumber>;
|
|
181
304
|
}, "strip", z.ZodTypeAny, {
|
|
182
305
|
windowMs: number;
|
|
183
306
|
thresholdDollarsPerMin: number;
|
|
307
|
+
localThresholdUsertokensPerMin: number;
|
|
184
308
|
}, {
|
|
185
309
|
windowMs?: number | undefined;
|
|
186
310
|
thresholdDollarsPerMin?: number | undefined;
|
|
311
|
+
localThresholdUsertokensPerMin?: number | undefined;
|
|
187
312
|
}>>;
|
|
188
313
|
injectionCascade: z.ZodDefault<z.ZodObject<{
|
|
189
314
|
eventCount: z.ZodDefault<z.ZodNumber>;
|
|
@@ -200,12 +325,15 @@ export declare const TrustConfigSchema: z.ZodObject<{
|
|
|
200
325
|
enabled: boolean;
|
|
201
326
|
tokenRate: {
|
|
202
327
|
thresholdTokPerSec: number;
|
|
328
|
+
localThresholdTokPerSec: number;
|
|
329
|
+
perModel: Record<string, number>;
|
|
203
330
|
windowMs: number;
|
|
204
331
|
consecutiveWindows: number;
|
|
205
332
|
};
|
|
206
333
|
spendVelocity: {
|
|
207
334
|
windowMs: number;
|
|
208
335
|
thresholdDollarsPerMin: number;
|
|
336
|
+
localThresholdUsertokensPerMin: number;
|
|
209
337
|
};
|
|
210
338
|
injectionCascade: {
|
|
211
339
|
windowMs: number;
|
|
@@ -216,12 +344,15 @@ export declare const TrustConfigSchema: z.ZodObject<{
|
|
|
216
344
|
enabled?: boolean | undefined;
|
|
217
345
|
tokenRate?: {
|
|
218
346
|
thresholdTokPerSec?: number | undefined;
|
|
347
|
+
localThresholdTokPerSec?: number | undefined;
|
|
348
|
+
perModel?: Record<string, number> | undefined;
|
|
219
349
|
windowMs?: number | undefined;
|
|
220
350
|
consecutiveWindows?: number | undefined;
|
|
221
351
|
} | undefined;
|
|
222
352
|
spendVelocity?: {
|
|
223
353
|
windowMs?: number | undefined;
|
|
224
354
|
thresholdDollarsPerMin?: number | undefined;
|
|
355
|
+
localThresholdUsertokensPerMin?: number | undefined;
|
|
225
356
|
} | undefined;
|
|
226
357
|
injectionCascade?: {
|
|
227
358
|
windowMs?: number | undefined;
|
|
@@ -235,6 +366,19 @@ export declare const TrustConfigSchema: z.ZodObject<{
|
|
|
235
366
|
indexLimit: number;
|
|
236
367
|
failClosed: boolean;
|
|
237
368
|
};
|
|
369
|
+
local: {
|
|
370
|
+
models: Record<string, {
|
|
371
|
+
inputPer1k: number;
|
|
372
|
+
outputPer1k: number;
|
|
373
|
+
}>;
|
|
374
|
+
autoDetectLoopback: boolean;
|
|
375
|
+
defaultRate: {
|
|
376
|
+
inputPer1k: number;
|
|
377
|
+
outputPer1k: number;
|
|
378
|
+
};
|
|
379
|
+
rateClass: "nominal" | "amortized-usd";
|
|
380
|
+
injectUsageOptions: boolean;
|
|
381
|
+
};
|
|
238
382
|
budget: number;
|
|
239
383
|
tier: "free" | "mini" | "pro" | "mega" | "ultra";
|
|
240
384
|
policies: string;
|
|
@@ -261,6 +405,12 @@ export declare const TrustConfigSchema: z.ZodObject<{
|
|
|
261
405
|
models: string[];
|
|
262
406
|
}[];
|
|
263
407
|
pricing: "custom" | "recommended";
|
|
408
|
+
endpoints: {
|
|
409
|
+
match: string;
|
|
410
|
+
class: "local" | "cloud";
|
|
411
|
+
runtime: "ollama" | "vllm" | "lmstudio" | "openai-compat" | "unknown";
|
|
412
|
+
}[];
|
|
413
|
+
unknownModelPolicy: "fallback" | "warn" | "deny";
|
|
264
414
|
supplyChain: {
|
|
265
415
|
enabled: boolean;
|
|
266
416
|
trustedPublishers: string[];
|
|
@@ -282,12 +432,15 @@ export declare const TrustConfigSchema: z.ZodObject<{
|
|
|
282
432
|
enabled: boolean;
|
|
283
433
|
tokenRate: {
|
|
284
434
|
thresholdTokPerSec: number;
|
|
435
|
+
localThresholdTokPerSec: number;
|
|
436
|
+
perModel: Record<string, number>;
|
|
285
437
|
windowMs: number;
|
|
286
438
|
consecutiveWindows: number;
|
|
287
439
|
};
|
|
288
440
|
spendVelocity: {
|
|
289
441
|
windowMs: number;
|
|
290
442
|
thresholdDollarsPerMin: number;
|
|
443
|
+
localThresholdUsertokensPerMin: number;
|
|
291
444
|
};
|
|
292
445
|
injectionCascade: {
|
|
293
446
|
windowMs: number;
|
|
@@ -308,6 +461,19 @@ export declare const TrustConfigSchema: z.ZodObject<{
|
|
|
308
461
|
indexLimit?: number | undefined;
|
|
309
462
|
failClosed?: boolean | undefined;
|
|
310
463
|
} | undefined;
|
|
464
|
+
local?: {
|
|
465
|
+
models?: Record<string, {
|
|
466
|
+
inputPer1k: number;
|
|
467
|
+
outputPer1k: number;
|
|
468
|
+
}> | undefined;
|
|
469
|
+
autoDetectLoopback?: boolean | undefined;
|
|
470
|
+
defaultRate?: {
|
|
471
|
+
inputPer1k: number;
|
|
472
|
+
outputPer1k: number;
|
|
473
|
+
} | undefined;
|
|
474
|
+
rateClass?: "nominal" | "amortized-usd" | undefined;
|
|
475
|
+
injectUsageOptions?: boolean | undefined;
|
|
476
|
+
} | undefined;
|
|
311
477
|
tier?: "free" | "mini" | "pro" | "mega" | "ultra" | undefined;
|
|
312
478
|
proxy?: string | undefined;
|
|
313
479
|
key?: string | undefined;
|
|
@@ -339,6 +505,12 @@ export declare const TrustConfigSchema: z.ZodObject<{
|
|
|
339
505
|
inputPer1k: number;
|
|
340
506
|
outputPer1k: number;
|
|
341
507
|
}> | undefined;
|
|
508
|
+
endpoints?: {
|
|
509
|
+
match: string;
|
|
510
|
+
class?: "local" | "cloud" | undefined;
|
|
511
|
+
runtime?: "ollama" | "vllm" | "lmstudio" | "openai-compat" | "unknown" | undefined;
|
|
512
|
+
}[] | undefined;
|
|
513
|
+
unknownModelPolicy?: "fallback" | "warn" | "deny" | undefined;
|
|
342
514
|
supplyChain?: {
|
|
343
515
|
enabled?: boolean | undefined;
|
|
344
516
|
trustedPublishers?: string[] | undefined;
|
|
@@ -360,12 +532,15 @@ export declare const TrustConfigSchema: z.ZodObject<{
|
|
|
360
532
|
enabled?: boolean | undefined;
|
|
361
533
|
tokenRate?: {
|
|
362
534
|
thresholdTokPerSec?: number | undefined;
|
|
535
|
+
localThresholdTokPerSec?: number | undefined;
|
|
536
|
+
perModel?: Record<string, number> | undefined;
|
|
363
537
|
windowMs?: number | undefined;
|
|
364
538
|
consecutiveWindows?: number | undefined;
|
|
365
539
|
} | undefined;
|
|
366
540
|
spendVelocity?: {
|
|
367
541
|
windowMs?: number | undefined;
|
|
368
542
|
thresholdDollarsPerMin?: number | undefined;
|
|
543
|
+
localThresholdUsertokensPerMin?: number | undefined;
|
|
369
544
|
} | undefined;
|
|
370
545
|
injectionCascade?: {
|
|
371
546
|
windowMs?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,wFAAwF;AACxF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9C,iFAAiF;AACjF,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,eAAe,GAAG,SAAS,CAAC;AAExF,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,sFAAsF;AACtF,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAEhD,2DAA2D;AAC3D,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,GAAG,eAAe,GAAG,UAAU,CAAC;AAG3F,MAAM,WAAW,YAAY;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IACvC,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wFAAwF;IACxF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,aAAa,CAAC;QAAC,OAAO,EAAE,YAAY,CAAA;KAAE,CAAC;IAC3D,6EAA6E;IAC7E,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,SAAS,CAAC;QAAC,UAAU,EAAE,UAAU,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7E;AAGD,MAAM,WAAW,eAAe,CAAC,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC;IACZ,OAAO,EAAE,YAAY,CAAC;CACtB;AAUD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoD7B;;;;OAIG;;;;;;;;;;;;;;IAYH,mDAAmD;;QAGjD,mFAAmF;;QAEnF;;;WAGG;;;;;;;;;;;QAEH;;;WAGG;;QAEH;;;WAGG;;;;;;;;;;;QAEH,iFAAiF;;;;;;;;;;;;;;;;;;;;;;;;;;;IAInF;;;;OAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAmDC,iFAAiF;;YAEjF,2EAA2E;;;;;;;;;;;;;;;;;;;YAS3E,uEAAuE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc1E,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAG5D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAC3C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;AAChD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAE7E,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,UAAU,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,aAAa,GACtB,QAAQ,GACR,YAAY,GACZ,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,QAAQ,GACR,UAAU,GACV,OAAO,CAAC;AAEX,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAGD,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAGD,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AACjE,MAAM,MAAM,WAAW,GACpB,eAAe,GACf,MAAM,GACN,QAAQ,GACR,aAAa,GACb,gBAAgB,GAChB,kBAAkB,CAAC;AACtB,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAG1D,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAI9D,kDAAkD;AAClD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,GAAG,aAAa,CAAC;AAEnG,wCAAwC;AACxC,MAAM,WAAW,gBAAgB;IAChC,yCAAyC;IACzC,IAAI,EAAE,UAAU,CAAC;IACjB,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,2CAA2C;AAC3C,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC;IACV,OAAO,EAAE,YAAY,CAAC;CACtB;AAID,iDAAiD;AACjD,MAAM,WAAW,kBAAkB;IAClC,uDAAuD;IACvD,QAAQ,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4FAA4F;IAC5F,KAAK,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,8CAA8C;AAC9C,MAAM,WAAW,WAAW;IAC3B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;CACf;AAID,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GACxB,UAAU,GACV,UAAU,GACV,WAAW,GACX,YAAY,GACZ,eAAe,GACf,gBAAgB,GAChB,mBAAmB,CAAC;AAEvB,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC7B,gDAAgD;IAChD,OAAO,EAAE,CAAC,CAAC;IACX,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IACjC,+CAA+C;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,kBAAkB,EAAE,OAAO,CAAC;IAC5B,8CAA8C;IAC9C,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoB9B,CAAC;AAIH,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC/B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iEAAiE;IACjE,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,yDAAyD;IACzD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC/B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,KAAK,EAAE,eAAe,CAAC;IACvB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,6CAA6C;AAC7C,MAAM,WAAW,sBAAsB;IACtC,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB"}
|