audit-tools 0.32.59 → 0.32.60
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/audit/cli/charterDeltaPrompt.d.ts.map +1 -1
- package/dist/audit/cli/charterDeltaPrompt.js +19 -1
- package/dist/audit/cli/charterDeltaPrompt.js.map +1 -1
- package/dist/audit/cli/dispatch/tierRouting.d.ts +8 -0
- package/dist/audit/cli/dispatch/tierRouting.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/tierRouting.js +1 -1
- package/dist/audit/cli/dispatch/tierRouting.js.map +1 -1
- package/dist/audit/cli/dispatch/tokenUsageObservation.d.ts +91 -0
- package/dist/audit/cli/dispatch/tokenUsageObservation.d.ts.map +1 -0
- package/dist/audit/cli/dispatch/tokenUsageObservation.js +210 -0
- package/dist/audit/cli/dispatch/tokenUsageObservation.js.map +1 -0
- package/dist/audit/cli/dispatch.d.ts.map +1 -1
- package/dist/audit/cli/dispatch.js +21 -9
- package/dist/audit/cli/dispatch.js.map +1 -1
- package/dist/audit/cli/mergeAndIngestCommand.d.ts.map +1 -1
- package/dist/audit/cli/mergeAndIngestCommand.js +62 -4
- package/dist/audit/cli/mergeAndIngestCommand.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +7 -4
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/prompts.d.ts.map +1 -1
- package/dist/audit/cli/prompts.js +12 -0
- package/dist/audit/cli/prompts.js.map +1 -1
- package/dist/audit/cli/providerConfirmationStep.d.ts +10 -1
- package/dist/audit/cli/providerConfirmationStep.d.ts.map +1 -1
- package/dist/audit/cli/providerConfirmationStep.js +49 -0
- package/dist/audit/cli/providerConfirmationStep.js.map +1 -1
- package/dist/audit/cli/rollingAuditDispatch.d.ts.map +1 -1
- package/dist/audit/cli/rollingAuditDispatch.js +17 -1
- package/dist/audit/cli/rollingAuditDispatch.js.map +1 -1
- package/dist/audit/contracts/workerSchemas.d.ts +36 -0
- package/dist/audit/contracts/workerSchemas.d.ts.map +1 -1
- package/dist/audit/orchestrator/charterExtractionExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/charterExtractionExecutor.js +11 -6
- package/dist/audit/orchestrator/charterExtractionExecutor.js.map +1 -1
- package/dist/audit/orchestrator/rollingDispatch.d.ts.map +1 -1
- package/dist/audit/orchestrator/rollingDispatch.js +2 -0
- package/dist/audit/orchestrator/rollingDispatch.js.map +1 -1
- package/dist/audit/quota/index.d.ts +4 -4
- package/dist/audit/types/activeDispatch.d.ts +8 -0
- package/dist/audit/types/activeDispatch.d.ts.map +1 -1
- package/dist/audit/types.d.ts +30 -0
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js +19 -0
- package/dist/audit/types.js.map +1 -1
- package/dist/audit/validation/auditResults.d.ts.map +1 -1
- package/dist/audit/validation/auditResults.js +40 -0
- package/dist/audit/validation/auditResults.js.map +1 -1
- package/dist/remediate/steps/dispatch/acceptNode.d.ts +1 -1
- package/dist/remediate/steps/dispatch/acceptNode.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/acceptNode.js +13 -6
- package/dist/remediate/steps/dispatch/acceptNode.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +23 -0
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +52 -15
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/shared/dispatch/admissionLoop.d.ts +8 -6
- package/dist/shared/dispatch/admissionLoop.d.ts.map +1 -1
- package/dist/shared/dispatch/admissionLoop.js +13 -7
- package/dist/shared/dispatch/admissionLoop.js.map +1 -1
- package/dist/shared/dispatch/providerLaunchFinalize.d.ts +7 -3
- package/dist/shared/dispatch/providerLaunchFinalize.d.ts.map +1 -1
- package/dist/shared/dispatch/providerLaunchFinalize.js +52 -6
- package/dist/shared/dispatch/providerLaunchFinalize.js.map +1 -1
- package/dist/shared/dispatch/rollingDispatch.d.ts +97 -1
- package/dist/shared/dispatch/rollingDispatch.d.ts.map +1 -1
- package/dist/shared/dispatch/rollingDispatch.js +231 -80
- package/dist/shared/dispatch/rollingDispatch.js.map +1 -1
- package/dist/shared/dispatch/unifiedRolling.d.ts +23 -0
- package/dist/shared/dispatch/unifiedRolling.d.ts.map +1 -1
- package/dist/shared/dispatch/unifiedRolling.js +2 -0
- package/dist/shared/dispatch/unifiedRolling.js.map +1 -1
- package/dist/shared/friction/stepBoundaryCapture.d.ts +87 -1
- package/dist/shared/friction/stepBoundaryCapture.d.ts.map +1 -1
- package/dist/shared/friction/stepBoundaryCapture.js +117 -0
- package/dist/shared/friction/stepBoundaryCapture.js.map +1 -1
- package/dist/shared/friction/triage.d.ts.map +1 -1
- package/dist/shared/friction/triage.js +0 -0
- package/dist/shared/friction/triage.js.map +1 -1
- package/dist/shared/index.d.ts +9 -7
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +5 -5
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/providers/providerConfirmation.d.ts +43 -1
- package/dist/shared/providers/providerConfirmation.d.ts.map +1 -1
- package/dist/shared/providers/providerConfirmation.js +28 -0
- package/dist/shared/providers/providerConfirmation.js.map +1 -1
- package/dist/shared/quota/accountId.d.ts +54 -0
- package/dist/shared/quota/accountId.d.ts.map +1 -0
- package/dist/shared/quota/accountId.js +96 -0
- package/dist/shared/quota/accountId.js.map +1 -0
- package/dist/shared/quota/apiPool.d.ts.map +1 -1
- package/dist/shared/quota/apiPool.js +29 -1
- package/dist/shared/quota/apiPool.js.map +1 -1
- package/dist/shared/quota/capacity.d.ts +2 -2
- package/dist/shared/quota/errorParsing.d.ts +31 -0
- package/dist/shared/quota/errorParsing.d.ts.map +1 -1
- package/dist/shared/quota/errorParsing.js +115 -0
- package/dist/shared/quota/errorParsing.js.map +1 -1
- package/dist/shared/quota/hostSessionQuotaSource.d.ts +15 -2
- package/dist/shared/quota/hostSessionQuotaSource.d.ts.map +1 -1
- package/dist/shared/quota/hostSessionQuotaSource.js +12 -8
- package/dist/shared/quota/hostSessionQuotaSource.js.map +1 -1
- package/dist/shared/quota/scheduler.d.ts +70 -11
- package/dist/shared/quota/scheduler.d.ts.map +1 -1
- package/dist/shared/quota/scheduler.js +86 -18
- package/dist/shared/quota/scheduler.js.map +1 -1
- package/dist/shared/quota/state.d.ts +72 -0
- package/dist/shared/quota/state.d.ts.map +1 -1
- package/dist/shared/quota/state.js +108 -0
- package/dist/shared/quota/state.js.map +1 -1
- package/dist/shared/types/rollingDispatch.d.ts +50 -1
- package/dist/shared/types/rollingDispatch.d.ts.map +1 -1
- package/package.json +1 -1
- package/schemas/audit_result.schema.json +16 -0
- package/schemas/audit_results.schema.json +16 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ResolvedProviderName, SessionConfig } from "../types/sessionConfig.js";
|
|
1
|
+
import type { DispatchableSource, ResolvedProviderName, SessionConfig } from "../types/sessionConfig.js";
|
|
2
2
|
import type { FreshSessionProvider, ProviderRateLimits } from "./types.js";
|
|
3
3
|
import type { ConfirmedPoolEntry, HostModelCostEntry, ProviderConfirmationInput } from "../types/providerConfirmation.js";
|
|
4
4
|
export type CapabilityTier = "frontier" | "capable" | "fast" | "unknown";
|
|
@@ -100,4 +100,46 @@ export declare function annotateConfirmedPool(pool: ConfirmedPoolEntry[], sessio
|
|
|
100
100
|
*/
|
|
101
101
|
export declare function annotateConfirmedPoolCost(pool: ConfirmedPoolEntry[], sessionConfig: SessionConfig): ConfirmedPoolEntry[];
|
|
102
102
|
export declare function applyProviderConfirmationSelections(discovered: DiscoveredProvider[], exclude: ResolvedProviderName[], addUndetected: DiscoveredProvider[]): ConfirmedProviderPool;
|
|
103
|
+
/**
|
|
104
|
+
* Display-only view of one `sessionConfig.sources[]` pool for the Gate-0 roster.
|
|
105
|
+
*
|
|
106
|
+
* Backlog gap (a): `discoverProviders`/`buildSharedProviderConfirmation` only ever
|
|
107
|
+
* looked at PATH-probed CLIs + the legacy `openai_compatible` block, so an explicit
|
|
108
|
+
* `sources[]` pool (e.g. an opencode-free endpoint) never appeared at Gate-0 even
|
|
109
|
+
* though `collectDispatchableSources` (apiPool.ts) folds EVERY `sources[]` entry
|
|
110
|
+
* into what actually dispatches — the operator was confirming an ordering that
|
|
111
|
+
* omitted pools that WILL route. This type/derivation is display-only: it never
|
|
112
|
+
* round-trips through `ConfirmedPoolEntry` / the persisted `SharedProviderConfirmation`,
|
|
113
|
+
* so it can't perturb the existing cost_order/dispatch contract.
|
|
114
|
+
*/
|
|
115
|
+
export interface SourcePoolDisplayEntry {
|
|
116
|
+
/**
|
|
117
|
+
* Same id convention the dispatch side uses (explicit `id`, else
|
|
118
|
+
* `${provider}:${model ?? endpoint ?? "default"}`) — display-only, not a
|
|
119
|
+
* guaranteed exact match of the dispatch-side pool key.
|
|
120
|
+
*/
|
|
121
|
+
id: string;
|
|
122
|
+
provider: DispatchableSource["provider"];
|
|
123
|
+
model?: string;
|
|
124
|
+
/**
|
|
125
|
+
* Operator-declared `cost_per_mtok` on this source. Authoritative over the
|
|
126
|
+
* models.dev catalog price when present (mirrors the dispatch-side authority
|
|
127
|
+
* rule on `DispatchableSource.cost_per_mtok` — see sessionConfig.ts).
|
|
128
|
+
*/
|
|
129
|
+
declared_cost_per_mtok?: number;
|
|
130
|
+
/**
|
|
131
|
+
* models.dev blended price, computed only when the source has no declared cost
|
|
132
|
+
* and a model id is known; `null` when the dataset can't price it.
|
|
133
|
+
*/
|
|
134
|
+
blended_price_usd_per_mtok?: number | null;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Derive the Gate-0 display view of every configured `sessionConfig.sources[]`
|
|
138
|
+
* entry (backlog follow-up a). Read-only and additive: mirrors the same
|
|
139
|
+
* `sessionConfig.sources` array `collectDispatchableSources` (apiPool.ts) folds
|
|
140
|
+
* into dispatch, so what the operator sees at Gate-0 includes every pool that will
|
|
141
|
+
* actually route. Order is preserved from the operator-authored config array
|
|
142
|
+
* (content-derived, stable — never re-sorted by iteration/readdir order).
|
|
143
|
+
*/
|
|
144
|
+
export declare function deriveSourcePoolDisplay(sessionConfig: SessionConfig): SourcePoolDisplayEntry[];
|
|
103
145
|
//# sourceMappingURL=providerConfirmation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerConfirmation.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/providerConfirmation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"providerConfirmation.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/providerConfirmation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQ3E,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,kCAAkC,CAAC;AAM1C,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,eAAe,EAAE,kBAAkB,EAAE,CAAC;CACvC;AAsED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,aAAa,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,aAAa,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAuB,GAC1D,kBAAkB,EAAE,CA6DtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,kBAAkB,EAC5B,oBAAoB,EAAE,oBAAoB,EAC1C,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GACnD,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAUpC;AAED;;;;;;;GAOG;AACH;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,oBAAoB,EAC1B,aAAa,EAAE,aAAa,GAC3B,MAAM,GAAG,SAAS,CASpB;AAED,oFAAoF;AACpF,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC;;;OAGG;IACH,qBAAqB,EAAE,kBAAkB,EAAE,CAAC;CAC7C;AA+BD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,kBAAkB,EAAE,EAC1B,aAAa,EAAE,aAAa,EAC5B,KAAK,CAAC,EAAE,yBAAyB,GAChC,qBAAqB,CAiCvB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,kBAAkB,EAAE,EAC1B,aAAa,EAAE,aAAa,GAC3B,kBAAkB,EAAE,CAEtB;AAED,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,kBAAkB,EAAE,EAChC,OAAO,EAAE,oBAAoB,EAAE,EAC/B,aAAa,EAAE,kBAAkB,EAAE,GAClC,qBAAqB,CAYvB;AAMD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,aAAa,GAC3B,sBAAsB,EAAE,CAoB1B"}
|
|
@@ -259,4 +259,32 @@ export function applyProviderConfirmationSelections(discovered, exclude, addUnde
|
|
|
259
259
|
addedUndetected: undetectedNormalized,
|
|
260
260
|
};
|
|
261
261
|
}
|
|
262
|
+
/**
|
|
263
|
+
* Derive the Gate-0 display view of every configured `sessionConfig.sources[]`
|
|
264
|
+
* entry (backlog follow-up a). Read-only and additive: mirrors the same
|
|
265
|
+
* `sessionConfig.sources` array `collectDispatchableSources` (apiPool.ts) folds
|
|
266
|
+
* into dispatch, so what the operator sees at Gate-0 includes every pool that will
|
|
267
|
+
* actually route. Order is preserved from the operator-authored config array
|
|
268
|
+
* (content-derived, stable — never re-sorted by iteration/readdir order).
|
|
269
|
+
*/
|
|
270
|
+
export function deriveSourcePoolDisplay(sessionConfig) {
|
|
271
|
+
const sources = sessionConfig.sources ?? [];
|
|
272
|
+
return sources.map((source) => {
|
|
273
|
+
const id = source.id ?? `${source.provider}:${source.model ?? source.endpoint ?? "default"}`;
|
|
274
|
+
const entry = {
|
|
275
|
+
id,
|
|
276
|
+
provider: source.provider,
|
|
277
|
+
...(source.model ? { model: source.model } : {}),
|
|
278
|
+
...(source.cost_per_mtok !== undefined
|
|
279
|
+
? { declared_cost_per_mtok: source.cost_per_mtok }
|
|
280
|
+
: {}),
|
|
281
|
+
};
|
|
282
|
+
if (source.cost_per_mtok === undefined) {
|
|
283
|
+
entry.blended_price_usd_per_mtok = source.model
|
|
284
|
+
? (resolveModelPrice(source.model) ?? null)
|
|
285
|
+
: null;
|
|
286
|
+
}
|
|
287
|
+
return entry;
|
|
288
|
+
});
|
|
289
|
+
}
|
|
262
290
|
//# sourceMappingURL=providerConfirmation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerConfirmation.js","sourceRoot":"","sources":["../../../src/shared/providers/providerConfirmation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"providerConfirmation.js","sourceRoot":"","sources":["../../../src/shared/providers/providerConfirmation.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAsB,MAAM,yBAAyB,CAAC;AAuCrG,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;;;;;;;;;GAaG;AACH,SAAS,qBAAqB,CAAC,IAA0B;IACvD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa;YAChB,OAAO,UAAU,CAAC;QACpB,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,mBAAmB,CAAC;QACzB,KAAK,qBAAqB,CAAC;QAC3B,KAAK,aAAa,CAAC;QACnB,KAAK,aAAa;YAChB,OAAO,SAAS,CAAC;QACnB,KAAK,gBAAgB;YACnB,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAcD,MAAM,UAAU,GAAe;IAC7B;QACE,YAAY,EAAE,aAAa;QAC3B,cAAc,EAAE,QAAQ;QACxB,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO;KACjD;IACD;QACE,YAAY,EAAE,UAAU;QACxB,cAAc,EAAE,UAAU;QAC1B,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO;KAC9C;IACD;QACE,YAAY,EAAE,OAAO;QACrB,cAAc,EAAE,OAAO;QACvB,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO;KAC3C;CACF,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAC/B,aAA4B,EAC5B,MAAyB,OAAO,CAAC,GAAG,EACpC,gBAA8C,aAAa;IAE3D,MAAM,UAAU,GAAyB,EAAE,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,OAAO,GACX,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,cAAc,CAAC;QAC5E,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,sEAAsE;QACtE,yEAAyE;QACzE,4EAA4E;QAC5E,kFAAkF;QAClF,4DAA4D;QAC5D,IAAI,KAAK,CAAC,YAAY,KAAK,UAAU,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/E,SAAS;QACX,CAAC;QAED,4EAA4E;QAC5E,sEAAsE;QACtE,MAAM,YAAY,GAAG,+BAA+B,CAAC,MAAM,EAAE,aAAa,EAAE;YAC1E,GAAG;YACH,aAAa,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,KAAK,OAAO;SAChD,CAAC,CAAC;QAEH,4EAA4E;QAC5E,2EAA2E;QAC3E,mEAAmE;QACnE,kEAAkE;QAClE,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAE5D,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,KAAK,CAAC,YAAY;YACxB,OAAO;YACP,cAAc,EAAE,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC;YACzD,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,OAAO;YACzB,MAAM,EAAE,OAAO;gBACb,CAAC,CAAC,gEAAgE,KAAK,CAAC,YAAY,UAAU;gBAC9F,CAAC,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;oBACnC,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,yEAAyE;SAChF,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IAC/E,+EAA+E;IAC/E,8EAA8E;IAC9E,4EAA4E;IAC5E,IAAI,6BAA6B,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnE,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,aAAa,CAAC,iBAAiB,EAAE,KAAK;YAC/C,cAAc,EAAE,qBAAqB,CAAC,mBAAmB,CAAC;YAC1D,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,oEAAoE;SAC7E,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAA4B,EAC5B,oBAA0C,EAC1C,GAAoD;IAEpD,IAAI,OAAO,oBAAoB,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAA0B,EAC1B,aAA4B;IAE5B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,mBAAmB;YACtB,OAAO,aAAa,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QACrE,KAAK,OAAO;YACV,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QACzD;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAaD;;;;;;GAMG;AACH,SAAS,qBAAqB,CAC5B,UAA2B,EAC3B,aAAwB;IAExB,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAA0B,EAC1B,aAA4B,EAC5B,KAAiC;IAEjC,MAAM,UAAU,GAAG,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC;IAC5C,MAAM,kBAAkB,GAAoB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/D,GAAG,EAAE,KAAK,CAAC,IAAI;QACf,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC;KACxD,CAAC,CAAC,CAAC;IACJ,gFAAgF;IAChF,kFAAkF;IAClF,mFAAmF;IACnF,MAAM,cAAc,GAAoB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,GAAG,EAAE,CAAC,CAAC,QAAQ;QACf,KAAK,EAAE,CAAC,CAAC,QAAQ;KAClB,CAAC,CAAC,CAAC;IACJ,MAAM,SAAS,GAAG,qBAAqB,CACrC,CAAC,GAAG,kBAAkB,EAAE,GAAG,cAAc,CAAC,EAC1C,KAAK,EAAE,UAAU,CAClB,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO;YACL,GAAG,KAAK;YACR,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,0BAA0B,EAAE,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;YAC3E,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,qBAAqB,GAAyB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzE,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,0BAA0B,EAAE,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI;QACjE,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC3C,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAA0B,EAC1B,aAA4B;IAE5B,OAAO,qBAAqB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,aAAa,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,UAAgC,EAChC,OAA+B,EAC/B,aAAmC;IAEnC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAuB,OAAO,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,MAAM,oBAAoB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,GAAG,CAAC;QACJ,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,SAAS,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,oBAAoB,CAAC;QACjD,QAAQ,EAAE,OAAO;QACjB,eAAe,EAAE,oBAAoB;KACtC,CAAC;AACJ,CAAC;AAwCD;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,aAA4B;IAE5B,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC5B,MAAM,EAAE,GACN,MAAM,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;QACpF,MAAM,KAAK,GAA2B;YACpC,EAAE;YACF,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS;gBACpC,CAAC,CAAC,EAAE,sBAAsB,EAAE,MAAM,CAAC,aAAa,EAAE;gBAClD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACvC,KAAK,CAAC,0BAA0B,GAAG,MAAM,CAAC,KAAK;gBAC7C,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;gBAC3C,CAAC,CAAC,IAAI,CAAC;QACX,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { QuotaStateEntry } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Derive a LOCAL, credential-VALUE-free account id for a bare-API-key source
|
|
4
|
+
* (`openai-compatible` — NIM/vLLM/LM Studio/...), from `(endpoint,
|
|
5
|
+
* api_key_env)` — the only discriminator such a source exposes with no
|
|
6
|
+
* whoami/network call. Two sources declaring the SAME normalized endpoint and
|
|
7
|
+
* the SAME `api_key_env` NAME (never its value — the env var's contents are
|
|
8
|
+
* never read here) resolve to the SAME account id, so a learned 429/cooldown
|
|
9
|
+
* observed on one folds onto every sibling sharing that credential.
|
|
10
|
+
*
|
|
11
|
+
* Backlog HIGH, 2026-07-11: the primary `openai-compatible/*` source and the
|
|
12
|
+
* explicitly-`id`'d `nim-nano`/`nim-super`/`nim-kimi` sources all authenticate
|
|
13
|
+
* with the same `NVIDIA_API_KEY` against the same endpoint, but formed
|
|
14
|
+
* separately-keyed quota pools (`dispatchableSourceId` — untouched by this
|
|
15
|
+
* module, still subdivides BUDGETS per source/model) — so a learned cooldown
|
|
16
|
+
* on the primary never gated the siblings. See {@link foldAccountCooldown}
|
|
17
|
+
* for how the derived id is used.
|
|
18
|
+
*
|
|
19
|
+
* Deliberately NOT an extension of `BaseHttpQuotaSource.resolveAccountId`
|
|
20
|
+
* (`httpQuotaSource.ts`) — that interface is a stub for a live network
|
|
21
|
+
* handshake (Claude/Codex/Copilot/Antigravity each expose a whoami-shaped
|
|
22
|
+
* endpoint); a bare API key has no such endpoint, so this is a pure, local,
|
|
23
|
+
* no-I/O derivation instead.
|
|
24
|
+
*
|
|
25
|
+
* Returns null when: the source isn't `openai-compatible`; either half of the
|
|
26
|
+
* discriminator is missing; or the source already carries an explicit
|
|
27
|
+
* `account` override (`DispatchableSource.account` — the operator's own
|
|
28
|
+
* account declaration always wins, and two explicitly-different declared
|
|
29
|
+
* accounts on the same endpoint/key must NOT be silently re-merged here).
|
|
30
|
+
*/
|
|
31
|
+
export declare function deriveLocalAccountId(source: {
|
|
32
|
+
provider: string;
|
|
33
|
+
endpoint?: string;
|
|
34
|
+
api_key_env?: string;
|
|
35
|
+
account?: string | null;
|
|
36
|
+
}): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Fold the ACCOUNT-scoped 429/cooldown signal from a set of sibling pools'
|
|
39
|
+
* quota-state entries into `ownEntry`, taking whichever of `cooldown_until` /
|
|
40
|
+
* `last_429_at` is furthest in the future across the whole group. This is the
|
|
41
|
+
* mechanism that makes the invariant hold: a cooldown learned on ANY sibling
|
|
42
|
+
* source of the same account gates EVERY sibling, because every sibling's
|
|
43
|
+
* effective entry is re-derived through this fold.
|
|
44
|
+
*
|
|
45
|
+
* `tokens_per_pct` / `output_per_input` / `consecutive_429_count` (per-pool
|
|
46
|
+
* BUDGET and backoff-growth bookkeeping) are always taken from `ownEntry`
|
|
47
|
+
* only — the account fold gates the cooldown-gating axis alone, never the
|
|
48
|
+
* per-model budget subdivision (`dispatchableSourceId` stays untouched).
|
|
49
|
+
*
|
|
50
|
+
* Pure; never mutates its inputs. Returns null only when `ownEntry` is null
|
|
51
|
+
* and no sibling contributes a cooldown/last-429 signal either.
|
|
52
|
+
*/
|
|
53
|
+
export declare function foldAccountCooldown(ownEntry: QuotaStateEntry | null | undefined, siblingEntries: ReadonlyArray<QuotaStateEntry | null | undefined>): QuotaStateEntry | null;
|
|
54
|
+
//# sourceMappingURL=accountId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountId.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/accountId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,GAAG,MAAM,GAAG,IAAI,CAOhB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC5C,cAAc,EAAE,aAAa,CAAC,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC,GAChE,eAAe,GAAG,IAAI,CAuCxB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derive a LOCAL, credential-VALUE-free account id for a bare-API-key source
|
|
3
|
+
* (`openai-compatible` — NIM/vLLM/LM Studio/...), from `(endpoint,
|
|
4
|
+
* api_key_env)` — the only discriminator such a source exposes with no
|
|
5
|
+
* whoami/network call. Two sources declaring the SAME normalized endpoint and
|
|
6
|
+
* the SAME `api_key_env` NAME (never its value — the env var's contents are
|
|
7
|
+
* never read here) resolve to the SAME account id, so a learned 429/cooldown
|
|
8
|
+
* observed on one folds onto every sibling sharing that credential.
|
|
9
|
+
*
|
|
10
|
+
* Backlog HIGH, 2026-07-11: the primary `openai-compatible/*` source and the
|
|
11
|
+
* explicitly-`id`'d `nim-nano`/`nim-super`/`nim-kimi` sources all authenticate
|
|
12
|
+
* with the same `NVIDIA_API_KEY` against the same endpoint, but formed
|
|
13
|
+
* separately-keyed quota pools (`dispatchableSourceId` — untouched by this
|
|
14
|
+
* module, still subdivides BUDGETS per source/model) — so a learned cooldown
|
|
15
|
+
* on the primary never gated the siblings. See {@link foldAccountCooldown}
|
|
16
|
+
* for how the derived id is used.
|
|
17
|
+
*
|
|
18
|
+
* Deliberately NOT an extension of `BaseHttpQuotaSource.resolveAccountId`
|
|
19
|
+
* (`httpQuotaSource.ts`) — that interface is a stub for a live network
|
|
20
|
+
* handshake (Claude/Codex/Copilot/Antigravity each expose a whoami-shaped
|
|
21
|
+
* endpoint); a bare API key has no such endpoint, so this is a pure, local,
|
|
22
|
+
* no-I/O derivation instead.
|
|
23
|
+
*
|
|
24
|
+
* Returns null when: the source isn't `openai-compatible`; either half of the
|
|
25
|
+
* discriminator is missing; or the source already carries an explicit
|
|
26
|
+
* `account` override (`DispatchableSource.account` — the operator's own
|
|
27
|
+
* account declaration always wins, and two explicitly-different declared
|
|
28
|
+
* accounts on the same endpoint/key must NOT be silently re-merged here).
|
|
29
|
+
*/
|
|
30
|
+
export function deriveLocalAccountId(source) {
|
|
31
|
+
if (source.account)
|
|
32
|
+
return null;
|
|
33
|
+
if (source.provider !== "openai-compatible")
|
|
34
|
+
return null;
|
|
35
|
+
if (!source.endpoint || !source.api_key_env)
|
|
36
|
+
return null;
|
|
37
|
+
const normalizedEndpoint = source.endpoint.trim().toLowerCase().replace(/\/+$/, "");
|
|
38
|
+
if (!normalizedEndpoint)
|
|
39
|
+
return null;
|
|
40
|
+
return `${normalizedEndpoint}::${source.api_key_env}`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Fold the ACCOUNT-scoped 429/cooldown signal from a set of sibling pools'
|
|
44
|
+
* quota-state entries into `ownEntry`, taking whichever of `cooldown_until` /
|
|
45
|
+
* `last_429_at` is furthest in the future across the whole group. This is the
|
|
46
|
+
* mechanism that makes the invariant hold: a cooldown learned on ANY sibling
|
|
47
|
+
* source of the same account gates EVERY sibling, because every sibling's
|
|
48
|
+
* effective entry is re-derived through this fold.
|
|
49
|
+
*
|
|
50
|
+
* `tokens_per_pct` / `output_per_input` / `consecutive_429_count` (per-pool
|
|
51
|
+
* BUDGET and backoff-growth bookkeeping) are always taken from `ownEntry`
|
|
52
|
+
* only — the account fold gates the cooldown-gating axis alone, never the
|
|
53
|
+
* per-model budget subdivision (`dispatchableSourceId` stays untouched).
|
|
54
|
+
*
|
|
55
|
+
* Pure; never mutates its inputs. Returns null only when `ownEntry` is null
|
|
56
|
+
* and no sibling contributes a cooldown/last-429 signal either.
|
|
57
|
+
*/
|
|
58
|
+
export function foldAccountCooldown(ownEntry, siblingEntries) {
|
|
59
|
+
let cooldownUntil = ownEntry?.cooldown_until ?? null;
|
|
60
|
+
let cooldownUntilMs = cooldownUntil ? Date.parse(cooldownUntil) : NaN;
|
|
61
|
+
let lastAt = ownEntry?.last_429_at ?? null;
|
|
62
|
+
let lastAtMs = lastAt ? Date.parse(lastAt) : NaN;
|
|
63
|
+
for (const sibling of siblingEntries) {
|
|
64
|
+
const siblingCooldown = sibling?.cooldown_until;
|
|
65
|
+
if (siblingCooldown) {
|
|
66
|
+
const ms = Date.parse(siblingCooldown);
|
|
67
|
+
if (Number.isFinite(ms) && (!Number.isFinite(cooldownUntilMs) || ms > cooldownUntilMs)) {
|
|
68
|
+
cooldownUntil = siblingCooldown;
|
|
69
|
+
cooldownUntilMs = ms;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const siblingLast = sibling?.last_429_at;
|
|
73
|
+
if (siblingLast) {
|
|
74
|
+
const ms = Date.parse(siblingLast);
|
|
75
|
+
if (Number.isFinite(ms) && (!Number.isFinite(lastAtMs) || ms > lastAtMs)) {
|
|
76
|
+
lastAt = siblingLast;
|
|
77
|
+
lastAtMs = ms;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!ownEntry && cooldownUntil === null && lastAt === null)
|
|
82
|
+
return null;
|
|
83
|
+
return {
|
|
84
|
+
updated_at: ownEntry?.updated_at ?? new Date().toISOString(),
|
|
85
|
+
cooldown_until: cooldownUntil,
|
|
86
|
+
last_429_at: lastAt,
|
|
87
|
+
...(ownEntry?.consecutive_429_count !== undefined
|
|
88
|
+
? { consecutive_429_count: ownEntry.consecutive_429_count }
|
|
89
|
+
: {}),
|
|
90
|
+
...(ownEntry?.tokens_per_pct !== undefined ? { tokens_per_pct: ownEntry.tokens_per_pct } : {}),
|
|
91
|
+
...(ownEntry?.output_per_input !== undefined
|
|
92
|
+
? { output_per_input: ownEntry.output_per_input }
|
|
93
|
+
: {}),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=accountId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountId.js","sourceRoot":"","sources":["../../../src/shared/quota/accountId.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiPool.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/apiPool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"apiPool.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/apiPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { probeQuotaSource, resolveAccountIdSafe } from "./quotaSource.js";
|
|
|
2
2
|
import { buildProviderModelKey } from "./scheduler.js";
|
|
3
3
|
import { parseProviderModelKey } from "./httpQuotaSource.js";
|
|
4
4
|
import { buildAccountScopedQuotaSource } from "./compositeQuotaSource.js";
|
|
5
|
+
import { deriveLocalAccountId, foldAccountCooldown } from "./accountId.js";
|
|
5
6
|
import { classifyQuotaCoverage, sourceCoversProvider } from "./coverage.js";
|
|
6
7
|
import { hasConfiguredOpenAiCompatible } from "../providers/providerFactory.js";
|
|
7
8
|
import { resolveConversationHostProvider } from "../providers/providerPathGuard.js";
|
|
@@ -369,6 +370,33 @@ export async function buildSourcePools(params) {
|
|
|
369
370
|
const sources = collectDispatchableSources(params.sessionConfig, params.primaryProviderName, {
|
|
370
371
|
demotePrimaryInProcess: params.demotePrimaryInProcess,
|
|
371
372
|
});
|
|
372
|
-
|
|
373
|
+
const pools = await Promise.all(sources.map((source) => buildSourcePool({ source, quotaSource: params.quotaSource, quotaEntries: params.quotaEntries })));
|
|
374
|
+
return foldAccountCooldownAcrossPools(pools);
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Re-derive each pool's `quotaStateEntry` by folding in the account-scoped
|
|
378
|
+
* cooldown/429 signal from its siblings (Bug 3 / Slice A3: account-axis pool
|
|
379
|
+
* identity). Applied ONCE across the whole freshly-built pool set — after
|
|
380
|
+
* this, every pool's frozen `quotaStateEntry` already reflects the worst
|
|
381
|
+
* cooldown its account has seen, so a peer whose OWN key never recorded a 429
|
|
382
|
+
* still shows up degraded. This is the construction-time counterpart to the
|
|
383
|
+
* live fold `selectProvider` applies mid-run in `rollingDispatch.ts` (same
|
|
384
|
+
* {@link foldAccountCooldown} primitive, single-sourced). A pool with no
|
|
385
|
+
* derivable account (not `openai-compatible`, missing endpoint/api_key_env, or
|
|
386
|
+
* an explicit `source.account` override) is returned unchanged.
|
|
387
|
+
*/
|
|
388
|
+
function foldAccountCooldownAcrossPools(pools) {
|
|
389
|
+
return pools.map((pool) => {
|
|
390
|
+
const accountId = pool.source ? deriveLocalAccountId(pool.source) : null;
|
|
391
|
+
if (!accountId)
|
|
392
|
+
return pool;
|
|
393
|
+
const siblingEntries = pools
|
|
394
|
+
.filter((p) => p !== pool && p.source && deriveLocalAccountId(p.source) === accountId)
|
|
395
|
+
.map((p) => p.quotaStateEntry ?? null);
|
|
396
|
+
if (siblingEntries.length === 0)
|
|
397
|
+
return pool;
|
|
398
|
+
const folded = foldAccountCooldown(pool.quotaStateEntry ?? null, siblingEntries);
|
|
399
|
+
return folded === (pool.quotaStateEntry ?? null) ? pool : { ...pool, quotaStateEntry: folded };
|
|
400
|
+
});
|
|
373
401
|
}
|
|
374
402
|
//# sourceMappingURL=apiPool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiPool.js","sourceRoot":"","sources":["../../../src/shared/quota/apiPool.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AAEpF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA0B,EAAE,OAAuB;IACtF,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACtE,OAAO,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC;AAClG,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,KAAyB;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACnF,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,KAAyB;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACnF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA0B;IAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;IAClC,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,mBAAmB;YACtB,OAAO;gBACL,iBAAiB,EAAE;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,GAAG,CAAC;iBACL;aACF,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QAC5E,KAAK,UAAU;YACb,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QAC1D,KAAK,qBAAqB;YACxB,OAAO;gBACL,mBAAmB,EAAE;oBACnB,gBAAgB,EAAG,CAAC,CAAC,gBAAyC,IAAI,EAAE;oBACpE,GAAG,CAAC;iBACL;aACF,CAAC;QACJ,KAAK,gBAAgB;YACnB,uEAAuE;YACvE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,aAA4B,EAC5B,MAAsC;IAEtC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;AACxF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAQxC;IACC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAC5E,GAAqB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CACjE,CAAC;IACF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,OAAO;QAClB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK;QACtD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;QACjD,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;QAC/C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,mBAAmB,EAAE,KAAK,CAAC,QAAQ;QACnC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,aAAa,EAAE,qBAAqB,CAClC,MAAM,CAAC,YAAY,EACnB,oBAAoB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAC9D;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAazC;IACC,kFAAkF;IAClF,iFAAiF;IACjF,+EAA+E;IAC/E,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAC5C,MAAM,CAAC,WAAW,EAClB,qBAAqB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAC7D,CAAC;IACF,OAAO,OAAO,CAAC,GAAG,CAChB,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,+EAA+E;QAC/E,qEAAqE;QACrE,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAClF,OAAO,kBAAkB,CAAC;YACxB,OAAO;YACP,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,IAAI,EAAE,KAAK,EAAE,IAAI;YACjB,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;YACjD,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI;YACrD,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,cAAc,CAC5B,KAAyD;IAEzD,MAAM,GAAG,GAAG,IAAI,GAAG,EAA8B,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM;YAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAIrC;IACC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IACrD,kFAAkF;IAClF,6EAA6E;IAC7E,MAAM,MAAM,GAAG,6BAA6B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClE,oFAAoF;IACpF,4EAA4E;IAC5E,MAAM,OAAO,GACX,MAAM,CAAC,OAAO;QACd,CAAC,MAAM,oBAAoB,CACzB,MAAM,EACN,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,CAChF,CAAC,CAAC;IACL,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,CACzD,GAAqB,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CACjE,CAAC;IACF,OAAO;QACL,EAAE,EAAE,OAAO;QACX,YAAY,EAAE,MAAM,CAAC,QAAQ;QAC7B,8EAA8E;QAC9E,kFAAkF;QAClF,mFAAmF;QACnF,oFAAoF;QACpF,+EAA+E;QAC/E,8EAA8E;QAC9E,SAAS,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;QAC/B,oBAAoB,EAAE,IAAI;QAC1B,0EAA0E;QAC1E,2EAA2E;QAC3E,6EAA6E;QAC7E,yEAAyE;QACzE,+EAA+E;QAC/E,gFAAgF;QAChF,gFAAgF;QAChF,cAAc,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC;QAClE,gFAAgF;QAChF,kFAAkF;QAClF,8EAA8E;QAC9E,mBAAmB,EAAE,qBAAqB,CAAC,MAAM,CAAC,aAAa,CAAC;QAChE,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI;QAC9C,iFAAiF;QACjF,2EAA2E;QAC3E,gBAAgB,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;QACtC,mBAAmB,EAAE,KAAK,CAAC,QAAQ;QACnC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,aAAa,EAAE,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpG,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,8BAA8B,GAAwB,IAAI,GAAG,CAAC;IAClE,mBAAmB;IACnB,OAAO;IACP,UAAU;CACX,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAAC,YAAgC;IAC3E,OAAO,YAAY,KAAK,SAAS,IAAI,8BAA8B,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACxF,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,4BAA4B,CAAC,OAI5C;IACC,IAAI,CAAC,OAAO,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC;IACjD,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,gBAAgB,GAAG,+BAA+B,CAAC;QACvD,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,OAAO,gBAAgB,KAAK,QAAQ,CAAC;AACvC,CAAC;AAED;oFACoF;AACpF,SAAS,sBAAsB,CAC7B,EAAmD;IAEnD,OAAO;QACL,QAAQ,EAAE,mBAAmB;QAC7B,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,WAAW,EAAE,EAAE,CAAC,WAAW;QAC3B,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,UAAU,EAAE;YACV,GAAG,CAAC,EAAE,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,GAAG,CAAC,EAAE,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1F,GAAG,CAAC,EAAE,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnG,GAAG,CAAC,EAAE,CAAC,wBAAwB,KAAK,SAAS;gBAC3C,CAAC,CAAC,EAAE,wBAAwB,EAAE,EAAE,CAAC,wBAAwB,EAAE;gBAC3D,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,EAAE,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnG,GAAG,CAAC,EAAE,CAAC,wBAAwB,KAAK,SAAS;gBAC3C,CAAC,CAAC,EAAE,wBAAwB,EAAE,EAAE,CAAC,wBAAwB,EAAE;gBAC3D,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,EAAE,CAAC,+BAA+B,KAAK,SAAS;gBAClD,CAAC,CAAC,EAAE,+BAA+B,EAAE,EAAE,CAAC,+BAA+B,EAAE;gBACzE,CAAC,CAAC,EAAE,CAAC;SACR;QACD,yEAAyE;QACzE,6EAA6E;QAC7E,2EAA2E;QAC3E,+DAA+D;QAC/D,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,aAA4B,EAC5B,mBAA2B;IAE3B,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,QAAQ,mBAAmB,EAAE,CAAC;QAC5B,KAAK,mBAAmB;YACtB,OAAO,6BAA6B,CAAC,aAAa,CAAC,iBAAiB,CAAC;gBACnE,CAAC,CAAC,sBAAsB,CAAC,aAAa,CAAC,iBAAkB,CAAC;gBAC1D,CAAC,CAAC,IAAI,CAAC;QACX,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;YACpC,OAAO;gBACL,QAAQ,EAAE,OAAO;gBACjB,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,UAAU,EAAE;oBACV,GAAG,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzE,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpE;aACF,CAAC;QACJ,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAC;YACvC,OAAO;gBACL,QAAQ,EAAE,UAAU;gBACpB,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,UAAU,EAAE;oBACV,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpE;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,0BAA0B,CACxC,aAA4B,EAC5B,mBAA2B,EAC3B,OAA8C;IAE9C,MAAM,GAAG,GAAyB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,CAAC,MAA0B,EAAQ,EAAE;QACtD,MAAM,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC,CAAC;IACF,oFAAoF;IACpF,qFAAqF;IACrF,iFAAiF;IACjF,IAAI,OAAO,EAAE,sBAAsB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,sBAAsB,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QAC3E,IAAI,OAAO;YAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,IACE,mBAAmB,KAAK,mBAAmB;QAC3C,6BAA6B,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAC9D,CAAC;QACD,UAAU,CAAC,sBAAsB,CAAC,aAAa,CAAC,iBAAkB,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAOtC;IACC,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,mBAAmB,EAAE;QAC3F,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;KACtD,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACrB,eAAe,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAChG,CACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"apiPool.js","sourceRoot":"","sources":["../../../src/shared/quota/apiPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -381,10 +381,10 @@ export declare const DispatchCapacityPoolSummarySchema: z.ZodObject<{
|
|
|
381
381
|
in_flight_tokens?: number | undefined;
|
|
382
382
|
calibrating?: boolean | undefined;
|
|
383
383
|
rank?: "deep" | "small" | "standard" | undefined;
|
|
384
|
+
declared_cost_per_mtok?: number | null | undefined;
|
|
384
385
|
quota_signal_degraded?: boolean | undefined;
|
|
385
386
|
quota_coverage?: "established" | "reactive_only" | "unestablished" | undefined;
|
|
386
387
|
concurrency_cap?: number | null | undefined;
|
|
387
|
-
declared_cost_per_mtok?: number | null | undefined;
|
|
388
388
|
}, {
|
|
389
389
|
confidence: "high" | "low" | "medium";
|
|
390
390
|
source: "default" | "explicit_config" | "discovered_capability" | "static_metadata" | "cli_flags" | "provider_default" | "learned";
|
|
@@ -425,10 +425,10 @@ export declare const DispatchCapacityPoolSummarySchema: z.ZodObject<{
|
|
|
425
425
|
in_flight_tokens?: number | undefined;
|
|
426
426
|
calibrating?: boolean | undefined;
|
|
427
427
|
rank?: "deep" | "small" | "standard" | undefined;
|
|
428
|
+
declared_cost_per_mtok?: number | null | undefined;
|
|
428
429
|
quota_signal_degraded?: boolean | undefined;
|
|
429
430
|
quota_coverage?: "established" | "reactive_only" | "unestablished" | undefined;
|
|
430
431
|
concurrency_cap?: number | null | undefined;
|
|
431
|
-
declared_cost_per_mtok?: number | null | undefined;
|
|
432
432
|
}>;
|
|
433
433
|
export type DispatchCapacityPoolSummary = z.infer<typeof DispatchCapacityPoolSummarySchema>;
|
|
434
434
|
/**
|
|
@@ -3,6 +3,37 @@ export interface RateLimitDetectionResult {
|
|
|
3
3
|
retryAfterMs: number | null;
|
|
4
4
|
rawMatch: string | null;
|
|
5
5
|
}
|
|
6
|
+
/** Detection result for the non-resettable credit-exhaustion error class. */
|
|
7
|
+
export interface CreditExhaustionDetectionResult {
|
|
8
|
+
isCreditExhausted: boolean;
|
|
9
|
+
rawMatch: string | null;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Detect a non-resettable credit-exhaustion condition (out of prepaid usage
|
|
13
|
+
* credits) — distinct from {@link detectRateLimitError}: a positive result here
|
|
14
|
+
* carries no retry-after/reset semantics, ever. A caller must exclude the pool
|
|
15
|
+
* from the admissible set for the remainder of the run rather than apply a
|
|
16
|
+
* timed cooldown.
|
|
17
|
+
*/
|
|
18
|
+
export declare function detectCreditExhaustionError(text: string): CreditExhaustionDetectionResult;
|
|
19
|
+
/**
|
|
20
|
+
* Channel-isolated credit-exhaustion detection (CE-003, mirrors
|
|
21
|
+
* {@link detectRateLimitFromChannel}): only the worker's `error`/`status`
|
|
22
|
+
* channel is inspected, never the consumed `result` channel, so a healthy
|
|
23
|
+
* AuditResult that merely quotes a credit-exhaustion string can never trip it.
|
|
24
|
+
*/
|
|
25
|
+
export declare function detectCreditExhaustionFromChannel(channel: WorkerOutputChannel, text: string): CreditExhaustionDetectionResult;
|
|
26
|
+
/**
|
|
27
|
+
* TIER 2 broad pre-filter (Slice A2b): true when `text` merely smells
|
|
28
|
+
* quota/billing-related. Deliberately over-broad and routing-ONLY — a positive
|
|
29
|
+
* result is never a classification by itself (see
|
|
30
|
+
* {@link detectCreditExhaustionError} / {@link detectRateLimitError} for the
|
|
31
|
+
* precise, acted-on classes). Callers use a positive result only to decide
|
|
32
|
+
* whether an otherwise-unmatched provider death should surface as the
|
|
33
|
+
* conservative `quota_unclassified` outcome (re-queue + verbatim-message
|
|
34
|
+
* harvest for pattern improvement) rather than a silent, unclassified `error`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function detectQuotaSuspicious(text: string): boolean;
|
|
6
37
|
/**
|
|
7
38
|
* The worker output channel a piece of text came from. Host *session-limit*
|
|
8
39
|
* sentinels are only trustworthy from the ERROR / STATUS channel: the consumed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorParsing.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/errorParsing.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"errorParsing.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/errorParsing.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AA+GD,6EAA6E;AAC7E,MAAM,WAAW,+BAA+B;IAC9C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AA2BD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,GACX,+BAA+B,CAkBjC;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,MAAM,GACX,+BAA+B,CAKjC;AA0BD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAgCD;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhE;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAmB,GACvB,wBAAwB,CAK1B;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAmB,GACvB,wBAAwB,CAgB1B;AAED,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAE1C,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,SAAS,GAAE,MAA4B,EACvC,GAAG,GAAE,MAAmB,GACvB,MAAM,CAGR"}
|
|
@@ -17,6 +17,31 @@ const USAGE_LIMIT_PATTERNS = [
|
|
|
17
17
|
/\b(?:session|usage) limit reached\b/i,
|
|
18
18
|
];
|
|
19
19
|
const ALL_RATE_LIMIT_PATTERNS = [...RATE_LIMIT_PATTERNS, ...USAGE_LIMIT_PATTERNS];
|
|
20
|
+
// Credit exhaustion (the account/API key has run out of PREPAID usage credits,
|
|
21
|
+
// e.g. Anthropic's "Your credit balance is too low" or OpenAI-compatible
|
|
22
|
+
// `insufficient_quota`) is architecturally distinct from a rate limit: it
|
|
23
|
+
// carries NO reset time — the condition does not clear on a timer, only when an
|
|
24
|
+
// operator adds credits. Patterns are deliberately exact vendor wording so an
|
|
25
|
+
// ordinary resettable 429 / "quota exceeded" (RATE_LIMIT_PATTERNS, which DOES
|
|
26
|
+
// reset) is never misclassified as unrecoverable, and vice versa. The
|
|
27
|
+
// `exceeded your current quota` phrase gap is BOUNDED (no wildcard span across a
|
|
28
|
+
// resettable clause), and `RESET_INDICATOR_PATTERN` below is a hard veto on any
|
|
29
|
+
// free-text match whose message self-describes as resettable — because
|
|
30
|
+
// permanently sinking a pool that would have recovered is worse than the bug
|
|
31
|
+
// this fixes (adversarial-review finding, 2026-07-11).
|
|
32
|
+
const CREDIT_EXHAUSTION_PATTERNS = [
|
|
33
|
+
/credit balance is too low/i,
|
|
34
|
+
/\bout of (?:usage )?credits\b/i,
|
|
35
|
+
/\binsufficient credits\b/i,
|
|
36
|
+
/\bno credits? remaining\b/i,
|
|
37
|
+
/\bpurchase (?:more )?credits\b/i,
|
|
38
|
+
/exceeded your current quota,? please check your plan and billing details/i,
|
|
39
|
+
];
|
|
40
|
+
// A message that says it RESETS / is transient is a rate limit, never permanent
|
|
41
|
+
// credit exhaustion — veto any free-text credit match when these appear. (The
|
|
42
|
+
// structured `insufficient_quota` JSON code is exempt: it is an unambiguous
|
|
43
|
+
// vendor billing signal, trusted even if the surrounding prose mentions retry.)
|
|
44
|
+
const RESET_INDICATOR_PATTERN = /\b(?:resets?|resetting|retry|retry[- ]after|temporar(?:y|ily)|transient|per[- ]?(?:minute|second|hour|day)|try again|rate[- ]?limit)\b/i;
|
|
20
45
|
function tryParseJson(text) {
|
|
21
46
|
const jsonStart = text.indexOf("{");
|
|
22
47
|
if (jsonStart === -1)
|
|
@@ -70,6 +95,96 @@ function detectFromJson(text) {
|
|
|
70
95
|
rawMatch: `json:${status === 429 ? "status=429" : `type=${type ?? errorType}`}`,
|
|
71
96
|
};
|
|
72
97
|
}
|
|
98
|
+
// OpenAI-compatible endpoints (OpenAI itself, and NIM/vLLM/LM Studio proxies
|
|
99
|
+
// that mirror the shape) report billing-hard-limit exhaustion with the
|
|
100
|
+
// structured `error.type`/`error.code === "insufficient_quota"` — a precise,
|
|
101
|
+
// vendor-defined signal distinct from `rate_limit_error`/status 429.
|
|
102
|
+
function detectCreditExhaustionFromJson(text) {
|
|
103
|
+
const obj = tryParseJson(text);
|
|
104
|
+
if (!obj)
|
|
105
|
+
return null;
|
|
106
|
+
const errorObj = obj["error"];
|
|
107
|
+
const errorType = errorObj?.["type"];
|
|
108
|
+
const errorCode = errorObj?.["code"];
|
|
109
|
+
const isCreditExhausted = errorType === "insufficient_quota" || errorCode === "insufficient_quota";
|
|
110
|
+
if (!isCreditExhausted)
|
|
111
|
+
return null;
|
|
112
|
+
return {
|
|
113
|
+
isCreditExhausted: true,
|
|
114
|
+
rawMatch: `json:type=${errorType ?? errorCode}`,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Detect a non-resettable credit-exhaustion condition (out of prepaid usage
|
|
119
|
+
* credits) — distinct from {@link detectRateLimitError}: a positive result here
|
|
120
|
+
* carries no retry-after/reset semantics, ever. A caller must exclude the pool
|
|
121
|
+
* from the admissible set for the remainder of the run rather than apply a
|
|
122
|
+
* timed cooldown.
|
|
123
|
+
*/
|
|
124
|
+
export function detectCreditExhaustionError(text) {
|
|
125
|
+
const jsonResult = detectCreditExhaustionFromJson(text);
|
|
126
|
+
if (jsonResult)
|
|
127
|
+
return jsonResult;
|
|
128
|
+
// A message that self-describes as resettable/transient is a rate limit, not
|
|
129
|
+
// permanent credit exhaustion — never sink such a pool for the whole run.
|
|
130
|
+
if (RESET_INDICATOR_PATTERN.test(text)) {
|
|
131
|
+
return { isCreditExhausted: false, rawMatch: null };
|
|
132
|
+
}
|
|
133
|
+
for (const pattern of CREDIT_EXHAUSTION_PATTERNS) {
|
|
134
|
+
const match = pattern.exec(text);
|
|
135
|
+
if (match) {
|
|
136
|
+
return { isCreditExhausted: true, rawMatch: match[0] };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return { isCreditExhausted: false, rawMatch: null };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Channel-isolated credit-exhaustion detection (CE-003, mirrors
|
|
143
|
+
* {@link detectRateLimitFromChannel}): only the worker's `error`/`status`
|
|
144
|
+
* channel is inspected, never the consumed `result` channel, so a healthy
|
|
145
|
+
* AuditResult that merely quotes a credit-exhaustion string can never trip it.
|
|
146
|
+
*/
|
|
147
|
+
export function detectCreditExhaustionFromChannel(channel, text) {
|
|
148
|
+
if (channel === "result") {
|
|
149
|
+
return { isCreditExhausted: false, rawMatch: null };
|
|
150
|
+
}
|
|
151
|
+
return detectCreditExhaustionError(text);
|
|
152
|
+
}
|
|
153
|
+
// Slice A2b (TIER 2 of the three-tier classifier — see rollingDispatch.ts's
|
|
154
|
+
// header doc for the full design): a deliberately BROAD, routing-only
|
|
155
|
+
// pre-filter for "does this text merely SMELL quota/billing-related?". Neither
|
|
156
|
+
// CREDIT_EXHAUSTION_PATTERNS nor ALL_RATE_LIMIT_PATTERNS is exhaustive — a
|
|
157
|
+
// provider death whose text matches neither currently falls through to a raw,
|
|
158
|
+
// silent `error` outcome (the exact failure mode credit-exhaustion detection
|
|
159
|
+
// fixed, but only for text it recognizes). This pattern is intentionally far
|
|
160
|
+
// broader than either precise class: a false positive here only routes an
|
|
161
|
+
// unmatched death to the CONSERVATIVE `quota_unclassified` degrade (re-queue +
|
|
162
|
+
// reversible cooldown, never a permanent pool exclusion — see
|
|
163
|
+
// `rollingDispatch.ts`) instead of a silent raw error, so over-matching is
|
|
164
|
+
// cheap. It is NEVER used to classify a `credit_exhausted` or `rate_limited`
|
|
165
|
+
// outcome — those stay owned by their precise detectors above, checked first.
|
|
166
|
+
// Broad — but NOT so broad it fires on ordinary crash text. Bare "limit" /
|
|
167
|
+
// "usage" / "credit" / "exceeded" / "rate" matched generic failures ("Maximum
|
|
168
|
+
// call stack size exceeded", a CLI "Usage:" banner, "...(reading credit)",
|
|
169
|
+
// "limit-based pagination") — adversarial-review finding. Require quota/billing-
|
|
170
|
+
// SPECIFIC phrasing (a qualifier before "limit", "credits" not bare "credit",
|
|
171
|
+
// etc.). Genuinely novel wording the precise detectors AND this filter both miss
|
|
172
|
+
// is caught by the host-observation net (triage.ts mechanism B), so erring
|
|
173
|
+
// slightly narrow here is safe; erring broad masks a real bug as a quota event.
|
|
174
|
+
const QUOTA_SUSPICIOUS_PATTERN = /\b(?:quota|billing|429|402|payment required|too many requests|throttl(?:e|ed|ing)|insufficient (?:quota|credits?|balance|funds)|credit balance|out of (?:usage |prepaid )?credits?|(?:no )?credits? (?:remaining|left)|(?:usage|rate|spend(?:ing)?|session|account|daily|weekly|monthly|token|request|concurrency)[- ]?(?:limit|cap)|(?:quota|usage|credit|rate|plan|token|request|spend(?:ing)?)\s+(?:exceeded|reached)|limit (?:reached|exceeded|hit)|rate[- ]?limit(?:ed|ing)?|exceeded your (?:current )?(?:quota|limit|usage|plan)|over (?:your )?(?:quota|limit))\b/i;
|
|
175
|
+
/**
|
|
176
|
+
* TIER 2 broad pre-filter (Slice A2b): true when `text` merely smells
|
|
177
|
+
* quota/billing-related. Deliberately over-broad and routing-ONLY — a positive
|
|
178
|
+
* result is never a classification by itself (see
|
|
179
|
+
* {@link detectCreditExhaustionError} / {@link detectRateLimitError} for the
|
|
180
|
+
* precise, acted-on classes). Callers use a positive result only to decide
|
|
181
|
+
* whether an otherwise-unmatched provider death should surface as the
|
|
182
|
+
* conservative `quota_unclassified` outcome (re-queue + verbatim-message
|
|
183
|
+
* harvest for pattern improvement) rather than a silent, unclassified `error`.
|
|
184
|
+
*/
|
|
185
|
+
export function detectQuotaSuspicious(text) {
|
|
186
|
+
return QUOTA_SUSPICIOUS_PATTERN.test(text);
|
|
187
|
+
}
|
|
73
188
|
function extractResetsInMs(text) {
|
|
74
189
|
const match = /Resets in (?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?/i.exec(text);
|
|
75
190
|
if (!match)
|