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.
@@ -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":"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"}
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
@@ -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, { model: target.model, stream: args.wantsStream });
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, { status: res.status, headers: { "content-type": "text/event-stream" } }), metadata);
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
- const response = new Response(output, { status: backendRes.status, headers: { "content-type": "text/event-stream" } });
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;