llm-relay 0.40.0 → 0.42.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.
Files changed (40) hide show
  1. package/dist/availability-snapshot.d.ts +8 -0
  2. package/dist/availability-snapshot.js +20 -8
  3. package/dist/availability-snapshot.js.map +1 -1
  4. package/dist/availability.d.ts +67 -5
  5. package/dist/availability.js +76 -1
  6. package/dist/availability.js.map +1 -1
  7. package/dist/backend.d.ts +21 -0
  8. package/dist/backend.js +91 -5
  9. package/dist/backend.js.map +1 -1
  10. package/dist/candidates.js +13 -3
  11. package/dist/candidates.js.map +1 -1
  12. package/dist/cli.js +6 -3
  13. package/dist/cli.js.map +1 -1
  14. package/dist/dashboard/.vite/manifest.json +1 -1
  15. package/dist/dashboard/assets/{index-B2fuSM77.js → index-u-Ez_oE6.js} +11 -11
  16. package/dist/dashboard/index.html +1 -1
  17. package/dist/dashboard-contract.d.ts +14 -0
  18. package/dist/dashboard-contract.js +5 -1
  19. package/dist/dashboard-contract.js.map +1 -1
  20. package/dist/dashboard-snapshot.js +72 -9
  21. package/dist/dashboard-snapshot.js.map +1 -1
  22. package/dist/log.d.ts +10 -0
  23. package/dist/log.js +1 -0
  24. package/dist/log.js.map +1 -1
  25. package/dist/openai-request.js +37 -6
  26. package/dist/openai-request.js.map +1 -1
  27. package/dist/refusal-interpretation.d.ts +1 -1
  28. package/dist/refusal-interpretation.js +1 -1
  29. package/dist/responses-request.d.ts +85 -0
  30. package/dist/responses-request.js +480 -0
  31. package/dist/responses-request.js.map +1 -0
  32. package/dist/server.js +41 -9
  33. package/dist/server.js.map +1 -1
  34. package/dist/target-facts.d.ts +32 -0
  35. package/dist/target-facts.js +44 -3
  36. package/dist/target-facts.js.map +1 -1
  37. package/dist/tool-use-ids.d.ts +91 -0
  38. package/dist/tool-use-ids.js +265 -0
  39. package/dist/tool-use-ids.js.map +1 -0
  40. 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
- providerStated: resolution.eligibleObservation?.resetsAt ?? null,
83
- reviewedRule: null,
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 factsFor(cell.provider, cell.credentialId, cell.model, { now })) {
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":"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,aAAa,EACb,iBAAiB,EACjB,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;AA0B7C;;;;;GAKG;AACH,SAAS,WAAW,CAClB,GAAW,EACX,OAAmC,EACnC,UAAqD,EACrD,GAAW;IAEX,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,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,MAAM,MAAM,GAAG,eAAe,CAAC;gBAC7B,cAAc,EAAE,UAAU,CAAC,mBAAmB,EAAE,QAAQ,IAAI,IAAI;gBAChE,YAAY,EAAE,IAAI;gBAClB,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;aAC1C,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;IAEX,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,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAA4B,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACnG,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,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,CAAC;oBAC7D,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,GAAG,CAAC;iBACpE,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"}
1
+ {"version":3,"file":"availability-snapshot.js","sourceRoot":"","sources":["../src/availability-snapshot.ts"],"names":[],"mappings":"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"}
@@ -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. The next
17
- * packet (Gap 12) calls `resolveRemaining` from the routing path under `routingEligible`; nothing
18
- * here reorders or refuses anything today.
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` resolveResetMs), and re-parsing vendor prose here
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 type { LimitBasis, LocalUsedBasis, RemainingBasis } from "./dashboard-contract.js";
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 };
@@ -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` resolveResetMs), and re-parsing vendor prose here
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
@@ -1 +1 @@
1
- {"version":3,"file":"availability.js","sourceRoot":"","sources":["../src/availability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"availability.js","sourceRoot":"","sources":["../src/availability.ts"],"names":[],"mappings":"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"}
package/dist/backend.d.ts CHANGED
@@ -117,6 +117,20 @@ export declare const HARD_CAP_HEADER = "x-llm-relay-capped";
117
117
  export declare const PAID_HEADER = "x-llm-relay-paid";
118
118
  /** This response contains a tool call reconstructed from a recognized text dialect envelope. */
119
119
  export declare const TOOL_DIALECT_HEADER = "x-llm-relay-tool-dialect";
120
+ /**
121
+ * `tool_use` ids in this response were MINTED by the relay because the host reused ones the
122
+ * conversation already carried — value `"<n> rewritten"`.
123
+ *
124
+ * Same maxim as `DEGRADED_HEADER`: an automatic fix is acceptable only because it is announced.
125
+ * A count, never an id: the ids themselves are in the body the caller already has, and a header
126
+ * is not the place to restate content.
127
+ *
128
+ * ⚠ Buffered responses only. On a stream the headers are written before the first
129
+ * `content_block_start` exists, so a count there could only be a guess; the streaming pass
130
+ * reports through `toolUseIdRewrites()` instead, which the server reads for its log record after
131
+ * the stream drains. See `src/tool-use-ids.ts`.
132
+ */
133
+ export declare const TOOL_USE_IDS_HEADER = "x-llm-relay-tool-use-ids";
120
134
  /**
121
135
  * The provider's `Retry-After` in milliseconds, or null.
122
136
  *
@@ -142,6 +156,13 @@ export interface PostHeaderBodyFailure {
142
156
  export declare function postHeaderBodyFailure(response: Response): PostHeaderBodyFailure | undefined;
143
157
  /** Raw model id stated by the upstream response, before any relay translation. */
144
158
  export declare function upstreamReportedModel(response: Response): string | undefined;
159
+ /**
160
+ * How many `tool_use` ids this response had minted, or `undefined` when none were.
161
+ *
162
+ * On a streamed response the figure is final only once the body has drained — read it where the
163
+ * server reports end-of-stream facts, not before it writes headers.
164
+ */
165
+ export declare function toolUseIdRewrites(response: Response): number | undefined;
145
166
  /**
146
167
  * Fetch the resolved provider target and return an ANTHROPIC-shaped `Response`,
147
168
  * regardless of the backend's native wire format. For kind="anthropic" this is a
package/dist/backend.js CHANGED
@@ -2,10 +2,12 @@ import { translateBetweenProviders, handleUniversalStreamRequest } from "llm-bri
2
2
  import { buildAuthHeaders } from "./authEnv.js";
3
3
  import { DocumentError, transcodeDocuments } from "./documents.js";
4
4
  import { anthropicRequestToOpenAi, RequestMappingError } from "./openai-request.js";
5
+ import { openaiResponsesRequestToAnthropic } from "./responses-request.js";
5
6
  import { recoverToolCalls } from "./tool-dialects.js";
6
7
  import { recoverDialectInStream } from "./dialect-stream.js";
7
8
  import { toolSchemaMap } from "./anthropic.js";
8
9
  import { stripOpeningThinkTag, stripThinkTagsInStream } from "./think-tags.js";
10
+ import { knownToolUseIds, rewriteToolUseIds, rewriteToolUseIdsInStream } from "./tool-use-ids.js";
9
11
  import { STREAM_PREFLIGHT_LIMIT } from "./stream-commit.js";
10
12
  import { inspectDialectInOpenAiChat, recoverDialectInOpenAiChatStream, } from "./openai-dialect.js";
11
13
  import { observeUsage } from "./usage-observer.js";
@@ -139,6 +141,20 @@ export const HARD_CAP_HEADER = "x-llm-relay-capped";
139
141
  export const PAID_HEADER = "x-llm-relay-paid";
140
142
  /** This response contains a tool call reconstructed from a recognized text dialect envelope. */
141
143
  export const TOOL_DIALECT_HEADER = "x-llm-relay-tool-dialect";
144
+ /**
145
+ * `tool_use` ids in this response were MINTED by the relay because the host reused ones the
146
+ * conversation already carried — value `"<n> rewritten"`.
147
+ *
148
+ * Same maxim as `DEGRADED_HEADER`: an automatic fix is acceptable only because it is announced.
149
+ * A count, never an id: the ids themselves are in the body the caller already has, and a header
150
+ * is not the place to restate content.
151
+ *
152
+ * ⚠ Buffered responses only. On a stream the headers are written before the first
153
+ * `content_block_start` exists, so a count there could only be a guess; the streaming pass
154
+ * reports through `toolUseIdRewrites()` instead, which the server reads for its log record after
155
+ * the stream drains. See `src/tool-use-ids.ts`.
156
+ */
157
+ export const TOOL_USE_IDS_HEADER = "x-llm-relay-tool-use-ids";
142
158
  /**
143
159
  * The provider's `Retry-After` in milliseconds, or null.
144
160
  *
@@ -181,6 +197,16 @@ export function postHeaderBodyFailure(response) {
181
197
  export function upstreamReportedModel(response) {
182
198
  return upstreamResponseMetadata.get(response)?.reportedModel;
183
199
  }
200
+ /**
201
+ * How many `tool_use` ids this response had minted, or `undefined` when none were.
202
+ *
203
+ * On a streamed response the figure is final only once the body has drained — read it where the
204
+ * server reports end-of-stream facts, not before it writes headers.
205
+ */
206
+ export function toolUseIdRewrites(response) {
207
+ const n = upstreamResponseMetadata.get(response)?.toolUseIdRewrites;
208
+ return n !== undefined && n > 0 ? n : undefined;
209
+ }
184
210
  function attachUpstreamMetadata(response, metadata) {
185
211
  upstreamResponseMetadata.set(response, metadata);
186
212
  return response;
@@ -583,8 +609,20 @@ export async function fetchBackend(attempt, args, fetchFn = fetch) {
583
609
  // declaring tools: with none declared there is no call to recover, and wrapping the stream
584
610
  // would add holdback latency for nothing.
585
611
  const schemas = toolSchemaMap(args.reqJson);
586
- const body = schemas.size > 0 ? recoverDialectInStream(strippedStream, schemas) : strippedStream;
587
- return attachUpstreamMetadata(new Response(body, { status: res.status, headers: { "content-type": "text/event-stream" } }), preflight.metadata);
612
+ const recovered = schemas.size > 0 ? recoverDialectInStream(strippedStream, schemas) : strippedStream;
613
+ // AFTER recovery, so a call the relay reconstructed is covered too, and BEFORE anything that
614
+ // watches for the first `tool_use` — validation and repair must see the ids the client will.
615
+ // The taken-set is a thunk: a response with no tool call never walks the conversation.
616
+ // ⚠ Deliberately NOT gated on `schemas.size > 0` like the line above, and the asymmetry is
617
+ // the point: recovery needs a schema to parse a call out of text, uniqueness needs only an
618
+ // id to exist. A host may emit `tool_calls` a request never declared — Claude Code's compact
619
+ // turn declares none while the conversation it summarizes is full of tool_use ids — and that
620
+ // is exactly the turn the normalizer would empty to `[Tool use interrupted]`. The framing
621
+ // holdback is already paid by `stripThinkTagsInStream` above, and an event with no
622
+ // `tool_use` substring costs one scan, so the gate would buy little and lose that case.
623
+ const metadata = preflight.metadata;
624
+ const body = rewriteToolUseIdsInStream(recovered, () => knownToolUseIds(args.reqJson), (count) => { metadata.toolUseIdRewrites = count; });
625
+ return attachUpstreamMetadata(new Response(body, { status: res.status, headers: { "content-type": "text/event-stream" } }), metadata);
588
626
  }
589
627
  catch (e) {
590
628
  return anthropicError(502, `llm-relay: response translation failed: ${e.message}`, "local", {}, "relay_mapper_defect");
@@ -623,6 +661,13 @@ export async function fetchBackend(attempt, args, fetchFn = fetch) {
623
661
  // the relay mapper rather than the provider or its failure budget.
624
662
  return anthropicError(502, `llm-relay: response translation failed: ${e.message}`, "local", {}, "relay_mapper_defect");
625
663
  }
664
+ // A host that reuses a tool-call id across turns makes Claude Code drop the call while building
665
+ // its next request; mint a fresh one where it collides. The pass runs on the TRANSLATED message,
666
+ // so a dialect-recovered call is covered too and keeps its `tu_recovered_*` id unless that id is
667
+ // itself already in the conversation. See `src/tool-use-ids.ts`.
668
+ const mintedIds = mintUniqueToolUseIds(anthropicJson, args.reqJson);
669
+ if (mintedIds.message)
670
+ anthropicJson = mintedIds.message;
626
671
  // Announce a recovered call for the same reason `x-llm-relay-degraded` is announced: a response
627
672
  // whose tool call the RELAY reconstructed is not the same as one that arrived correct, and an
628
673
  // unflagged reconstruction is indistinguishable from a host that worked.
@@ -632,12 +677,34 @@ export async function fetchBackend(attempt, args, fetchFn = fetch) {
632
677
  headers: {
633
678
  "content-type": "application/json",
634
679
  ...(recoveredDialect ? { [TOOL_DIALECT_HEADER]: recoveredDialect } : {}),
680
+ ...(mintedIds.rewritten > 0
681
+ ? { [TOOL_USE_IDS_HEADER]: `${mintedIds.rewritten} rewritten` }
682
+ : {}),
635
683
  },
636
684
  });
637
685
  const metadata = {};
638
686
  captureReportedModel(metadata, upstreamJson, "openai-chat", false);
687
+ if (mintedIds.rewritten > 0)
688
+ metadata.toolUseIdRewrites = mintedIds.rewritten;
639
689
  return attachUpstreamMetadata(response, metadata);
640
690
  }
691
+ /**
692
+ * Give a translated message's `tool_use` blocks ids the conversation has not already used.
693
+ *
694
+ * Lazy on purpose: a response with no `tool_use` block never walks the request's messages, so the
695
+ * ordinary text completion — the overwhelming majority of traffic — pays one array scan. `message`
696
+ * is null when nothing changed, so an untouched response is never re-built.
697
+ */
698
+ function mintUniqueToolUseIds(message, reqJson) {
699
+ const content = message.content;
700
+ if (!Array.isArray(content) || !content.some((b) => isRecord(b) && b.type === "tool_use")) {
701
+ return { message: null, rewritten: 0 };
702
+ }
703
+ const out = rewriteToolUseIds(content, knownToolUseIds(reqJson));
704
+ if (out.rewritten === 0)
705
+ return { message: null, rewritten: 0 };
706
+ return { message: { ...message, content: out.content }, rewritten: out.rewritten };
707
+ }
641
708
  /** Did this translated message carry a tool call the relay reconstructed from text? */
642
709
  function recoveredDialectOf(message) {
643
710
  const content = message.content ?? [];
@@ -1183,13 +1250,24 @@ export async function fetchOpenAiFront(attempt, args, fetchFn = fetch) {
1183
1250
  }
1184
1251
  let anthropicBody;
1185
1252
  try {
1186
- const source = protocol === "responses" ? "openai-responses" : "openai";
1187
- anthropicBody = translateBetweenProviders(source, "anthropic", base);
1253
+ // The RESPONSES request direction is relay-owned (`responses-request.ts`), for the same
1254
+ // reason the Anthropic→OpenAI direction is: llm-bridge's `openaiResponsesToUniversal` models
1255
+ // only `function_call_output`, so an assistant `function_call` was flattened into an empty
1256
+ // user turn and an assistant `output_text` reached the backend as a JSON string. The CHAT
1257
+ // request direction stays llm-bridge's (`openaiToUniversal` does handle `tool_calls` and
1258
+ // `role:"tool"`), as does every response/stream direction.
1259
+ anthropicBody = protocol === "responses"
1260
+ ? openaiResponsesRequestToAnthropic(base)
1261
+ : translateBetweenProviders("openai", "anthropic", base);
1188
1262
  if (target.model !== undefined)
1189
1263
  anthropicBody.model = target.model;
1190
1264
  anthropicBody.stream = args.wantsStream;
1191
1265
  }
1192
1266
  catch (e) {
1267
+ // A shape we will not put on the wire is the caller's request being unrepresentable, not a
1268
+ // provider failure — the same clean local 400 the Messages front raises.
1269
+ if (e instanceof RequestMappingError)
1270
+ return openaiError(400, `llm-relay: ${e.message}`, "local");
1193
1271
  return openaiError(400, `llm-relay: request translation failed: ${e.message}`, "local");
1194
1272
  }
1195
1273
  const reqBuf = Buffer.from(JSON.stringify(anthropicBody), "utf8");
@@ -1264,9 +1342,17 @@ export async function fetchOpenAiFront(attempt, args, fetchFn = fetch) {
1264
1342
  : `llm-relay: invalid Anthropic upstream envelope: ${invalidReason}`, generated ? "local" : "upstream", generated ? "relay_mapper_defect" : "invalid_upstream_envelope", retryAfterHeader(backendRes.headers));
1265
1343
  }
1266
1344
  try {
1345
+ // This front's TRANSLATED lane runs through `fetchBackend`, so an `openai`-kind target reached
1346
+ // from `/v1/responses` inherits the id mint. Rebuilding the body must not swallow the
1347
+ // announcement — an automatic fix is acceptable only because it is announced, and the count
1348
+ // is as true here as it was one Response ago.
1349
+ const minted = backendRes.headers.get(TOOL_USE_IDS_HEADER);
1267
1350
  const response = new Response(JSON.stringify(anthropicMessageToOpenAi(body, protocol, target.model ?? String(base.model ?? ""))), {
1268
1351
  status: backendRes.status,
1269
- headers: { "content-type": "application/json" },
1352
+ headers: {
1353
+ "content-type": "application/json",
1354
+ ...(minted ? { [TOOL_USE_IDS_HEADER]: minted } : {}),
1355
+ },
1270
1356
  });
1271
1357
  return metadata ? attachUpstreamMetadata(response, metadata) : response;
1272
1358
  }