audit-tools 0.32.28 → 0.32.30
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/args.d.ts +10 -1
- package/dist/audit/cli/args.d.ts.map +1 -1
- package/dist/audit/cli/args.js +18 -1
- package/dist/audit/cli/args.js.map +1 -1
- package/dist/audit/cli/dispatch/quotaPool.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/quotaPool.js +3 -6
- package/dist/audit/cli/dispatch/quotaPool.js.map +1 -1
- package/dist/audit/cli/hybridDispatch.d.ts.map +1 -1
- package/dist/audit/cli/hybridDispatch.js +3 -12
- package/dist/audit/cli/hybridDispatch.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +9 -2
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
- package/dist/audit/cli/nextStepHelpers.js +8 -2
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/cli/quotaCommand.d.ts.map +1 -1
- package/dist/audit/cli/quotaCommand.js +7 -8
- package/dist/audit/cli/quotaCommand.js.map +1 -1
- package/dist/audit/cli/rollingAuditDispatch.d.ts +6 -0
- package/dist/audit/cli/rollingAuditDispatch.d.ts.map +1 -1
- package/dist/audit/cli/rollingAuditDispatch.js +10 -3
- package/dist/audit/cli/rollingAuditDispatch.js.map +1 -1
- package/dist/audit/quota/index.d.ts +10 -15
- package/dist/audit/quota/index.d.ts.map +1 -1
- package/dist/audit/quota/index.js +1 -1
- package/dist/audit/quota/index.js.map +1 -1
- package/dist/audit/supervisor/sessionConfig.d.ts +9 -1
- package/dist/audit/supervisor/sessionConfig.d.ts.map +1 -1
- package/dist/audit/supervisor/sessionConfig.js +28 -0
- package/dist/audit/supervisor/sessionConfig.js.map +1 -1
- package/dist/audit/validation/sessionConfig.d.ts.map +1 -1
- package/dist/audit/validation/sessionConfig.js +9 -0
- package/dist/audit/validation/sessionConfig.js.map +1 -1
- package/dist/remediate/index.d.ts.map +1 -1
- package/dist/remediate/index.js +14 -1
- package/dist/remediate/index.js.map +1 -1
- package/dist/remediate/quota/index.d.ts +2 -2
- package/dist/remediate/quota/index.d.ts.map +1 -1
- package/dist/remediate/quota/index.js +1 -1
- package/dist/remediate/quota/index.js.map +1 -1
- package/dist/remediate/steps/dispatch/waveScheduling.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/waveScheduling.js +9 -17
- package/dist/remediate/steps/dispatch/waveScheduling.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +7 -1
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +20 -6
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/shared/dispatch/rollingDispatch.d.ts +0 -5
- package/dist/shared/dispatch/rollingDispatch.d.ts.map +1 -1
- package/dist/shared/dispatch/rollingDispatch.js +25 -19
- package/dist/shared/dispatch/rollingDispatch.js.map +1 -1
- package/dist/shared/index.d.ts +6 -6
- 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/providerPathGuard.d.ts +52 -1
- package/dist/shared/providers/providerPathGuard.d.ts.map +1 -1
- package/dist/shared/providers/providerPathGuard.js +62 -0
- package/dist/shared/providers/providerPathGuard.js.map +1 -1
- package/dist/shared/quota/apiPool.d.ts +22 -0
- package/dist/shared/quota/apiPool.d.ts.map +1 -1
- package/dist/shared/quota/apiPool.js +30 -0
- package/dist/shared/quota/apiPool.js.map +1 -1
- package/dist/shared/quota/capacity.d.ts +6 -6
- package/dist/shared/quota/capacity.d.ts.map +1 -1
- package/dist/shared/quota/capacity.js +3 -4
- package/dist/shared/quota/capacity.js.map +1 -1
- package/dist/shared/quota/claimRegistry.d.ts.map +1 -1
- package/dist/shared/quota/claimRegistry.js +8 -4
- package/dist/shared/quota/claimRegistry.js.map +1 -1
- package/dist/shared/quota/compositeQuotaSource.d.ts +0 -1
- package/dist/shared/quota/compositeQuotaSource.d.ts.map +1 -1
- package/dist/shared/quota/compositeQuotaSource.js +1 -1
- package/dist/shared/quota/compositeQuotaSource.js.map +1 -1
- package/dist/shared/quota/learnedQuotaSource.d.ts +9 -3
- package/dist/shared/quota/learnedQuotaSource.d.ts.map +1 -1
- package/dist/shared/quota/learnedQuotaSource.js +18 -9
- package/dist/shared/quota/learnedQuotaSource.js.map +1 -1
- package/dist/shared/quota/reservationLedger.d.ts.map +1 -1
- package/dist/shared/quota/reservationLedger.js +10 -3
- package/dist/shared/quota/reservationLedger.js.map +1 -1
- package/dist/shared/quota/scheduler.d.ts +0 -2
- package/dist/shared/quota/scheduler.d.ts.map +1 -1
- package/dist/shared/quota/scheduler.js +9 -27
- package/dist/shared/quota/scheduler.js.map +1 -1
- package/dist/shared/quota/state.d.ts +88 -19
- package/dist/shared/quota/state.d.ts.map +1 -1
- package/dist/shared/quota/state.js +182 -135
- package/dist/shared/quota/state.js.map +1 -1
- package/dist/shared/quota/types.d.ts +10 -15
- package/dist/shared/quota/types.d.ts.map +1 -1
- package/dist/shared/quota/types.js +0 -2
- package/dist/shared/quota/types.js.map +1 -1
- package/dist/shared/repair/brokeredDispatch.d.ts +9 -6
- package/dist/shared/repair/brokeredDispatch.d.ts.map +1 -1
- package/dist/shared/repair/brokeredDispatch.js +12 -20
- package/dist/shared/repair/brokeredDispatch.js.map +1 -1
- package/dist/shared/types/sessionConfig.d.ts +13 -12
- package/dist/shared/types/sessionConfig.d.ts.map +1 -1
- package/dist/shared/types/sessionConfig.js +0 -13
- package/dist/shared/types/sessionConfig.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,19 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readFile, rename } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { withFileLock } from "./fileLock.js";
|
|
4
|
-
|
|
5
|
-
// A failure at concurrency N is evidence against N and the few levels above it
|
|
6
|
-
// (a failure at 5 makes 6, 7, 8, 9 suspect too), so failure weight spreads over
|
|
7
|
-
// this many buckets past the observed concurrency.
|
|
8
|
-
const FAILURE_SPREAD_BUCKETS = 4;
|
|
9
|
-
// computeMaxSafeConcurrency (and computeRampUpConcurrency) scans up to this many
|
|
10
|
-
// levels. Bucket writes are capped at this ceiling so quota-state.json does not
|
|
11
|
-
// grow indefinitely with entries that will never be read back.
|
|
12
|
-
export const MAX_BUCKET_LEVEL = 32;
|
|
13
|
-
let _stateDir;
|
|
4
|
+
import { writeJsonFile } from "../io/json.js";
|
|
14
5
|
let _statePath;
|
|
15
6
|
export function setQuotaStateDir(dir) {
|
|
16
|
-
_stateDir = dir;
|
|
17
7
|
_statePath = join(dir, "quota-state.json");
|
|
18
8
|
}
|
|
19
9
|
export function getQuotaStatePath() {
|
|
@@ -21,24 +11,6 @@ export function getQuotaStatePath() {
|
|
|
21
11
|
throw new Error("Quota state dir not set — call setQuotaStateDir() first.");
|
|
22
12
|
return _statePath;
|
|
23
13
|
}
|
|
24
|
-
export function decayWeight(weight, elapsedHours, halfLifeHours) {
|
|
25
|
-
if (halfLifeHours <= 0 || weight <= 0)
|
|
26
|
-
return 0;
|
|
27
|
-
return weight * Math.pow(0.5, elapsedHours / halfLifeHours);
|
|
28
|
-
}
|
|
29
|
-
export function applyDecayToEntry(entry, halfLifeHours) {
|
|
30
|
-
const elapsedHours = (Date.now() - new Date(entry.updated_at).getTime()) / (1000 * 60 * 60);
|
|
31
|
-
if (elapsedHours < 0.001)
|
|
32
|
-
return entry;
|
|
33
|
-
const decayed = {};
|
|
34
|
-
for (const [key, bucket] of Object.entries(entry.buckets)) {
|
|
35
|
-
decayed[key] = {
|
|
36
|
-
success_weight: decayWeight(bucket.success_weight, elapsedHours, halfLifeHours),
|
|
37
|
-
failure_weight: decayWeight(bucket.failure_weight, elapsedHours, halfLifeHours),
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
return { ...entry, buckets: decayed };
|
|
41
|
-
}
|
|
42
14
|
function isQuotaState(value) {
|
|
43
15
|
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
44
16
|
return false;
|
|
@@ -46,65 +18,170 @@ function isQuotaState(value) {
|
|
|
46
18
|
const version = obj["version"];
|
|
47
19
|
return (version === 1 || version === 2) && typeof obj["entries"] === "object";
|
|
48
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* The cold-start quota state. This is the ONLY value that legitimately means
|
|
23
|
+
* "nothing learned yet" — it must never be manufactured from a read failure.
|
|
24
|
+
* An empty state carries no `cooldown_until`, no learned limits, and no
|
|
25
|
+
* concurrency evidence, so silently substituting it for an unreadable file
|
|
26
|
+
* degrades the engine in the **fail-open** direction (unbounded dispatch).
|
|
27
|
+
*/
|
|
28
|
+
export function emptyQuotaState() {
|
|
29
|
+
return { version: 2, entries: {} };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The quota state file exists but could not be read or is not a valid
|
|
33
|
+
* {@link QuotaState}. Distinct from "absent" (cold start → {@link emptyQuotaState}).
|
|
34
|
+
*
|
|
35
|
+
* Thrown rather than degraded-to-empty for two reasons: a reader that swallows
|
|
36
|
+
* it dispatches with no throttle at all, and a read-modify-write path that
|
|
37
|
+
* swallows it overwrites the file with an empty state, destroying every learned
|
|
38
|
+
* limit and live cooldown. Callers that genuinely want a degrade must opt in
|
|
39
|
+
* explicitly and say so (see `learnedQuotaSource.probeUsage`, which reports
|
|
40
|
+
* `degraded`, and the read-only reporting commands).
|
|
41
|
+
*/
|
|
42
|
+
export class QuotaStateUnavailableError extends Error {
|
|
43
|
+
statePath;
|
|
44
|
+
kind;
|
|
45
|
+
reason;
|
|
46
|
+
constructor(statePath,
|
|
47
|
+
/**
|
|
48
|
+
* `corrupt` — the bytes are there but are not a valid QuotaState. Terminal
|
|
49
|
+
* for that file: re-reading will fail identically, so a write-path may
|
|
50
|
+
* quarantine it (see {@link readQuotaStateForUpdate}).
|
|
51
|
+
* `unreadable` — the file could not be opened (EACCES, EBUSY, EIO). Possibly
|
|
52
|
+
* transient, and the content may be perfectly good — NEVER destroy it.
|
|
53
|
+
*/
|
|
54
|
+
kind, reason) {
|
|
55
|
+
super(`Quota state at ${statePath} is unusable (${kind}): ${reason}`);
|
|
56
|
+
this.statePath = statePath;
|
|
57
|
+
this.kind = kind;
|
|
58
|
+
this.reason = reason;
|
|
59
|
+
this.name = "QuotaStateUnavailableError";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
49
62
|
export async function readQuotaState() {
|
|
50
63
|
const statePath = getQuotaStatePath();
|
|
64
|
+
let raw;
|
|
51
65
|
try {
|
|
52
|
-
|
|
53
|
-
const parsed = JSON.parse(raw);
|
|
54
|
-
if (isQuotaState(parsed)) {
|
|
55
|
-
if (parsed.version === 1) {
|
|
56
|
-
for (const entry of Object.values(parsed.entries)) {
|
|
57
|
-
entry.consecutive_429_count ??= 0;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return parsed;
|
|
61
|
-
}
|
|
62
|
-
process.stderr.write(`[quota] ignoring invalid quota state at ${statePath}: expected { version: 1|2, entries: object }\n`);
|
|
66
|
+
raw = await readFile(statePath, "utf8");
|
|
63
67
|
}
|
|
64
68
|
catch (error) {
|
|
65
69
|
if (error.code === "ENOENT") {
|
|
66
|
-
return
|
|
70
|
+
return emptyQuotaState();
|
|
67
71
|
}
|
|
68
|
-
|
|
72
|
+
throw new QuotaStateUnavailableError(statePath, "unreadable", error instanceof Error ? error.message : String(error));
|
|
69
73
|
}
|
|
70
|
-
|
|
74
|
+
let parsed;
|
|
75
|
+
try {
|
|
76
|
+
parsed = JSON.parse(raw);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw new QuotaStateUnavailableError(statePath, "corrupt", `not valid JSON (${error instanceof Error ? error.message : String(error)})`);
|
|
80
|
+
}
|
|
81
|
+
if (!isQuotaState(parsed)) {
|
|
82
|
+
throw new QuotaStateUnavailableError(statePath, "corrupt", "expected { version: 1|2, entries: object }");
|
|
83
|
+
}
|
|
84
|
+
if (parsed.version === 1) {
|
|
85
|
+
for (const entry of Object.values(parsed.entries)) {
|
|
86
|
+
entry.consecutive_429_count ??= 0;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return parsed;
|
|
71
90
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
91
|
+
/**
|
|
92
|
+
* The ONE opt-in degrade for {@link readQuotaState}: return the cold-start state
|
|
93
|
+
* when the file is unusable, after saying so on stderr. Use only where losing
|
|
94
|
+
* every cooldown and learned limit is survivable (pool construction, read-only
|
|
95
|
+
* reporting) — never on a path that would then WRITE the degraded state back.
|
|
96
|
+
* The degrade is loud by construction so a corrupt file cannot look like a cold
|
|
97
|
+
* start.
|
|
98
|
+
*/
|
|
99
|
+
export async function readQuotaStateOrDegrade(context) {
|
|
100
|
+
try {
|
|
101
|
+
return await readQuotaState();
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
process.stderr.write(`[quota] ${context}: ${error instanceof Error ? error.message : String(error)}; degrading to no learned quota state (no cooldowns, no learned limits)\n`);
|
|
105
|
+
return emptyQuotaState();
|
|
106
|
+
}
|
|
79
107
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Read quota state for a read-modify-write whose caller ALREADY HOLDS
|
|
110
|
+
* `quota-state.json.lock`. Every RMW helper in this module goes through it.
|
|
111
|
+
*
|
|
112
|
+
* A `corrupt` file is terminal — every future read fails the same way — so
|
|
113
|
+
* without a repair path the first bad byte would permanently disable cooldown
|
|
114
|
+
* persistence and limit learning for the life of that file, with nothing but one
|
|
115
|
+
* stderr line to show for it. So: quarantine the bad bytes aside (evidence is
|
|
116
|
+
* preserved, never deleted), say so loudly, and continue from cold state, which
|
|
117
|
+
* the caller's write then re-establishes. Safe to do here precisely because the
|
|
118
|
+
* lock is held.
|
|
119
|
+
*
|
|
120
|
+
* An `unreadable` file (EACCES/EBUSY/EIO) is NOT quarantined and NOT swallowed —
|
|
121
|
+
* the content may be perfectly good and the failure transient, so the rejection
|
|
122
|
+
* propagates and the caller leaves the file untouched.
|
|
123
|
+
*/
|
|
124
|
+
export async function readQuotaStateForUpdate(context) {
|
|
125
|
+
try {
|
|
126
|
+
return await readQuotaState();
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (!(error instanceof QuotaStateUnavailableError) || error.kind !== "corrupt") {
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
const statePath = getQuotaStatePath();
|
|
133
|
+
const quarantinePath = `${statePath}.corrupt-${new Date()
|
|
134
|
+
.toISOString()
|
|
135
|
+
.replace(/[:.]/g, "-")}`;
|
|
136
|
+
let quarantined = true;
|
|
137
|
+
try {
|
|
138
|
+
await rename(statePath, quarantinePath);
|
|
90
139
|
}
|
|
91
|
-
|
|
92
|
-
|
|
140
|
+
catch {
|
|
141
|
+
// A peer healed it first, or the rename itself is blocked. Either way the
|
|
142
|
+
// caller's write recreates a valid file; don't fail the run over it.
|
|
143
|
+
quarantined = false;
|
|
93
144
|
}
|
|
145
|
+
process.stderr.write(`[quota] ${context}: ${error.message}; ${quarantined ? `quarantined to ${quarantinePath}` : "could not quarantine it"}, continuing from cold state (learned limits and cooldowns are lost)\n`);
|
|
146
|
+
return emptyQuotaState();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Persist quota state atomically (temp file + rename, via the shared
|
|
151
|
+
* `writeJsonFile`). Atomicity is load-bearing: `refreshQuotaStateIfNeeded`
|
|
152
|
+
* reads this file WITHOUT taking `quota-state.json.lock`, so a truncating
|
|
153
|
+
* in-place write would expose a torn file to a co-located peer. With
|
|
154
|
+
* rename-over-destination a reader observes either the whole old file or the
|
|
155
|
+
* whole new one, never a prefix.
|
|
156
|
+
*/
|
|
157
|
+
export async function writeQuotaState(state) {
|
|
158
|
+
const entries = {};
|
|
159
|
+
for (const [key, entry] of Object.entries(state.entries)) {
|
|
160
|
+
entries[key] = normalizeEntry(entry);
|
|
94
161
|
}
|
|
95
|
-
|
|
162
|
+
await writeJsonFile(getQuotaStatePath(), { version: 2, entries });
|
|
96
163
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
164
|
+
/**
|
|
165
|
+
* Project an entry onto the v2 field set. A file written by an older build carries
|
|
166
|
+
* a `buckets` blob from the deleted concurrency learner; reading it round-trips
|
|
167
|
+
* harmlessly, but persisting it back under a `version: 2` stamp — which is
|
|
168
|
+
* supposed to mean "no bucket learner" — would keep the dead field alive forever.
|
|
169
|
+
* Writing is the migration.
|
|
170
|
+
*/
|
|
171
|
+
function normalizeEntry(entry) {
|
|
172
|
+
const normalized = {
|
|
173
|
+
updated_at: entry.updated_at,
|
|
174
|
+
cooldown_until: entry.cooldown_until,
|
|
175
|
+
last_429_at: entry.last_429_at,
|
|
176
|
+
};
|
|
177
|
+
if (entry.consecutive_429_count !== undefined) {
|
|
178
|
+
normalized.consecutive_429_count = entry.consecutive_429_count;
|
|
106
179
|
}
|
|
107
|
-
|
|
180
|
+
if (entry.tokens_per_pct !== undefined)
|
|
181
|
+
normalized.tokens_per_pct = entry.tokens_per_pct;
|
|
182
|
+
if (entry.output_per_input !== undefined)
|
|
183
|
+
normalized.output_per_input = entry.output_per_input;
|
|
184
|
+
return normalized;
|
|
108
185
|
}
|
|
109
186
|
// EWMA weight for a new tokens_per_pct observation folded into the running
|
|
110
187
|
// slope. 0.3 = responsive but not jumpy; a run flipping between windows still
|
|
@@ -181,13 +258,14 @@ export function foldOutputRatioObservation(prior, lens, actualInputTokens, actua
|
|
|
181
258
|
* Persist a folded output/input ratio observation for a pool's quota-state entry,
|
|
182
259
|
* under the shared quota-state file lock. Reads the current entry (or a blank one),
|
|
183
260
|
* folds the observation via {@link foldOutputRatioObservation}, and writes back.
|
|
184
|
-
*
|
|
261
|
+
* A missing state file is cold start; a CORRUPT one is quarantined and rebuilt
|
|
262
|
+
* ({@link readQuotaStateForUpdate}); a transient-unreadable one rejects. An
|
|
185
263
|
* observation carrying no ratio signal leaves the file untouched-in-value.
|
|
186
264
|
*/
|
|
187
265
|
export async function recordOutputRatioObservation(providerModelKey, lens, actualInputTokens, actualOutputTokens) {
|
|
188
266
|
const lockPath = getQuotaStatePath() + ".lock";
|
|
189
267
|
await withFileLock(lockPath, async () => {
|
|
190
|
-
const state = await
|
|
268
|
+
const state = await readQuotaStateForUpdate("recordOutputRatioObservation");
|
|
191
269
|
const entry = state.entries[providerModelKey] ?? blankEntry();
|
|
192
270
|
const updated = foldOutputRatioObservation(entry.output_per_input, lens, actualInputTokens, actualOutputTokens);
|
|
193
271
|
entry.output_per_input = updated;
|
|
@@ -200,13 +278,14 @@ export async function recordOutputRatioObservation(providerModelKey, lens, actua
|
|
|
200
278
|
* Persist a folded tokens_per_pct observation for a pool's quota-state entry,
|
|
201
279
|
* under the shared quota-state file lock. Reads the current entry (or a blank
|
|
202
280
|
* one), folds the observation via {@link foldTokensPerPctObservation}, and writes
|
|
203
|
-
* back.
|
|
204
|
-
*
|
|
281
|
+
* back. A missing state file is cold start; a CORRUPT one is quarantined and
|
|
282
|
+
* rebuilt ({@link readQuotaStateForUpdate}); a transient-unreadable one rejects.
|
|
283
|
+
* An observation that doesn't move the slope leaves the file untouched-in-value.
|
|
205
284
|
*/
|
|
206
285
|
export async function recordTokensPerPctObservation(providerModelKey, windowLabel, priorRemainingPct, newRemainingPct, tokensDispatched) {
|
|
207
286
|
const lockPath = getQuotaStatePath() + ".lock";
|
|
208
287
|
await withFileLock(lockPath, async () => {
|
|
209
|
-
const state = await
|
|
288
|
+
const state = await readQuotaStateForUpdate("recordTokensPerPctObservation");
|
|
210
289
|
const entry = state.entries[providerModelKey] ?? blankEntry();
|
|
211
290
|
const updated = foldTokensPerPctObservation(entry.tokens_per_pct, windowLabel, priorRemainingPct, newRemainingPct, tokensDispatched);
|
|
212
291
|
entry.tokens_per_pct = updated;
|
|
@@ -216,7 +295,7 @@ export async function recordTokensPerPctObservation(providerModelKey, windowLabe
|
|
|
216
295
|
});
|
|
217
296
|
}
|
|
218
297
|
function blankEntry() {
|
|
219
|
-
return { updated_at: new Date().toISOString(),
|
|
298
|
+
return { updated_at: new Date().toISOString(), cooldown_until: null, last_429_at: null };
|
|
220
299
|
}
|
|
221
300
|
export const BASE_COOLDOWN_MS = 60_000;
|
|
222
301
|
export const MAX_COOLDOWN_MS = 15 * 60_000;
|
|
@@ -224,53 +303,35 @@ export function computeBackoffCooldownMs(consecutive429Count) {
|
|
|
224
303
|
const ms = BASE_COOLDOWN_MS * Math.pow(2, Math.max(0, consecutive429Count - 1));
|
|
225
304
|
return Math.min(ms, MAX_COOLDOWN_MS);
|
|
226
305
|
}
|
|
227
|
-
export function computeBackoffFailureWeight(consecutive429Count) {
|
|
228
|
-
return 1.0 + 0.5 * Math.max(0, consecutive429Count - 1);
|
|
229
|
-
}
|
|
230
|
-
export async function recordWaveOutcome(providerModelKey, outcome, halfLifeHours) {
|
|
231
|
-
const lockPath = getQuotaStatePath() + ".lock";
|
|
232
|
-
await withFileLock(lockPath, () => recordWaveOutcomeUnsafe(providerModelKey, outcome, halfLifeHours));
|
|
233
|
-
}
|
|
234
306
|
/**
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
* at level `concurrency` is permanently capping the inferred safe concurrency —
|
|
238
|
-
* the scan in computeMaxSafeConcurrency breaks at the first bucket whose
|
|
239
|
-
* failure_weight dominates, so clearing one bad entry unblocks all higher levels.
|
|
307
|
+
* Record the outcome of a dispatched wave against a pool's quota entry: a success
|
|
308
|
+
* clears the cooldown and the 429 streak; a 429 extends both.
|
|
240
309
|
*
|
|
241
|
-
*
|
|
242
|
-
*
|
|
310
|
+
* It records no concurrency evidence. Concurrency is DECLARED by the provider
|
|
311
|
+
* (`source.quota.max_concurrent` → `CapacityPool.concurrencyCap`) or ABSENT, in
|
|
312
|
+
* which case quota headroom and rate limits are the only throttle. Inferring a
|
|
313
|
+
* safe concurrency from an outcome stream is a category error — see
|
|
314
|
+
* `spec/audit/dispatch-admission-control.md`.
|
|
243
315
|
*/
|
|
244
|
-
export async function
|
|
316
|
+
export async function recordWaveOutcome(providerModelKey, outcome) {
|
|
245
317
|
const lockPath = getQuotaStatePath() + ".lock";
|
|
246
|
-
await withFileLock(lockPath,
|
|
247
|
-
const state = await readQuotaState();
|
|
248
|
-
const entry = state.entries[providerModelKey];
|
|
249
|
-
if (!entry)
|
|
250
|
-
return;
|
|
251
|
-
const bucket = entry.buckets[String(concurrency)];
|
|
252
|
-
if (!bucket)
|
|
253
|
-
return;
|
|
254
|
-
bucket.failure_weight = 0;
|
|
255
|
-
entry.updated_at = new Date().toISOString();
|
|
256
|
-
state.entries[providerModelKey] = entry;
|
|
257
|
-
await writeQuotaState(state);
|
|
258
|
-
});
|
|
318
|
+
await withFileLock(lockPath, () => recordWaveOutcomeUnsafe(providerModelKey, outcome));
|
|
259
319
|
}
|
|
260
|
-
async function recordWaveOutcomeUnsafe(providerModelKey, outcome
|
|
261
|
-
const state = await
|
|
262
|
-
const entry =
|
|
320
|
+
async function recordWaveOutcomeUnsafe(providerModelKey, outcome) {
|
|
321
|
+
const state = await readQuotaStateForUpdate("recordWaveOutcome");
|
|
322
|
+
const entry = state.entries[providerModelKey] ?? blankEntry();
|
|
263
323
|
if (outcome.outcome === "success") {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
//
|
|
267
|
-
//
|
|
268
|
-
//
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
entry.
|
|
324
|
+
// A success does NOT cancel a live cooldown. Packets run concurrently, so a
|
|
325
|
+
// success completing at T+2s was almost certainly dispatched BEFORE the 429
|
|
326
|
+
// at T — it is not evidence the rate limit is over. Clearing the cooldown
|
|
327
|
+
// here would let the very next invocation schedule a full-width wave into a
|
|
328
|
+
// still-throttled pool AND restart the exponential backoff from its base.
|
|
329
|
+
// Only an already-expired cooldown is cleared (which also self-heals an
|
|
330
|
+
// unparseable timestamp, since NaN > now is false).
|
|
331
|
+
const cooldownActive = entry.cooldown_until != null && new Date(entry.cooldown_until).getTime() > Date.now();
|
|
332
|
+
if (!cooldownActive) {
|
|
333
|
+
entry.consecutive_429_count = 0;
|
|
334
|
+
entry.cooldown_until = null;
|
|
274
335
|
}
|
|
275
336
|
}
|
|
276
337
|
else {
|
|
@@ -291,20 +352,6 @@ async function recordWaveOutcomeUnsafe(providerModelKey, outcome, halfLifeHours)
|
|
|
291
352
|
else if (outcome.cooldown_until) {
|
|
292
353
|
entry.cooldown_until = outcome.cooldown_until;
|
|
293
354
|
}
|
|
294
|
-
const failureWeight = outcome.outcome === "rate_limited"
|
|
295
|
-
? computeBackoffFailureWeight(new429Count)
|
|
296
|
-
: 1.0;
|
|
297
|
-
// Spread failure evidence from outcome.concurrency through
|
|
298
|
-
// outcome.concurrency + FAILURE_SPREAD_BUCKETS, but cap at
|
|
299
|
-
// MAX_BUCKET_LEVEL + FAILURE_SPREAD_BUCKETS — beyond this ceiling the
|
|
300
|
-
// scan loop in computeMaxSafeConcurrency will never reach, so additional
|
|
301
|
-
// entries only bloat the file.
|
|
302
|
-
const failureCeiling = Math.min(outcome.concurrency + FAILURE_SPREAD_BUCKETS, MAX_BUCKET_LEVEL + FAILURE_SPREAD_BUCKETS);
|
|
303
|
-
for (let n = outcome.concurrency; n <= failureCeiling; n++) {
|
|
304
|
-
const bucket = entry.buckets[String(n)] ?? { success_weight: 0, failure_weight: 0 };
|
|
305
|
-
bucket.failure_weight += failureWeight;
|
|
306
|
-
entry.buckets[String(n)] = bucket;
|
|
307
|
-
}
|
|
308
355
|
}
|
|
309
356
|
entry.updated_at = new Date().toISOString();
|
|
310
357
|
state.entries[providerModelKey] = entry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/shared/quota/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,+EAA+E;AAC/E,gFAAgF;AAChF,mDAAmD;AACnD,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,iFAAiF;AACjF,gFAAgF;AAChF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC,IAAI,SAA6B,CAAC;AAClC,IAAI,UAA8B,CAAC;AAEnC,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,SAAS,GAAG,GAAG,CAAC;IAChB,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC7F,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,MAAc,EACd,YAAoB,EACpB,aAAqB;IAErB,IAAI,aAAa,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAChD,OAAO,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAsB,EACtB,aAAqB;IAErB,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5F,IAAI,YAAY,GAAG,KAAK;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,OAAO,GAAsC,EAAE,CAAC;IACtD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,GAAG;YACb,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,EAAE,aAAa,CAAC;YAC/E,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,EAAE,aAAa,CAAC;SAChF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/B,OAAO,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClD,KAAK,CAAC,qBAAqB,KAAK,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2CAA2C,SAAS,gDAAgD,CACrG,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8CAA8C,SAAS,KACrD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,IAAI,CACL,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAiB;IACrD,MAAM,QAAQ,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC3F,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAe,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACxD,MAAM,SAAS,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAAsB,EACtB,aAAqB,EACrB,UAAU,GAAG,gBAAgB;IAE7B,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACxD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,MAAM;QACnB,IACE,MAAM,CAAC,cAAc,IAAI,mBAAmB;YAC5C,MAAM,CAAC,cAAc,GAAG,mBAAmB,EAC3C,CAAC;YACD,OAAO,GAAG,CAAC,CAAC;QACd,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC,MAAM,UAAU,wBAAwB,CACtC,KAAsB,EACtB,aAAqB,EACrB,UAAU,GAAG,gBAAgB;IAE7B,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,IACE,MAAM;QACN,MAAM,CAAC,cAAc,IAAI,qBAAqB;QAC9C,MAAM,CAAC,cAAc,GAAG,mBAAmB,EAC3C,CAAC;QACD,OAAO,OAAO,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAC7C,8EAA8E;AAC9E,gFAAgF;AAChF,yDAAyD;AACzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAyC,EACzC,WAAmB,EACnB,iBAAyB,EACzB,eAAuB,EACvB,gBAAwB;IAExB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IACzB,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACnC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;QACjC,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAClC,gBAAgB,IAAI,CAAC,EACrB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,sEAAsE;IACtE,MAAM,YAAY,GAAG,CAAC,iBAAiB,GAAG,eAAe,CAAC,GAAG,GAAG,CAAC;IACjE,IAAI,YAAY,GAAG,uBAAuB;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,WAAW,GAAG,gBAAgB,GAAG,YAAY,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IACnC,MAAM,OAAO,GACX,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QACvE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,yBAAyB,CAAC,GAAG,WAAW,GAAG,yBAAyB;QACtF,CAAC,CAAC,WAAW,CAAC;IAClB,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;AAC7C,CAAC;AAED,mFAAmF;AACnF,mFAAmF;AACnF,qFAAqF;AACrF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAyC,EACzC,IAAY,EACZ,iBAAyB,EACzB,kBAA0B;IAE1B,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IACzB,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACnC,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpC,iBAAiB,IAAI,CAAC;QACtB,kBAAkB,IAAI,CAAC,EACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,WAAW,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;IAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GACX,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QACvE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,uBAAuB,CAAC,GAAG,WAAW,GAAG,uBAAuB;QAClF,CAAC,CAAC,WAAW,CAAC;IAClB,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,gBAAwB,EACxB,IAAY,EACZ,iBAAyB,EACzB,kBAA0B;IAE1B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAC/C,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,0BAA0B,CACxC,KAAK,CAAC,gBAAgB,EACtB,IAAI,EACJ,iBAAiB,EACjB,kBAAkB,CACnB,CAAC;QACF,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC;QACjC,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;QACxC,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,gBAAwB,EACxB,WAAmB,EACnB,iBAAyB,EACzB,eAAuB,EACvB,gBAAwB;IAExB,MAAM,QAAQ,GAAG,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAC/C,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,2BAA2B,CACzC,KAAK,CAAC,cAAc,EACpB,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,gBAAgB,CACjB,CAAC;QACF,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;QAC/B,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;QACxC,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACxG,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AACvC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,MAAM,CAAC;AAE3C,MAAM,UAAU,wBAAwB,CAAC,mBAA2B;IAClE,MAAM,EAAE,GAAG,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC;IAChF,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,mBAA2B;IACrE,OAAO,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,gBAAwB,EACxB,OAA4B,EAC5B,aAAqB;IAErB,MAAM,QAAQ,GAAG,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAC/C,MAAM,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,gBAAgB,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AACxG,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,gBAAwB,EACxB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAC/C,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1B,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;QACxC,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,gBAAwB,EACxB,OAA4B,EAC5B,aAAqB;IAErB,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,UAAU,EAAE,EAAE,aAAa,CAAC,CAAC;IAEhG,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,KAAK,CAAC,qBAAqB,GAAG,CAAC,CAAC;QAChC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,oEAAoE;QACpE,uEAAuE;QACvE,8DAA8D;QAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;YACpF,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC;YAC7B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QACpC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,KAAK,CAAC,qBAAqB,IAAI,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QACzF,KAAK,CAAC,qBAAqB,GAAG,WAAW,CAAC;QAC1C,6EAA6E;QAC7E,yEAAyE;QACzE,0EAA0E;QAC1E,iEAAiE;QACjE,IAAI,OAAO,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;YACvC,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/C,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,KAAK,cAAc,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;YACxD,KAAK,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACxE,CAAC;aAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAClC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAChD,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,KAAK,cAAc;YACtD,CAAC,CAAC,2BAA2B,CAAC,WAAW,CAAC;YAC1C,CAAC,CAAC,GAAG,CAAC;QACR,2DAA2D;QAC3D,2DAA2D;QAC3D,sEAAsE;QACtE,yEAAyE;QACzE,+BAA+B;QAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,OAAO,CAAC,WAAW,GAAG,sBAAsB,EAC5C,gBAAgB,GAAG,sBAAsB,CAC1C,CAAC;QACF,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;YACpF,MAAM,CAAC,cAAc,IAAI,aAAa,CAAC;YACvC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QACpC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;IACxC,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/shared/quota/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,13 +39,8 @@ export declare const ResolvedLimitsSchema: z.ZodObject<{
|
|
|
39
39
|
output_tokens_per_minute: number | null;
|
|
40
40
|
}>;
|
|
41
41
|
export type ResolvedLimits = z.infer<typeof ResolvedLimitsSchema>;
|
|
42
|
-
export interface ConcurrencyBucket {
|
|
43
|
-
success_weight: number;
|
|
44
|
-
failure_weight: number;
|
|
45
|
-
}
|
|
46
42
|
export interface QuotaStateEntry {
|
|
47
43
|
updated_at: string;
|
|
48
|
-
buckets: Record<string, ConcurrencyBucket>;
|
|
49
44
|
cooldown_until: string | null;
|
|
50
45
|
last_429_at: string | null;
|
|
51
46
|
consecutive_429_count?: number;
|
|
@@ -80,7 +75,7 @@ export interface QuotaState {
|
|
|
80
75
|
* re-deriving the decision. Set by `scheduleWave`; logged by callers that hold a
|
|
81
76
|
* RunLogger as a `kind:"scope"` event.
|
|
82
77
|
*/
|
|
83
|
-
export declare const WaveBindingCapSchema: z.ZodEnum<["rpm", "tpm", "token_budget", "
|
|
78
|
+
export declare const WaveBindingCapSchema: z.ZodEnum<["rpm", "tpm", "token_budget", "cooldown", "host_concurrency", "none"]>;
|
|
84
79
|
export type WaveBindingCap = z.infer<typeof WaveBindingCapSchema>;
|
|
85
80
|
export interface WaveSchedule {
|
|
86
81
|
max_concurrent: number;
|
|
@@ -110,26 +105,26 @@ export interface WaveSchedule {
|
|
|
110
105
|
export declare const BackoffStateSchema: z.ZodObject<{
|
|
111
106
|
consecutive_429_count: z.ZodNumber;
|
|
112
107
|
current_cooldown_ms: z.ZodNumber;
|
|
113
|
-
current_failure_weight: z.ZodNumber;
|
|
114
108
|
}, "strict", z.ZodTypeAny, {
|
|
115
109
|
consecutive_429_count: number;
|
|
116
110
|
current_cooldown_ms: number;
|
|
117
|
-
current_failure_weight: number;
|
|
118
111
|
}, {
|
|
119
112
|
consecutive_429_count: number;
|
|
120
113
|
current_cooldown_ms: number;
|
|
121
|
-
current_failure_weight: number;
|
|
122
114
|
}>;
|
|
123
115
|
export type BackoffState = z.infer<typeof BackoffStateSchema>;
|
|
124
116
|
export interface ObservedWaveOutcome {
|
|
125
|
-
concurrency: number;
|
|
126
|
-
estimated_tokens: number;
|
|
127
117
|
/**
|
|
128
|
-
* - `success`: wave completed without error
|
|
118
|
+
* - `success`: wave completed without error — clears the 429 streak and cooldown,
|
|
119
|
+
* but NEVER a still-live cooldown (a concurrent success is not evidence a 429
|
|
120
|
+
* is over).
|
|
129
121
|
* - `rate_limited`: provider signalled 429 / quota exhaustion — applies cooldown + backoff.
|
|
130
|
-
* - `timeout`: execution deadline exceeded —
|
|
131
|
-
* - `error`: provider returned a non-quota error (crash, network failure) —
|
|
132
|
-
*
|
|
122
|
+
* - `timeout`: execution deadline exceeded — no rate-limit cooldown.
|
|
123
|
+
* - `error`: provider returned a non-quota error (crash, network failure) — no
|
|
124
|
+
* rate-limit cooldown (distinct from quota exhaustion).
|
|
125
|
+
*
|
|
126
|
+
* The outcome carries no `concurrency`: concurrency is DECLARED by the provider
|
|
127
|
+
* or ABSENT, never inferred from an outcome stream.
|
|
133
128
|
*/
|
|
134
129
|
outcome: "success" | "rate_limited" | "timeout" | "error";
|
|
135
130
|
cooldown_until?: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB,mIAQ5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,qBAAqB,sCAAoC,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,gCAAgC,kHAY3C,CAAC;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,gCAAgC,CACxC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;EAM5B,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAQtB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/quota/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB,mIAQ5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,qBAAqB,sCAAoC,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,gCAAgC,kHAY3C,CAAC;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,gCAAgC,CACxC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;EAM5B,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAQtB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC1C;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,mFAO/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,eAAe,CAAC;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,cAAc,CAAC;IAChC,sBAAsB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC7E;;;OAGG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;EAKpB,CAAC;AACZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;;;OAWG;IACH,OAAO,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;IAC1D,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
|
|
@@ -48,7 +48,6 @@ export const WaveBindingCapSchema = z.enum([
|
|
|
48
48
|
"rpm",
|
|
49
49
|
"tpm",
|
|
50
50
|
"token_budget",
|
|
51
|
-
"learned",
|
|
52
51
|
"cooldown",
|
|
53
52
|
"host_concurrency",
|
|
54
53
|
"none",
|
|
@@ -57,7 +56,6 @@ export const BackoffStateSchema = z
|
|
|
57
56
|
.object({
|
|
58
57
|
consecutive_429_count: z.number().int().min(0),
|
|
59
58
|
current_cooldown_ms: z.number().int().min(0),
|
|
60
|
-
current_failure_weight: z.number().min(0),
|
|
61
59
|
})
|
|
62
60
|
.strict();
|
|
63
61
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/quota/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,iBAAiB;IACjB,uBAAuB;IACvB,iBAAiB;IACjB,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,SAAS;CACV,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,IAAI,CAAC;IACrD,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,aAAa;IACb,wEAAwE;IACxE,yEAAyE;IACzE,mBAAmB;IACnB,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,eAAe;CAChB,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,gCAAgC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC/B,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7D,CAAC;KACD,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/quota/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,iBAAiB;IACjB,uBAAuB;IACvB,iBAAiB;IACjB,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,SAAS;CACV,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,IAAI,CAAC;IACrD,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,aAAa;IACb,wEAAwE;IACxE,yEAAyE;IACzE,mBAAmB;IACnB,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,eAAe;CAChB,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,gCAAgC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC/B,CAAC;KACD,MAAM,EAAE,CAAC;AAGZ,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3D,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7D,CAAC;KACD,MAAM,EAAE,CAAC;AAmCZ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,KAAK;IACL,KAAK;IACL,cAAc;IACd,UAAU;IACV,kBAAkB;IAClB,MAAM;CACP,CAAC,CAAC;AA6BH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7C,CAAC;KACD,MAAM,EAAE,CAAC"}
|
|
@@ -116,18 +116,21 @@ export interface BrokeredRepairDispatch {
|
|
|
116
116
|
*/
|
|
117
117
|
export declare function estimateSlotTokens(slot: BrokeredDispatchSlot): number;
|
|
118
118
|
/**
|
|
119
|
-
* Classify whether a host is "capable" — i.e. it
|
|
119
|
+
* Classify whether a host is "capable" — i.e. it DECLARES real concurrency
|
|
120
120
|
* head-room ABOVE the conservative cold-start (first-contact) floor. On first
|
|
121
|
-
* contact, with no
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
121
|
+
* contact, with no reported host ceiling, a host sits AT the floor and is NOT yet
|
|
122
|
+
* capable; once it reports an active-subagent ceiling above the floor, it is.
|
|
123
|
+
* Single-sourced here so both halves classify identically off the SAME floor.
|
|
124
|
+
*
|
|
125
|
+
* Capability is DECLARED, never inferred: there is no observational evidence that
|
|
126
|
+
* can lift a host off the floor. (The former "any recorded safe concurrency
|
|
127
|
+
* bucket lifts the host" branch was a learned-concurrency inference — see
|
|
128
|
+
* `spec/audit/dispatch-admission-control.md`.)
|
|
125
129
|
*/
|
|
126
130
|
export declare function classifyCapableHost(input: {
|
|
127
131
|
providerName: ResolvedProviderName;
|
|
128
132
|
sessionConfig: SessionConfig;
|
|
129
133
|
hostConcurrencyLimit?: HostConcurrencyLimit | null;
|
|
130
|
-
quotaStateEntry?: QuotaStateEntry | null;
|
|
131
134
|
}): boolean;
|
|
132
135
|
/**
|
|
133
136
|
* Create the concrete broker. The single gated chokepoint: it sizes the wave
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brokeredDispatch.d.ts","sourceRoot":"","sources":["../../../src/shared/repair/brokeredDispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAEf,cAAc,EACd,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAOvE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,2EAA2E;AAC3E,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,qBAAqB,GAAG,UAAU,CAAC;AAE9E;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,eAAe,CAAC;IAC3B,+EAA+E;IAC/E,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iEAAiE;IACjE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,uEAAuE;IACvE,UAAU,EAAE,cAAc,CAAC;IAC3B,4EAA4E;IAC5E,WAAW,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,oBAAoB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2CAA2C;IAC3C,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,+EAA+E;IAC/E,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,uDAAuD;IACvD,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnD,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChD,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;CACrD;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,wBAAwB,CAAC;IAC7D;;;OAGG;IACH,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;CACzE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAErE;AAED
|
|
1
|
+
{"version":3,"file":"brokeredDispatch.d.ts","sourceRoot":"","sources":["../../../src/shared/repair/brokeredDispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EAEf,cAAc,EACd,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAOvE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,2EAA2E;AAC3E,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,qBAAqB,GAAG,UAAU,CAAC;AAE9E;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,eAAe,CAAC;IAC3B,+EAA+E;IAC/E,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iEAAiE;IACjE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,uEAAuE;IACvE,UAAU,EAAE,cAAc,CAAC;IAC3B,4EAA4E;IAC5E,WAAW,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,oBAAoB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2CAA2C;IAC3C,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,+EAA+E;IAC/E,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,uDAAuD;IACvD,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnD,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChD,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;CACrD;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,wBAAwB,CAAC;IAC7D;;;OAGG;IACH,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;CACzE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAErE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,YAAY,EAAE,oBAAoB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD,GAAG,OAAO,CASV;AAwFD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,IAAI,sBAAsB,CA+FrE"}
|