llm-relay 0.41.0 → 0.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/availability-snapshot.d.ts +8 -0
- package/dist/availability-snapshot.js +20 -8
- package/dist/availability-snapshot.js.map +1 -1
- package/dist/availability.d.ts +67 -5
- package/dist/availability.js +76 -1
- package/dist/availability.js.map +1 -1
- package/dist/backend.d.ts +22 -0
- package/dist/backend.js +77 -3
- package/dist/backend.js.map +1 -1
- package/dist/candidates.js +13 -3
- package/dist/candidates.js.map +1 -1
- package/dist/config.d.ts +87 -0
- package/dist/config.js +93 -0
- package/dist/config.js.map +1 -1
- package/dist/dashboard/.vite/manifest.json +1 -1
- package/dist/dashboard/assets/{index-B2fuSM77.js → index-u-Ez_oE6.js} +11 -11
- package/dist/dashboard/index.html +1 -1
- package/dist/dashboard-contract.d.ts +14 -0
- package/dist/dashboard-contract.js +5 -1
- package/dist/dashboard-contract.js.map +1 -1
- package/dist/log.d.ts +18 -0
- package/dist/log.js +2 -0
- package/dist/log.js.map +1 -1
- package/dist/openai-request.d.ts +65 -0
- package/dist/openai-request.js +200 -12
- package/dist/openai-request.js.map +1 -1
- package/dist/refusal-interpretation.d.ts +1 -1
- package/dist/refusal-interpretation.js +1 -1
- package/dist/server.js +29 -9
- package/dist/server.js.map +1 -1
- package/dist/target-facts.d.ts +32 -0
- package/dist/target-facts.js +44 -3
- package/dist/target-facts.js.map +1 -1
- package/package.json +1 -1
|
@@ -18,6 +18,7 @@ import { type CooldownRowV1, type QuotaRowV1 } from "./dashboard-contract.js";
|
|
|
18
18
|
import type { CircuitBreaker } from "./circuit-breaker.js";
|
|
19
19
|
import type { AccountingStore } from "./accounting-store.js";
|
|
20
20
|
import { type Config } from "./config.js";
|
|
21
|
+
import { factsFor } from "./target-facts.js";
|
|
21
22
|
/**
|
|
22
23
|
* Dependencies, all optional except the config: quotas come from whatever evidence exists (the
|
|
23
24
|
* bare in-memory proxy has a breaker but no store, so localUsed stays null there), and cooldowns
|
|
@@ -30,6 +31,13 @@ export interface AvailabilityProducerOptions {
|
|
|
30
31
|
readonly accounting?: Pick<AccountingStore, "usedInWindow"> | null;
|
|
31
32
|
/** Injected for deterministic tests; defaults to Date.now(). */
|
|
32
33
|
readonly now?: () => number;
|
|
34
|
+
/**
|
|
35
|
+
* The facts read seam; defaults to `factsFor`. Covers BOTH halves of the snapshot (quota resets
|
|
36
|
+
* and the cooldown panel) — a seam only one consumer honours implies coverage it does not have.
|
|
37
|
+
* Injected by tests to exercise the never-throws guarantee against a throwing reader; the
|
|
38
|
+
* production default never throws.
|
|
39
|
+
*/
|
|
40
|
+
readonly readFacts?: typeof factsFor;
|
|
33
41
|
}
|
|
34
42
|
/** Shape-compatible with `DashboardAvailabilityPort`; typed locally so server.ts stays decoupled. */
|
|
35
43
|
export interface AvailabilitySnapshot {
|
|
@@ -2,7 +2,7 @@ import { parseCredentialId } from "./credential-id.js";
|
|
|
2
2
|
import { CONFIGURED_LIMIT_AXES, configuredLimitQuotaShape, resolveConfiguredLimits } from "./configured-limits.js";
|
|
3
3
|
import { providerCredentialSlots } from "./credential-fleet.js";
|
|
4
4
|
import { observedRateLimits } from "./rate-limits.js";
|
|
5
|
-
import { mapLimitBasis, mapRemainingBasis, resolveRemaining, resolveResetsAt, } from "./availability.js";
|
|
5
|
+
import { factResetInputs, mapLimitBasis, mapRemainingBasis, mapResetsAtBasis, resolveRemaining, resolveResetsAt, } from "./availability.js";
|
|
6
6
|
import { evaluateHardCap } from "./hard-cap.js";
|
|
7
7
|
import { POOL_PREFIX, splitSpec } from "./config.js";
|
|
8
8
|
import { factsFor } from "./target-facts.js";
|
|
@@ -12,7 +12,7 @@ import { factsFor } from "./target-facts.js";
|
|
|
12
12
|
* leaves figures null are still emitted — a known-limit/unknown-used row is exactly the
|
|
13
13
|
* "limit known, usage unmeasured" state §5.3 wants rendered as `-`, not hidden.
|
|
14
14
|
*/
|
|
15
|
-
function buildQuotas(cfg, breaker, accounting, now) {
|
|
15
|
+
function buildQuotas(cfg, breaker, accounting, now, readFacts) {
|
|
16
16
|
const rows = [];
|
|
17
17
|
if (breaker === undefined)
|
|
18
18
|
return rows;
|
|
@@ -24,6 +24,10 @@ function buildQuotas(cfg, breaker, accounting, now) {
|
|
|
24
24
|
const provider = parsed.provider;
|
|
25
25
|
const model = state.target.model;
|
|
26
26
|
const credentialId = state.target.credentialId;
|
|
27
|
+
// ONE fact read per cell, not per bucket: `factsFor` walks and sorts the whole table, and
|
|
28
|
+
// every bucket of this cell asks it the same question. The ordering it returns
|
|
29
|
+
// (most-specific scope first) is load-bearing input to `factResetInputs`.
|
|
30
|
+
const cellFacts = readFacts(provider, credentialId, model, { now });
|
|
27
31
|
const buckets = new Map();
|
|
28
32
|
const bucketFor = (axis, period) => {
|
|
29
33
|
const key = `${axis}:${period}`;
|
|
@@ -78,9 +82,15 @@ function buildQuotas(cfg, breaker, accounting, now) {
|
|
|
78
82
|
localUsed,
|
|
79
83
|
now,
|
|
80
84
|
});
|
|
85
|
+
// The §5.2 rung inputs, resolved by the SAME helper `llm-relay candidates` calls, so the
|
|
86
|
+
// two surfaces cannot report different provenance for one cell.
|
|
81
87
|
const resets = resolveResetsAt({
|
|
82
|
-
|
|
83
|
-
|
|
88
|
+
...factResetInputs({
|
|
89
|
+
facts: cellFacts,
|
|
90
|
+
observationReset: resolution.eligibleObservation?.resetsAt ?? null,
|
|
91
|
+
remaining: resolution.remaining,
|
|
92
|
+
now,
|
|
93
|
+
}),
|
|
84
94
|
period: periodPart,
|
|
85
95
|
now,
|
|
86
96
|
});
|
|
@@ -101,6 +111,7 @@ function buildQuotas(cfg, breaker, accounting, now) {
|
|
|
101
111
|
limitBasis: mapLimitBasis(resolution.limitBasis),
|
|
102
112
|
remainingBasis: mapRemainingBasis(resolution.basis),
|
|
103
113
|
localUsedBasis: resolution.localUsedBasis,
|
|
114
|
+
resetsAtBasis: mapResetsAtBasis(resets.basis),
|
|
104
115
|
});
|
|
105
116
|
}
|
|
106
117
|
}
|
|
@@ -150,7 +161,7 @@ function routableModels(cfg) {
|
|
|
150
161
|
* (auth_error), the COOLING half of target-facts, and REACHED operator-set hard caps
|
|
151
162
|
* (`manual` — G2). Fact mapping is documented at use site.
|
|
152
163
|
*/
|
|
153
|
-
function buildCooldowns(cfg, breaker, accounting, now) {
|
|
164
|
+
function buildCooldowns(cfg, breaker, accounting, now, readFacts) {
|
|
154
165
|
const rows = new Map();
|
|
155
166
|
const push = (source, reason, until, observedAt) => {
|
|
156
167
|
const key = `${source.provider} ${source.credentialId} ${source.model ?? ""} ${reason}`;
|
|
@@ -206,7 +217,7 @@ function buildCooldowns(cfg, breaker, accounting, now) {
|
|
|
206
217
|
if (seen.has(key))
|
|
207
218
|
return;
|
|
208
219
|
seen.add(key);
|
|
209
|
-
for (const fact of
|
|
220
|
+
for (const fact of readFacts(cell.provider, cell.credentialId, cell.model, { now })) {
|
|
210
221
|
let reason = null;
|
|
211
222
|
if (fact.kind === "allowance-exhausted" || fact.kind === "rate-limited")
|
|
212
223
|
reason = "rate_limit";
|
|
@@ -271,13 +282,14 @@ function buildCooldowns(cfg, breaker, accounting, now) {
|
|
|
271
282
|
export function createAvailabilityProducer(options) {
|
|
272
283
|
const { breaker, config, accounting } = options;
|
|
273
284
|
const clock = options.now ?? (() => Date.now());
|
|
285
|
+
const readFacts = options.readFacts ?? factsFor;
|
|
274
286
|
return {
|
|
275
287
|
snapshot() {
|
|
276
288
|
try {
|
|
277
289
|
const now = clock();
|
|
278
290
|
return {
|
|
279
|
-
quotas: buildQuotas(config, breaker, accounting ?? null, now),
|
|
280
|
-
cooldowns: buildCooldowns(config, breaker, accounting ?? null, now),
|
|
291
|
+
quotas: buildQuotas(config, breaker, accounting ?? null, now, readFacts),
|
|
292
|
+
cooldowns: buildCooldowns(config, breaker, accounting ?? null, now, readFacts),
|
|
281
293
|
};
|
|
282
294
|
}
|
|
283
295
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"availability-snapshot.js","sourceRoot":"","sources":["../src/availability-snapshot.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"availability-snapshot.js","sourceRoot":"","sources":["../src/availability-snapshot.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACnH,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,GAGhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAe,MAAM,aAAa,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAiC7C;;;;;GAKG;AACH,SAAS,WAAW,CAClB,GAAW,EACX,OAAmC,EACnC,UAAqD,EACrD,GAAW,EACX,SAA0B;IAE1B,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5D,oFAAoF;QACpF,IAAI,MAAM,KAAK,IAAI;YAAE,SAAS;QAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QACjC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;QAE/C,0FAA0F;QAC1F,+EAA+E;QAC/E,0EAA0E;QAC1E,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,EAAE,YAA4B,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAEpF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,MAAM,SAAS,GAAG,CAAC,IAAe,EAAE,MAAuC,EAAU,EAAE;YACrF,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;YAChC,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAClD,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS;gBAAE,SAAS;YAC/C,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjF,CAAC;QAED,yFAAyF;QACzF,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,QAAQ,EAAE,YAA4B,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gBAC/F,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;YACnE,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,MAAM,UAAU,GAAG,uBAAuB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/E,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAS;gBAClC,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;gBAC9C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;YAChE,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACpC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAiD,CAAC;YAC9F,yFAAyF;YACzF,8EAA8E;YAC9E,MAAM,aAAa,GACjB,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI;gBAC7C,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/G,MAAM,SAAS,GAAqB,aAAa,KAAK,IAAI;gBACxD,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;gBAC9B,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;YACjH,MAAM,UAAU,GAAG,gBAAgB,CAAC;gBAClC,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,UAAU;gBAClB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS;oBACxC,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS;oBACnC,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS;oBACrC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC3B,CAAC,CAAC,EAAE,CAAC;gBACP,SAAS;gBACT,GAAG;aACJ,CAAC,CAAC;YACH,yFAAyF;YACzF,gEAAgE;YAChE,MAAM,MAAM,GAAG,eAAe,CAAC;gBAC7B,GAAG,eAAe,CAAC;oBACjB,KAAK,EAAE,SAAS;oBAChB,gBAAgB,EAAE,UAAU,CAAC,mBAAmB,EAAE,QAAQ,IAAI,IAAI;oBAClE,SAAS,EAAE,UAAU,CAAC,SAAS;oBAC/B,GAAG;iBACJ,CAAC;gBACF,MAAM,EAAE,UAAU;gBAClB,GAAG;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC;gBACR,YAAY;gBACZ,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,QAAQ;gBACR,UAAU,EAAE,KAAK;gBACjB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;gBACnF,UAAU,EACR,UAAU,CAAC,mBAAmB,KAAK,IAAI;oBACrC,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;gBACvE,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC;gBAChD,cAAc,EAAE,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC;gBACnD,cAAc,EAAE,UAAU,CAAC,cAAc;gBACzC,aAAa,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kGAAkG;AAClG,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,MAAM,OAAO,GAAG,CAAC,IAAY,EAAQ,EAAE;QACrC,yEAAyE;QACzE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,CAAC;YACrD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;YAC/D,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACX,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;gBACnB,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAAE,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACpG,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,mFAAmF;IACnF,yCAAyC;IACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;IACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,KAAK,MAAM,IAAI,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CACrB,GAAW,EACX,OAAmC,EACnC,UAAqD,EACrD,GAAW,EACX,SAA0B;IAE1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC9C,MAAM,IAAI,GAAG,CACX,MAAwE,EACxE,MAAsB,EACtB,KAAa,EACb,UAAyB,EACnB,EAAE;QACR,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;QACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,2FAA2F;QAC3F,yEAAyE;QACzE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK;YAAE,OAAO;QACrG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;YACZ,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,KAAK;YACxB,MAAM;YACN,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;YACpC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;SAC5E,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;YACpD,IAAI,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,IAAI;gBAAE,SAAS;YACpE,MAAM,MAAM,GAAG;gBACb,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY;gBACvC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;gBAC/B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;aAC1B,CAAC;YACF,MAAM,iBAAiB,GAAG,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;YACnF,IAAI,KAAK,CAAC,aAAa,GAAG,GAAG,EAAE,CAAC;gBAC9B,uFAAuF;gBACvF,sFAAsF;gBACtF,iEAAiE;gBACjE,MAAM,WAAW,GACf,KAAK,CAAC,cAAc,KAAK,aAAa;oBACtC,KAAK,CAAC,cAAc,KAAK,YAAY;oBACrC,KAAK,CAAC,cAAc,KAAK,OAAO;oBAChC,KAAK,CAAC,UAAU,KAAK,GAAG;oBACxB,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC;gBAC3B,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,EAAE,KAAK,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;YACtG,CAAC;YACD,IAAI,KAAK,CAAC,oBAAoB,GAAG,GAAG,EAAE,CAAC;gBACrC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;IAED,sFAAsF;IACtF,4FAA4F;IAC5F,yEAAyE;IACzE,8DAA8D;IAC9D,6FAA6F;IAC7F,2FAA2F;IAC3F,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,IAAqF,EAAQ,EAAE;QAC9G,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACxE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAA4B,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACpG,IAAI,MAAM,GAA0B,IAAI,CAAC;YACzC,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc;gBAAE,MAAM,GAAG,YAAY,CAAC;iBAC1F,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB;gBAAE,MAAM,GAAG,YAAY,CAAC;YACnE,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG;gBAAE,SAAS;YACnD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE;YAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACpD,0FAA0F;YAC1F,mFAAmF;YACnF,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3C,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,4FAA4F;YAC5F,6FAA6F;YAC7F,6FAA6F;YAC7F,4FAA4F;YAC5F,sBAAsB;YACtB,EAAE;YACF,2FAA2F;YAC3F,gFAAgF;YAChF,2FAA2F;YAC3F,2FAA2F;YAC3F,oDAAoD;YACpD,MAAM,OAAO,GAAG,eAAe,CAAC;gBAC9B,GAAG;gBACH,QAAQ,EAAE,IAAI;gBACd,eAAe,EAAE,IAAI,CAAC,KAAK;gBAC3B,KAAK,EAAE,IAAI;gBACX,YAAY,EACV,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI;oBAC7C,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBACtC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;wBACf,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;4BACrC,YAAY,EAAE,IAAI,CAAC,YAAY;4BAC/B,MAAM;4BACN,GAAG;yBACJ,CAAC,CAAC;wBACH,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC/F,CAAC;gBACP,GAAG;aACJ,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,IAAI;gBAAE,IAAI,CACxB,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAChE,QAAQ,EACR,OAAO,CAAC,QAAQ,EAChB,IAAI,CACL,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAoC;IAC7E,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC;IAChD,OAAO;QACL,QAAQ;YACN,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;gBACpB,OAAO;oBACL,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC;oBACxE,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC;iBAC/E,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,sFAAsF;gBACtF,0CAA0C;gBAC1C,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/availability.d.ts
CHANGED
|
@@ -13,9 +13,11 @@
|
|
|
13
13
|
* arithmetic step — rung 2's limit − localUsed — is labelled with WHERE its inputs came from
|
|
14
14
|
* ("derived:<limit-provenance>"), so a reader can always tell a stated figure from a computed one.
|
|
15
15
|
*
|
|
16
|
-
* Pure: no IO, no clock of its own (`now` is an argument), no imports from server.ts.
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* Pure: no IO, no clock of its own (`now` is an argument), no imports from server.ts. It reads no
|
|
17
|
+
* store either — `factResetInputs` is handed facts a caller already read, and the only non-type
|
|
18
|
+
* import outside this file's own vocabulary is `target-facts.ts`'s closed kind set, so the set
|
|
19
|
+
* cannot be restated (and drift) in two consumers. Gap 12 calls `resolveRemaining` from the
|
|
20
|
+
* routing path under `routingEligible`; nothing here reorders or refuses anything today.
|
|
19
21
|
*/
|
|
20
22
|
import type { QuotaAxis, QuotaObservation, QuotaPeriod } from "./quota-observation.js";
|
|
21
23
|
/** Where a rung-2 limit may come from, in precedence order (see resolveRemaining). */
|
|
@@ -98,7 +100,7 @@ export type ResetsAtResolution = {
|
|
|
98
100
|
* a stated reset must still be in the future, else it is declined and the next rung answers.
|
|
99
101
|
*
|
|
100
102
|
* `providerStated` / `reviewedRule` arrive pre-resolved: the request path already applies
|
|
101
|
-
* ResetRules beside header parses (`server.ts`
|
|
103
|
+
* ResetRules beside header parses (`server.ts` resolveReset), and re-parsing vendor prose here
|
|
102
104
|
* would risk two readers disagreeing about one response. This module only decides WHICH rung wins
|
|
103
105
|
* and computes the fallback boundary.
|
|
104
106
|
*/
|
|
@@ -108,7 +110,66 @@ export declare function resolveResetsAt(input: {
|
|
|
108
110
|
period: QuotaPeriod;
|
|
109
111
|
now: number;
|
|
110
112
|
}): ResetsAtResolution;
|
|
111
|
-
import
|
|
113
|
+
import { type FactKind, type FactResetBasis } from "./target-facts.js";
|
|
114
|
+
/**
|
|
115
|
+
* One covering fact, in exactly the shape `factsFor()` returns (wider objects satisfy it).
|
|
116
|
+
* Type-only coupling to the store plus its closed kind set — this module still reads nothing.
|
|
117
|
+
*/
|
|
118
|
+
export interface FactResetCandidate {
|
|
119
|
+
readonly kind: FactKind;
|
|
120
|
+
readonly until: number;
|
|
121
|
+
readonly untilBasis?: FactResetBasis;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Turn the facts covering ONE credential×deployment cell into this bucket's rung-1/rung-2 inputs.
|
|
125
|
+
*
|
|
126
|
+
* The ONE place that policy lives, because both the dashboard producer (`availability-snapshot.ts`)
|
|
127
|
+
* and `llm-relay candidates` (`candidates.ts`) resolve the same cell: two implementations is how
|
|
128
|
+
* the two surfaces come to disagree about one row (the shape CLAUDE.md's "two paths, one policy
|
|
129
|
+
* empty" gotcha names). Neither caller re-parses vendor prose — a fact already carries the reset
|
|
130
|
+
* the request path resolved AND the rung it came from (`untilBasis`, minted by `server.ts`
|
|
131
|
+
* `resolveReset`).
|
|
132
|
+
*
|
|
133
|
+
* A fact may answer a bucket only when EVERY one of these holds; each clause is a provenance
|
|
134
|
+
* guard, not a nicety:
|
|
135
|
+
* - the fact's kind is one the QUOTA vocabulary can speak about (`QUOTA_RESET_FACT_KINDS`): an
|
|
136
|
+
* evicting condition ("this deployment is removed from selection") is not a statement about when
|
|
137
|
+
* an allowance refills, and rendering it as one is a category error dressed as a measurement;
|
|
138
|
+
* - the fact carries an explicit `untilBasis`: a legacy row or a kind's default TTL is the relay's
|
|
139
|
+
* own fallback, never something anybody stated;
|
|
140
|
+
* - its `until` is still in the future (rung 2 has no eligibility test of its own, so it gets one
|
|
141
|
+
* here rather than rendering a reset that has already passed);
|
|
142
|
+
* - the bucket is MEASURED-SPENT (`remaining !== null && remaining <= 0`). Unknown remaining has no
|
|
143
|
+
* effect whatsoever — the same rule quota demotion follows — and a bucket with headroom must
|
|
144
|
+
* never be handed a credential-wide reset: that would invent availability for a bucket nobody
|
|
145
|
+
* made a claim about, which is precisely the provenance invariant;
|
|
146
|
+
* - the ladder would otherwise fall through to the derived boundary (`observationReset === null`).
|
|
147
|
+
* A reset this response stated about this bucket always outranks a stored one.
|
|
148
|
+
*
|
|
149
|
+
* Within those gates the MOST-SPECIFIC scope wins per basis class, not the soonest expiry: callers
|
|
150
|
+
* pass `facts` in `factsFor()` order (attempt → group → deployment → credential → provider →
|
|
151
|
+
* model), and the first hit of each class is taken. Racing the two classes on recency would let an
|
|
152
|
+
* unrelated short fact pre-empt rung 2 entirely, so both inputs are returned independently and
|
|
153
|
+
* `resolveResetsAt` picks the rung.
|
|
154
|
+
*
|
|
155
|
+
* ⚠ Residual, stated rather than papered over: a fact carries no axis/period attribution, so a
|
|
156
|
+
* fact admitted here answers whichever spent bucket of the cell asked. The conjunction above IS
|
|
157
|
+
* the containment (same cell, measured-spent, and the provider said nothing about this bucket
|
|
158
|
+
* itself); an axis/period mapping inferred from the fact's kind would be exactly the invention
|
|
159
|
+
* `target-facts.ts` refuses ("scope comes from evidence, never from counting").
|
|
160
|
+
*/
|
|
161
|
+
export declare function factResetInputs(input: {
|
|
162
|
+
/** Covering facts in `factsFor()` order — most-specific scope first. */
|
|
163
|
+
facts: readonly FactResetCandidate[];
|
|
164
|
+
/** Rung 1's own input: the reset the eligible observation stated, if any. */
|
|
165
|
+
observationReset: number | null;
|
|
166
|
+
remaining: number | null;
|
|
167
|
+
now: number;
|
|
168
|
+
}): {
|
|
169
|
+
providerStated: number | null;
|
|
170
|
+
reviewedRule: number | null;
|
|
171
|
+
};
|
|
172
|
+
import type { LimitBasis, LocalUsedBasis, RemainingBasis, ResetsAtBasis } from "./dashboard-contract.js";
|
|
112
173
|
/**
|
|
113
174
|
* Map internal bases onto the dashboard wire vocabulary in ONE place, so the producer and the
|
|
114
175
|
* contract cannot drift. `derived:published` maps onto `derived_configured`'s sibling spelling
|
|
@@ -116,4 +177,5 @@ import type { LimitBasis, LocalUsedBasis, RemainingBasis } from "./dashboard-con
|
|
|
116
177
|
*/
|
|
117
178
|
export declare function mapRemainingBasis(basis: RemainingResolution["basis"]): RemainingBasis | null;
|
|
118
179
|
export declare function mapLimitBasis(basis: RemainingResolution["limitBasis"]): LimitBasis | null;
|
|
180
|
+
export declare function mapResetsAtBasis(basis: ResetsAtResolution["basis"]): ResetsAtBasis | null;
|
|
119
181
|
export type { LimitBasis, LocalUsedBasis, RemainingBasis };
|
package/dist/availability.js
CHANGED
|
@@ -166,7 +166,7 @@ export function resolveRemaining(input) {
|
|
|
166
166
|
* a stated reset must still be in the future, else it is declined and the next rung answers.
|
|
167
167
|
*
|
|
168
168
|
* `providerStated` / `reviewedRule` arrive pre-resolved: the request path already applies
|
|
169
|
-
* ResetRules beside header parses (`server.ts`
|
|
169
|
+
* ResetRules beside header parses (`server.ts` resolveReset), and re-parsing vendor prose here
|
|
170
170
|
* would risk two readers disagreeing about one response. This module only decides WHICH rung wins
|
|
171
171
|
* and computes the fallback boundary.
|
|
172
172
|
*/
|
|
@@ -187,6 +187,69 @@ export function resolveResetsAt(input) {
|
|
|
187
187
|
return { resetsAt: end, basis: "derived-boundary" };
|
|
188
188
|
return { resetsAt: null, basis: null };
|
|
189
189
|
}
|
|
190
|
+
// ── §5.2 rung inputs from persisted target-facts ────────────────────────────────────────────────
|
|
191
|
+
import { QUOTA_RESET_FACT_KINDS } from "./target-facts.js";
|
|
192
|
+
/**
|
|
193
|
+
* Turn the facts covering ONE credential×deployment cell into this bucket's rung-1/rung-2 inputs.
|
|
194
|
+
*
|
|
195
|
+
* The ONE place that policy lives, because both the dashboard producer (`availability-snapshot.ts`)
|
|
196
|
+
* and `llm-relay candidates` (`candidates.ts`) resolve the same cell: two implementations is how
|
|
197
|
+
* the two surfaces come to disagree about one row (the shape CLAUDE.md's "two paths, one policy
|
|
198
|
+
* empty" gotcha names). Neither caller re-parses vendor prose — a fact already carries the reset
|
|
199
|
+
* the request path resolved AND the rung it came from (`untilBasis`, minted by `server.ts`
|
|
200
|
+
* `resolveReset`).
|
|
201
|
+
*
|
|
202
|
+
* A fact may answer a bucket only when EVERY one of these holds; each clause is a provenance
|
|
203
|
+
* guard, not a nicety:
|
|
204
|
+
* - the fact's kind is one the QUOTA vocabulary can speak about (`QUOTA_RESET_FACT_KINDS`): an
|
|
205
|
+
* evicting condition ("this deployment is removed from selection") is not a statement about when
|
|
206
|
+
* an allowance refills, and rendering it as one is a category error dressed as a measurement;
|
|
207
|
+
* - the fact carries an explicit `untilBasis`: a legacy row or a kind's default TTL is the relay's
|
|
208
|
+
* own fallback, never something anybody stated;
|
|
209
|
+
* - its `until` is still in the future (rung 2 has no eligibility test of its own, so it gets one
|
|
210
|
+
* here rather than rendering a reset that has already passed);
|
|
211
|
+
* - the bucket is MEASURED-SPENT (`remaining !== null && remaining <= 0`). Unknown remaining has no
|
|
212
|
+
* effect whatsoever — the same rule quota demotion follows — and a bucket with headroom must
|
|
213
|
+
* never be handed a credential-wide reset: that would invent availability for a bucket nobody
|
|
214
|
+
* made a claim about, which is precisely the provenance invariant;
|
|
215
|
+
* - the ladder would otherwise fall through to the derived boundary (`observationReset === null`).
|
|
216
|
+
* A reset this response stated about this bucket always outranks a stored one.
|
|
217
|
+
*
|
|
218
|
+
* Within those gates the MOST-SPECIFIC scope wins per basis class, not the soonest expiry: callers
|
|
219
|
+
* pass `facts` in `factsFor()` order (attempt → group → deployment → credential → provider →
|
|
220
|
+
* model), and the first hit of each class is taken. Racing the two classes on recency would let an
|
|
221
|
+
* unrelated short fact pre-empt rung 2 entirely, so both inputs are returned independently and
|
|
222
|
+
* `resolveResetsAt` picks the rung.
|
|
223
|
+
*
|
|
224
|
+
* ⚠ Residual, stated rather than papered over: a fact carries no axis/period attribution, so a
|
|
225
|
+
* fact admitted here answers whichever spent bucket of the cell asked. The conjunction above IS
|
|
226
|
+
* the containment (same cell, measured-spent, and the provider said nothing about this bucket
|
|
227
|
+
* itself); an axis/period mapping inferred from the fact's kind would be exactly the invention
|
|
228
|
+
* `target-facts.ts` refuses ("scope comes from evidence, never from counting").
|
|
229
|
+
*/
|
|
230
|
+
export function factResetInputs(input) {
|
|
231
|
+
const spent = input.remaining !== null && input.remaining <= 0;
|
|
232
|
+
if (!spent || input.observationReset !== null) {
|
|
233
|
+
return { providerStated: input.observationReset, reviewedRule: null };
|
|
234
|
+
}
|
|
235
|
+
let stated = null;
|
|
236
|
+
let reviewed = null;
|
|
237
|
+
for (const fact of input.facts) {
|
|
238
|
+
if (fact.untilBasis === undefined)
|
|
239
|
+
continue;
|
|
240
|
+
if (!QUOTA_RESET_FACT_KINDS.has(fact.kind))
|
|
241
|
+
continue;
|
|
242
|
+
if (!Number.isFinite(fact.until) || fact.until <= input.now)
|
|
243
|
+
continue;
|
|
244
|
+
// `retry-after` / `stated-body` came out of the provider's own response, so they belong on
|
|
245
|
+
// rung 1; the reviewed rungs are a reviewer's assertion and belong on rung 2.
|
|
246
|
+
if (fact.untilBasis === "reviewed-field" || fact.untilBasis === "reviewed-fixed")
|
|
247
|
+
reviewed ??= fact.until;
|
|
248
|
+
else
|
|
249
|
+
stated ??= fact.until;
|
|
250
|
+
}
|
|
251
|
+
return { providerStated: stated, reviewedRule: reviewed };
|
|
252
|
+
}
|
|
190
253
|
/**
|
|
191
254
|
* Map internal bases onto the dashboard wire vocabulary in ONE place, so the producer and the
|
|
192
255
|
* contract cannot drift. `derived:published` maps onto `derived_configured`'s sibling spelling
|
|
@@ -222,4 +285,16 @@ export function mapLimitBasis(basis) {
|
|
|
222
285
|
return null;
|
|
223
286
|
}
|
|
224
287
|
}
|
|
288
|
+
export function mapResetsAtBasis(basis) {
|
|
289
|
+
switch (basis) {
|
|
290
|
+
case "provider-stated":
|
|
291
|
+
return "provider_stated";
|
|
292
|
+
case "reviewed-rule":
|
|
293
|
+
return "reviewed_rule";
|
|
294
|
+
case "derived-boundary":
|
|
295
|
+
return "derived_boundary";
|
|
296
|
+
default:
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
225
300
|
//# sourceMappingURL=availability.js.map
|
package/dist/availability.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"availability.js","sourceRoot":"","sources":["../src/availability.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"availability.js","sourceRoot":"","sources":["../src/availability.ts"],"names":[],"mappings":"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"}
|
package/dist/backend.d.ts
CHANGED
|
@@ -131,6 +131,17 @@ export declare const TOOL_DIALECT_HEADER = "x-llm-relay-tool-dialect";
|
|
|
131
131
|
* the stream drains. See `src/tool-use-ids.ts`.
|
|
132
132
|
*/
|
|
133
133
|
export declare const TOOL_USE_IDS_HEADER = "x-llm-relay-tool-use-ids";
|
|
134
|
+
/**
|
|
135
|
+
* OUTBOUND tool-call ids were rewritten to this provider's stated id shape — value
|
|
136
|
+
* `"<n> rewritten"`. Today that is only mistral's `^[a-zA-Z0-9]{9}$` (`compat.toolCallIds:
|
|
137
|
+
* "strict9"`; see `src/openai-request.ts` for the 400 that states the rule).
|
|
138
|
+
*
|
|
139
|
+
* The request-direction sibling of `TOOL_USE_IDS_HEADER`, and the same maxim: an automatic fix is
|
|
140
|
+
* acceptable only because it is announced, a count and never an id. Unlike the response-direction
|
|
141
|
+
* mint the figure is final BEFORE the request is even sent, so it rides a streamed response's
|
|
142
|
+
* headers too.
|
|
143
|
+
*/
|
|
144
|
+
export declare const TOOL_CALL_IDS_HEADER = "x-llm-relay-tool-call-ids";
|
|
134
145
|
/**
|
|
135
146
|
* The provider's `Retry-After` in milliseconds, or null.
|
|
136
147
|
*
|
|
@@ -163,6 +174,17 @@ export declare function upstreamReportedModel(response: Response): string | unde
|
|
|
163
174
|
* server reports end-of-stream facts, not before it writes headers.
|
|
164
175
|
*/
|
|
165
176
|
export declare function toolUseIdRewrites(response: Response): number | undefined;
|
|
177
|
+
/**
|
|
178
|
+
* How many OUTBOUND tool-call ids this request had rewritten to the provider's stated shape, or
|
|
179
|
+
* `undefined` when none were. Final at request-mapping time, so it is readable as soon as the
|
|
180
|
+
* Response exists.
|
|
181
|
+
*/
|
|
182
|
+
export declare function toolCallIdRewrites(response: Response): number | undefined;
|
|
183
|
+
/**
|
|
184
|
+
* How many replayed tool calls this request carried gemini's thought-signature sentinel on, or
|
|
185
|
+
* `undefined` when none did. Final at request-mapping time, like `toolCallIdRewrites`.
|
|
186
|
+
*/
|
|
187
|
+
export declare function thoughtSignatureSentinels(response: Response): number | undefined;
|
|
166
188
|
/**
|
|
167
189
|
* Fetch the resolved provider target and return an ANTHROPIC-shaped `Response`,
|
|
168
190
|
* regardless of the backend's native wire format. For kind="anthropic" this is a
|
package/dist/backend.js
CHANGED
|
@@ -155,6 +155,17 @@ export const TOOL_DIALECT_HEADER = "x-llm-relay-tool-dialect";
|
|
|
155
155
|
* the stream drains. See `src/tool-use-ids.ts`.
|
|
156
156
|
*/
|
|
157
157
|
export const TOOL_USE_IDS_HEADER = "x-llm-relay-tool-use-ids";
|
|
158
|
+
/**
|
|
159
|
+
* OUTBOUND tool-call ids were rewritten to this provider's stated id shape — value
|
|
160
|
+
* `"<n> rewritten"`. Today that is only mistral's `^[a-zA-Z0-9]{9}$` (`compat.toolCallIds:
|
|
161
|
+
* "strict9"`; see `src/openai-request.ts` for the 400 that states the rule).
|
|
162
|
+
*
|
|
163
|
+
* The request-direction sibling of `TOOL_USE_IDS_HEADER`, and the same maxim: an automatic fix is
|
|
164
|
+
* acceptable only because it is announced, a count and never an id. Unlike the response-direction
|
|
165
|
+
* mint the figure is final BEFORE the request is even sent, so it rides a streamed response's
|
|
166
|
+
* headers too.
|
|
167
|
+
*/
|
|
168
|
+
export const TOOL_CALL_IDS_HEADER = "x-llm-relay-tool-call-ids";
|
|
158
169
|
/**
|
|
159
170
|
* The provider's `Retry-After` in milliseconds, or null.
|
|
160
171
|
*
|
|
@@ -207,6 +218,23 @@ export function toolUseIdRewrites(response) {
|
|
|
207
218
|
const n = upstreamResponseMetadata.get(response)?.toolUseIdRewrites;
|
|
208
219
|
return n !== undefined && n > 0 ? n : undefined;
|
|
209
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* How many OUTBOUND tool-call ids this request had rewritten to the provider's stated shape, or
|
|
223
|
+
* `undefined` when none were. Final at request-mapping time, so it is readable as soon as the
|
|
224
|
+
* Response exists.
|
|
225
|
+
*/
|
|
226
|
+
export function toolCallIdRewrites(response) {
|
|
227
|
+
const n = upstreamResponseMetadata.get(response)?.toolCallIdRewrites;
|
|
228
|
+
return n !== undefined && n > 0 ? n : undefined;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* How many replayed tool calls this request carried gemini's thought-signature sentinel on, or
|
|
232
|
+
* `undefined` when none did. Final at request-mapping time, like `toolCallIdRewrites`.
|
|
233
|
+
*/
|
|
234
|
+
export function thoughtSignatureSentinels(response) {
|
|
235
|
+
const n = upstreamResponseMetadata.get(response)?.thoughtSignatureSentinels;
|
|
236
|
+
return n !== undefined && n > 0 ? n : undefined;
|
|
237
|
+
}
|
|
210
238
|
function attachUpstreamMetadata(response, metadata) {
|
|
211
239
|
upstreamResponseMetadata.set(response, metadata);
|
|
212
240
|
return response;
|
|
@@ -528,12 +556,26 @@ export async function fetchBackend(attempt, args, fetchFn = fetch) {
|
|
|
528
556
|
return anthropicError(502, `document conversion failed: ${e.message}`, "local");
|
|
529
557
|
}
|
|
530
558
|
let openaiBody;
|
|
559
|
+
// Outbound id rewrites, from the RESOLVED compat mode on the target — the mapper is handed a
|
|
560
|
+
// decision, never a provider name to re-derive one from. `preserve` (everyone but mistral)
|
|
561
|
+
// leaves this 0 and the outbound bytes untouched.
|
|
562
|
+
let toolCallIdsRewritten = 0;
|
|
563
|
+
// The sibling pass, resolved the same way: `none` (everyone but Google's Generative Language
|
|
564
|
+
// API) leaves this 0 and adds nothing to the body.
|
|
565
|
+
let sentinelsStamped = 0;
|
|
531
566
|
try {
|
|
532
567
|
// The REQUEST direction is relay-owned (`openai-request.ts`); only the RESPONSE direction is
|
|
533
568
|
// still llm-bridge's. llm-bridge's `universalToOpenAI` has no case for a tool_call/tool_result
|
|
534
569
|
// block, so it stringified its own IR envelope into the outbound prompt — see
|
|
535
570
|
// docs/tool-call-dialect-leak.md §"Second mechanism".
|
|
536
|
-
openaiBody = anthropicRequestToOpenAi(reqJson, {
|
|
571
|
+
openaiBody = anthropicRequestToOpenAi(reqJson, {
|
|
572
|
+
model: target.model,
|
|
573
|
+
stream: args.wantsStream,
|
|
574
|
+
...(target.toolCallIds !== undefined ? { toolCallIds: target.toolCallIds } : {}),
|
|
575
|
+
onToolCallIdsRewritten: (n) => { toolCallIdsRewritten = n; },
|
|
576
|
+
...(target.thoughtSignature !== undefined ? { thoughtSignature: target.thoughtSignature } : {}),
|
|
577
|
+
onThoughtSignatureSentinels: (n) => { sentinelsStamped = n; },
|
|
578
|
+
});
|
|
537
579
|
}
|
|
538
580
|
catch (e) {
|
|
539
581
|
// A block we will not put on the wire is the caller's request being unrepresentable, not a
|
|
@@ -621,8 +663,20 @@ export async function fetchBackend(attempt, args, fetchFn = fetch) {
|
|
|
621
663
|
// holdback is already paid by `stripThinkTagsInStream` above, and an event with no
|
|
622
664
|
// `tool_use` substring costs one scan, so the gate would buy little and lose that case.
|
|
623
665
|
const metadata = preflight.metadata;
|
|
666
|
+
if (toolCallIdsRewritten > 0)
|
|
667
|
+
metadata.toolCallIdRewrites = toolCallIdsRewritten;
|
|
668
|
+
if (sentinelsStamped > 0)
|
|
669
|
+
metadata.thoughtSignatureSentinels = sentinelsStamped;
|
|
624
670
|
const body = rewriteToolUseIdsInStream(recovered, () => knownToolUseIds(args.reqJson), (count) => { metadata.toolUseIdRewrites = count; });
|
|
625
|
-
return attachUpstreamMetadata(new Response(body, {
|
|
671
|
+
return attachUpstreamMetadata(new Response(body, {
|
|
672
|
+
status: res.status,
|
|
673
|
+
headers: {
|
|
674
|
+
"content-type": "text/event-stream",
|
|
675
|
+
// Unlike the response-direction mint, this count is a REQUEST fact and was final
|
|
676
|
+
// before a byte was sent — so a stream can announce it honestly.
|
|
677
|
+
...(toolCallIdsRewritten > 0 ? { [TOOL_CALL_IDS_HEADER]: `${toolCallIdsRewritten} rewritten` } : {}),
|
|
678
|
+
},
|
|
679
|
+
}), metadata);
|
|
626
680
|
}
|
|
627
681
|
catch (e) {
|
|
628
682
|
return anthropicError(502, `llm-relay: response translation failed: ${e.message}`, "local", {}, "relay_mapper_defect");
|
|
@@ -680,12 +734,20 @@ export async function fetchBackend(attempt, args, fetchFn = fetch) {
|
|
|
680
734
|
...(mintedIds.rewritten > 0
|
|
681
735
|
? { [TOOL_USE_IDS_HEADER]: `${mintedIds.rewritten} rewritten` }
|
|
682
736
|
: {}),
|
|
737
|
+
...(toolCallIdsRewritten > 0
|
|
738
|
+
? { [TOOL_CALL_IDS_HEADER]: `${toolCallIdsRewritten} rewritten` }
|
|
739
|
+
: {}),
|
|
683
740
|
},
|
|
684
741
|
});
|
|
685
742
|
const metadata = {};
|
|
686
743
|
captureReportedModel(metadata, upstreamJson, "openai-chat", false);
|
|
687
744
|
if (mintedIds.rewritten > 0)
|
|
688
745
|
metadata.toolUseIdRewrites = mintedIds.rewritten;
|
|
746
|
+
if (toolCallIdsRewritten > 0)
|
|
747
|
+
metadata.toolCallIdRewrites = toolCallIdsRewritten;
|
|
748
|
+
// No header for this one — see `UpstreamResponseMetadata.thoughtSignatureSentinels`.
|
|
749
|
+
if (sentinelsStamped > 0)
|
|
750
|
+
metadata.thoughtSignatureSentinels = sentinelsStamped;
|
|
689
751
|
return attachUpstreamMetadata(response, metadata);
|
|
690
752
|
}
|
|
691
753
|
/**
|
|
@@ -1317,7 +1379,16 @@ export async function fetchOpenAiFront(attempt, args, fetchFn = fetch) {
|
|
|
1317
1379
|
const targetProtocol = protocol === "responses" ? "openai-responses" : "openai";
|
|
1318
1380
|
try {
|
|
1319
1381
|
const output = handleUniversalStreamRequest(preflight.body, "anthropic", targetProtocol);
|
|
1320
|
-
|
|
1382
|
+
// Same rule as the buffered rebuild below: rebuilding the response must not swallow the
|
|
1383
|
+
// announcement of a fix the relay applied one Response ago.
|
|
1384
|
+
const rewritten = backendRes.headers.get(TOOL_CALL_IDS_HEADER);
|
|
1385
|
+
const response = new Response(output, {
|
|
1386
|
+
status: backendRes.status,
|
|
1387
|
+
headers: {
|
|
1388
|
+
"content-type": "text/event-stream",
|
|
1389
|
+
...(rewritten ? { [TOOL_CALL_IDS_HEADER]: rewritten } : {}),
|
|
1390
|
+
},
|
|
1391
|
+
});
|
|
1321
1392
|
return metadata ? attachUpstreamMetadata(response, metadata) : response;
|
|
1322
1393
|
}
|
|
1323
1394
|
catch (e) {
|
|
@@ -1347,11 +1418,14 @@ export async function fetchOpenAiFront(attempt, args, fetchFn = fetch) {
|
|
|
1347
1418
|
// announcement — an automatic fix is acceptable only because it is announced, and the count
|
|
1348
1419
|
// is as true here as it was one Response ago.
|
|
1349
1420
|
const minted = backendRes.headers.get(TOOL_USE_IDS_HEADER);
|
|
1421
|
+
// …and the outbound-id rewrite the same request mapper applied on the way IN.
|
|
1422
|
+
const rewritten = backendRes.headers.get(TOOL_CALL_IDS_HEADER);
|
|
1350
1423
|
const response = new Response(JSON.stringify(anthropicMessageToOpenAi(body, protocol, target.model ?? String(base.model ?? ""))), {
|
|
1351
1424
|
status: backendRes.status,
|
|
1352
1425
|
headers: {
|
|
1353
1426
|
"content-type": "application/json",
|
|
1354
1427
|
...(minted ? { [TOOL_USE_IDS_HEADER]: minted } : {}),
|
|
1428
|
+
...(rewritten ? { [TOOL_CALL_IDS_HEADER]: rewritten } : {}),
|
|
1355
1429
|
},
|
|
1356
1430
|
});
|
|
1357
1431
|
return metadata ? attachUpstreamMetadata(response, metadata) : response;
|