@mupt-ai/dari-router 0.2.1 → 0.2.3

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 (79) hide show
  1. package/README.md +1 -1
  2. package/dist/anonymous_actions.d.ts +31 -2
  3. package/dist/anonymous_actions.js +225 -16
  4. package/dist/anonymous_actions.js.map +1 -1
  5. package/dist/cache_behavior.d.ts +1 -1
  6. package/dist/cache_behavior.js +23 -14
  7. package/dist/cache_behavior.js.map +1 -1
  8. package/dist/cache_scope.js +15 -7
  9. package/dist/cache_scope.js.map +1 -1
  10. package/dist/candidate_resolution.d.ts +2 -1
  11. package/dist/candidate_resolution.js +5 -2
  12. package/dist/candidate_resolution.js.map +1 -1
  13. package/dist/compatibility.d.ts +1 -0
  14. package/dist/compatibility.js +6 -0
  15. package/dist/compatibility.js.map +1 -1
  16. package/dist/continuation_state.d.ts +12 -0
  17. package/dist/continuation_state.js +48 -7
  18. package/dist/continuation_state.js.map +1 -1
  19. package/dist/cost.d.ts +8 -0
  20. package/dist/cost.js +47 -30
  21. package/dist/cost.js.map +1 -1
  22. package/dist/dari_policy.d.ts +1 -1
  23. package/dist/dari_policy.js +4 -2
  24. package/dist/dari_policy.js.map +1 -1
  25. package/dist/eval_score_imputation.d.ts +1 -0
  26. package/dist/eval_score_imputation.js +28 -2
  27. package/dist/eval_score_imputation.js.map +1 -1
  28. package/dist/fingerprint.js +45 -12
  29. package/dist/fingerprint.js.map +1 -1
  30. package/dist/fixed_turn_cost_config.d.ts +2 -0
  31. package/dist/fixed_turn_cost_config.js +7 -0
  32. package/dist/fixed_turn_cost_config.js.map +1 -1
  33. package/dist/index.d.ts +2 -0
  34. package/dist/index.js +1 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/jev_router.d.ts +5 -0
  37. package/dist/jev_router.js +22 -0
  38. package/dist/jev_router.js.map +1 -0
  39. package/dist/jev_selector.d.ts +77 -0
  40. package/dist/jev_selector.js +418 -0
  41. package/dist/jev_selector.js.map +1 -0
  42. package/dist/model_ids.d.ts +1 -0
  43. package/dist/model_ids.js +26 -0
  44. package/dist/model_ids.js.map +1 -1
  45. package/dist/pi_context.js +37 -6
  46. package/dist/pi_context.js.map +1 -1
  47. package/dist/pi_options.js +6 -3
  48. package/dist/pi_options.js.map +1 -1
  49. package/dist/policy-engine.d.ts +1 -0
  50. package/dist/policy-engine.js +1 -0
  51. package/dist/policy-engine.js.map +1 -1
  52. package/dist/prompts.d.ts +1 -0
  53. package/dist/prompts.js +21 -4
  54. package/dist/prompts.js.map +1 -1
  55. package/dist/route.d.ts +3 -0
  56. package/dist/route.js +64 -5
  57. package/dist/route.js.map +1 -1
  58. package/dist/routing_history.d.ts +1 -0
  59. package/dist/routing_history.js +2 -0
  60. package/dist/routing_history.js.map +1 -1
  61. package/dist/selector_input.d.ts +26 -1
  62. package/dist/selector_input.js +17 -1
  63. package/dist/selector_input.js.map +1 -1
  64. package/dist/selector_request.d.ts +3 -1
  65. package/dist/selector_request.js +52 -12
  66. package/dist/selector_request.js.map +1 -1
  67. package/dist/selector_truncation.d.ts +2 -0
  68. package/dist/selector_truncation.js +42 -0
  69. package/dist/selector_truncation.js.map +1 -1
  70. package/dist/types.d.ts +9 -2
  71. package/examples/basic_route.ts +1 -1
  72. package/examples/jev_router.ts +50 -0
  73. package/examples/managed/README.md +2 -2
  74. package/examples/managed/byok-router/router.yml +1 -1
  75. package/examples/managed/custom-rules-router/router.yml +5 -5
  76. package/examples/managed/{slm-router → dari}/README.md +1 -1
  77. package/examples/managed/{slm-router → dari}/router.yml +2 -2
  78. package/examples/managed/eval-router/router.yml +1 -1
  79. package/package.json +4 -3
@@ -0,0 +1,418 @@
1
+ // TypeSafe Jev selector over the anonymous-action protocol. Jev
2
+ // (docs.typesafe.ai) is a System One model: it answers typed questions about
3
+ // a state instead of generating text, so the routing decision is two Choice
4
+ // questions over the same state — which anonymous candidate action serves
5
+ // the next turns, and how long a lease to commit to — and the answer comes
6
+ // back as calibrated probabilities rather than parsed JSON.
7
+ //
8
+ // This is an alternative to Dari's trained routing policy. Candidates are
9
+ // de-identified through the same anonymous-action protocol Dari uses
10
+ // (anonymous_actions.ts), so Jev decides on benchmark and cost evidence and
11
+ // never sees a model identity; comparisons Jev is weak at (cost ordering,
12
+ // benchmark standing) are computed here and passed as text.
13
+ import { anonymizeSelectorInput, assignAnonymousActions, sessionRng, } from "./anonymous_actions.js";
14
+ import { RouterCoreError } from "./errors.js";
15
+ import { RouterFrameworkError } from "./framework_error.js";
16
+ import { FIXED_TURN_COST_COMPARISON_TURNS, SELECTOR_LEASE_TURNS } from "./fixed_turn_cost_config.js";
17
+ import { isRecord, } from "./types.js";
18
+ export const DEFAULT_JEV_ENDPOINT = "https://api.typesafe.ai/v1";
19
+ export const DEFAULT_JEV_MODEL = "jev-latest";
20
+ const DEFAULT_JEV_TIMEOUT_MS = 30_000;
21
+ // Jev evaluates up to 32k tokens of state plus the longest question, and
22
+ // JSON-shaped conversation state tokenizes at roughly 2.7 characters per
23
+ // token. The selector request is sized on its JSON-escaped messages, which
24
+ // overstate the state Jev receives, so this budget leaves room for the
25
+ // questions and the action descriptions.
26
+ export const JEV_SELECTOR_CONTEXT_WINDOW_CHARS = 64_000;
27
+ // Rate-limit and overload responses get one backoff retry; anything else is
28
+ // the caller's failure to surface.
29
+ const JEV_RETRY_STATUSES = new Set([429, 529]);
30
+ const JEV_ATTEMPTS = 2;
31
+ const JEV_RETRY_DELAY_MS = 500;
32
+ const JEV_RETRY_MAX_DELAY_MS = 5_000;
33
+ // selector_output after TypeSafe returned 200. Token counts are on the body
34
+ // even when the action or lease answer is rejected, so hosts can still bill
35
+ // the selector call.
36
+ export class JevSelectorOutputError extends RouterCoreError {
37
+ usage;
38
+ constructor(message, code, usage = null) {
39
+ super("selector_output", message, code);
40
+ this.name = "JevSelectorOutputError";
41
+ this.usage = usage;
42
+ }
43
+ }
44
+ export function resolveJevSelectorConfig(input) {
45
+ const apiKey = input.apiKey?.trim() ?? "";
46
+ if (!apiKey)
47
+ throw configurationError("Jev selector requires an apiKey.", "apiKey");
48
+ const endpoint = (input.endpoint ?? DEFAULT_JEV_ENDPOINT).trim().replace(/\/+$/, "");
49
+ let url;
50
+ try {
51
+ url = new URL(endpoint);
52
+ }
53
+ catch {
54
+ throw configurationError("Jev selector endpoint must be a valid URL.", "endpoint");
55
+ }
56
+ if ((url.protocol !== "https:" && url.protocol !== "http:") || url.username || url.password) {
57
+ throw configurationError("Jev selector endpoint must be an HTTP(S) URL without embedded credentials.", "endpoint");
58
+ }
59
+ const model = (input.model ?? DEFAULT_JEV_MODEL).trim();
60
+ if (!model)
61
+ throw configurationError("Jev selector model must not be empty.", "model");
62
+ const leaseTurns = input.leaseTurns ?? SELECTOR_LEASE_TURNS;
63
+ if (leaseTurns.some((turns, index) => !Number.isSafeInteger(turns) || turns <= 0 || (index > 0 && turns <= leaseTurns[index - 1]))) {
64
+ throw configurationError("Jev selector leaseTurns must be ascending positive integers.", "leaseTurns");
65
+ }
66
+ const timeoutMs = input.timeoutMs ?? DEFAULT_JEV_TIMEOUT_MS;
67
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs <= 0) {
68
+ throw configurationError("Jev selector timeoutMs must be a positive integer.", "timeoutMs");
69
+ }
70
+ return { apiKey, endpoint, model, leaseTurns, timeoutMs };
71
+ }
72
+ // Renders the de-identified selector input as a Jev request. Every candidate
73
+ // identity has already been replaced by its action letter; the only evidence
74
+ // an action carries is its projected cost and its benchmark standing.
75
+ export function buildJevSelectorRequest(anonymousInput, options) {
76
+ const costs = actionCosts(anonymousInput.cost_estimates);
77
+ const criteria = {};
78
+ for (const { action } of anonymousInput.candidate_actions) {
79
+ const cost = costs.get(action);
80
+ const benchmarks = {};
81
+ for (const card of anonymousInput.imported_evals) {
82
+ const score = card.scores.find((entry) => entry.action === action);
83
+ if (score === undefined)
84
+ continue;
85
+ benchmarks[card.name] = {
86
+ score: score.score,
87
+ rank: `${score.rank} of ${score.rank_total}`,
88
+ };
89
+ }
90
+ criteria[action] = cost === undefined && Object.keys(benchmarks).length === 0
91
+ ? null
92
+ : {
93
+ ...(cost === undefined ? {} : { cost }),
94
+ ...(Object.keys(benchmarks).length === 0 ? {} : { benchmarks }),
95
+ };
96
+ }
97
+ const state = {
98
+ task: anonymousInput.task,
99
+ previous_action: anonymousInput.previous_action === null
100
+ ? null
101
+ : anonymousInput.previous_action.action,
102
+ lease_history: anonymousInput.lease_history,
103
+ conversation: anonymousInput.messages,
104
+ };
105
+ const glossary = {};
106
+ for (const card of anonymousInput.imported_evals) {
107
+ glossary[card.name] = {
108
+ ...(card.description === null ? {} : { description: card.description }),
109
+ scale: `${card.min_score} to ${card.max_score}, higher is better`,
110
+ };
111
+ }
112
+ const questions = {
113
+ action: {
114
+ type: "choice",
115
+ instructions: {
116
+ question: "Which action should serve the coding agent's next turns?",
117
+ rules: [
118
+ "Capability first: the action must be able to handle the task; capability is never traded away for cost.",
119
+ "Judge the task's difficulty and how much work remains from `task`, `lease_history`, and the latest turns of `conversation`.",
120
+ "Use each action's benchmark scores and ranks as evidence of capability. A missing benchmark means the action was not measured on it, not that it scored poorly.",
121
+ "When several actions are capable enough, choose the one with the best (lowest-numbered) cost rank.",
122
+ "Prefer `previous_action` while the task and its current phase have not changed.",
123
+ ],
124
+ ...(Object.keys(glossary).length === 0 ? {} : { benchmarks: glossary }),
125
+ },
126
+ criteria,
127
+ },
128
+ ...(options.leaseTurns.length === 0 ? {} : { lease: leaseQuestion(options.leaseTurns) }),
129
+ };
130
+ return { model: options.model, state, questions };
131
+ }
132
+ function leaseQuestion(leaseTurns) {
133
+ const last = leaseTurns.length - 1;
134
+ const criteria = {};
135
+ leaseTurns.forEach((turns, index) => {
136
+ criteria[String(turns)] = index === 0
137
+ ? `${turns} turns: the task is nearly done, or the next step may change what the agent needs.`
138
+ : index === last
139
+ ? `${turns} turns: a long stretch of similar work remains, such as a large implementation or many edit-and-test cycles.`
140
+ : `${turns} turns: a bounded stretch of similar work remains.`;
141
+ });
142
+ return {
143
+ type: "choice",
144
+ instructions: {
145
+ question: "How many consecutive turns should the chosen action serve before the router reconsiders?",
146
+ guidance: "A longer lease amortizes the cold start paid on its first turn across warm cache hits on the turns that follow. The lease ends early only if the task finishes or the provider fails. Judge from how much similar work remains after the latest turn of `conversation`.",
147
+ },
148
+ criteria,
149
+ };
150
+ }
151
+ export function parseJevSelectorResponse(body, args) {
152
+ if (!isRecord(body) || typeof body.model !== "string" || !isRecord(body.answers)) {
153
+ throw invalidResponse("Jev returned an unrecognized response body.");
154
+ }
155
+ const usage = body.usage;
156
+ if (!isRecord(usage)
157
+ || typeof usage.input_tokens !== "number"
158
+ || typeof usage.output_tokens !== "number") {
159
+ throw invalidResponse("Jev response is missing token usage.");
160
+ }
161
+ const tokenUsage = {
162
+ input_tokens: usage.input_tokens,
163
+ output_tokens: usage.output_tokens,
164
+ };
165
+ const action = choiceAnswer(body.answers.action, "action", tokenUsage);
166
+ const slot = args.slots.find((entry) => entry.action === action.choice);
167
+ if (slot === undefined) {
168
+ throw new JevSelectorOutputError("Jev selected an action outside this router's candidates.", "selector_invalid_candidate", tokenUsage);
169
+ }
170
+ let lease;
171
+ let turns;
172
+ if (args.leaseTurns.length > 0) {
173
+ lease = choiceAnswer(body.answers.lease, "lease", tokenUsage);
174
+ turns = Number(lease.choice);
175
+ if (!args.leaseTurns.includes(turns)) {
176
+ throw invalidResponse(`Jev lease answer ${lease.choice} is not on the offered menu.`, tokenUsage);
177
+ }
178
+ }
179
+ const response = {
180
+ model: body.model,
181
+ answers: { action, ...(lease === undefined ? {} : { lease }) },
182
+ usage: tokenUsage,
183
+ };
184
+ return {
185
+ decision: {
186
+ selectedModel: slot.candidate.model,
187
+ reasoningEffort: slot.candidate.reasoningEffort,
188
+ // The reason is persisted into lease history and replayed to later
189
+ // selectors, so it stays anonymous like the rest of the protocol.
190
+ reason: decisionReason(action, turns, lease),
191
+ ...(turns === undefined ? {} : { leaseTurnsRemaining: turns - 1 }),
192
+ },
193
+ response,
194
+ };
195
+ }
196
+ function decisionReason(action, turns, lease) {
197
+ const pick = `Jev selected Action ${action.choice} `
198
+ + `(probability ${percent(action.probabilities[action.choice] ?? 0)}, confidence ${percent(action.confidence)})`;
199
+ if (turns === undefined || lease === undefined)
200
+ return `${pick}.`;
201
+ return `${pick} with a ${turns}-turn lease (probability ${percent(lease.probabilities[lease.choice] ?? 0)}).`;
202
+ }
203
+ // Anonymizes the named selector input against the slots, asks Jev, and maps
204
+ // the answers back onto the slots' candidates.
205
+ export async function selectWithJev(selectorInput, slots, config, signal) {
206
+ if ("custom_rules" in selectorInput || "default_target" in selectorInput) {
207
+ throw new RouterCoreError("configuration", "The Jev selector serves only the default routing policy and cannot apply custom routing rules.", "custom_rules_not_supported");
208
+ }
209
+ const anonymousInput = anonymizeSelectorInput(selectorInput, slots);
210
+ const request = buildJevSelectorRequest(anonymousInput, config);
211
+ const body = await postSystemOne(request, config, signal);
212
+ const { decision, response } = parseJevSelectorResponse(body, {
213
+ slots,
214
+ leaseTurns: config.leaseTurns,
215
+ });
216
+ return { decision, request, response };
217
+ }
218
+ // A Selector for createDariRoutingPolicy: decodes the selector input from the
219
+ // chat-shaped request and returns a routing_decision JSON the parser already
220
+ // understands, including lease_turns_remaining and the raw Jev answers.
221
+ // Letters are assigned per call: the framework path carries no conversation
222
+ // identity, and every candidate-bearing field is re-lettered together, so
223
+ // correctness never depends on cross-turn stability.
224
+ export function createJevSelector(input) {
225
+ const config = resolveJevSelectorConfig(input);
226
+ return {
227
+ async select(request, signal) {
228
+ const selectorInput = selectorInputFromRequest(request);
229
+ const single = singleCandidate(selectorInput);
230
+ if (single !== undefined) {
231
+ return JSON.stringify({
232
+ selected_model: single.model,
233
+ reasoning_effort: single.reasoningEffort,
234
+ reason: "The router has only one compatible model/thinking-level pair.",
235
+ });
236
+ }
237
+ const candidates = selectorInput.candidate_pairs.map((pair) => ({
238
+ model: pair.model,
239
+ reasoningEffort: pair.thinking_level,
240
+ }));
241
+ const rng = typeof request.prompt_cache_key === "string" && request.prompt_cache_key !== ""
242
+ ? sessionRng(request.prompt_cache_key)
243
+ : Math.random;
244
+ let selection;
245
+ try {
246
+ selection = await selectWithJev(selectorInput, assignAnonymousActions(candidates, rng), config, signal);
247
+ }
248
+ catch (error) {
249
+ throw frameworkError(error);
250
+ }
251
+ const { decision, response } = selection;
252
+ return JSON.stringify({
253
+ selected_model: decision.selectedModel,
254
+ reasoning_effort: decision.reasoningEffort,
255
+ reason: decision.reason,
256
+ ...(decision.leaseTurnsRemaining === undefined
257
+ ? {}
258
+ : { lease_turns_remaining: decision.leaseTurnsRemaining }),
259
+ jev: response,
260
+ });
261
+ },
262
+ };
263
+ }
264
+ function singleCandidate(selectorInput) {
265
+ if (selectorInput.candidate_pairs.length !== 1)
266
+ return undefined;
267
+ const pair = selectorInput.candidate_pairs[0];
268
+ return { model: pair.model, reasoningEffort: pair.thinking_level };
269
+ }
270
+ async function postSystemOne(request, config, signal) {
271
+ for (let attempt = 1;; attempt += 1) {
272
+ const response = await fetchSystemOne(request, config, signal);
273
+ if (response.ok) {
274
+ try {
275
+ return await response.json();
276
+ }
277
+ catch {
278
+ throw invalidResponse("Jev returned a non-JSON response body.");
279
+ }
280
+ }
281
+ if (attempt < JEV_ATTEMPTS && JEV_RETRY_STATUSES.has(response.status)) {
282
+ await delay(retryDelayMs(response.headers.get("retry-after")), signal);
283
+ continue;
284
+ }
285
+ const body = await response.text().catch(() => "");
286
+ throw new RouterFrameworkError("policy", `Jev returned HTTP ${response.status}: ${body}`, "jev_http_error");
287
+ }
288
+ }
289
+ async function fetchSystemOne(request, config, signal) {
290
+ const timeout = AbortSignal.timeout(config.timeoutMs);
291
+ try {
292
+ return await fetch(`${config.endpoint}/systemone`, {
293
+ method: "POST",
294
+ headers: {
295
+ Authorization: `Bearer ${config.apiKey}`,
296
+ "Content-Type": "application/json",
297
+ },
298
+ body: JSON.stringify(request),
299
+ signal: signal === undefined ? timeout : AbortSignal.any([signal, timeout]),
300
+ });
301
+ }
302
+ catch (error) {
303
+ if (signal?.aborted)
304
+ throw error;
305
+ throw new RouterFrameworkError("policy", `Jev request failed: ${error instanceof Error ? error.message : String(error)}`, "jev_request_failed", undefined, { cause: error });
306
+ }
307
+ }
308
+ function retryDelayMs(retryAfter) {
309
+ const seconds = Number(retryAfter);
310
+ if (retryAfter === null || !Number.isFinite(seconds) || seconds <= 0)
311
+ return JEV_RETRY_DELAY_MS;
312
+ return Math.min(seconds * 1000, JEV_RETRY_MAX_DELAY_MS);
313
+ }
314
+ function delay(ms, signal) {
315
+ return new Promise((resolve, reject) => {
316
+ const timer = setTimeout(() => {
317
+ signal?.removeEventListener("abort", onAbort);
318
+ resolve();
319
+ }, ms);
320
+ const onAbort = () => {
321
+ clearTimeout(timer);
322
+ reject(signal?.reason);
323
+ };
324
+ signal?.addEventListener("abort", onAbort, { once: true });
325
+ });
326
+ }
327
+ function selectorInputFromRequest(request) {
328
+ const user = request.messages?.find((message) => message.role === "user");
329
+ if (typeof user?.content !== "string") {
330
+ throw new RouterCoreError("invalid_request", "Selector request is missing the JSON user message.", "invalid_request_error");
331
+ }
332
+ let parsed;
333
+ try {
334
+ parsed = JSON.parse(user.content);
335
+ }
336
+ catch {
337
+ throw new RouterCoreError("invalid_request", "Selector request user message is not valid JSON.", "invalid_request_error");
338
+ }
339
+ if (!isRecord(parsed) || !Array.isArray(parsed.candidate_pairs) || !Array.isArray(parsed.messages)) {
340
+ throw new RouterCoreError("invalid_request", "Selector input is missing candidate_pairs or messages.", "invalid_request_error");
341
+ }
342
+ return parsed;
343
+ }
344
+ // Cost per action as text Jev can compare literally: the loop projections at
345
+ // each lease length, plus a rank across actions on the comparison horizon.
346
+ function actionCosts(costs) {
347
+ const scalars = new Map();
348
+ const rendered = new Map();
349
+ for (const cost of costs) {
350
+ if (cost.projections.length === 0)
351
+ continue;
352
+ const comparison = cost.projections.find((projection) => projection.projected_turns === FIXED_TURN_COST_COMPARISON_TURNS) ?? cost.projections[cost.projections.length - 1];
353
+ scalars.set(cost.action, comparison.total_cost_usd);
354
+ rendered.set(cost.action, {
355
+ projected_loop_cost: Object.fromEntries(cost.projections.map((projection) => [
356
+ `${projection.projected_turns} turns`,
357
+ usd(projection.total_cost_usd),
358
+ ])),
359
+ });
360
+ }
361
+ const ranked = [...scalars.entries()].sort((left, right) => left[1] - right[1]);
362
+ ranked.forEach(([, value], index) => {
363
+ // Competition ranking: tied costs share the better rank.
364
+ const rank = ranked.findIndex(([, other]) => other === value) + 1;
365
+ const suffix = ranked.length === 1
366
+ ? ""
367
+ : rank === 1
368
+ ? " (cheapest)"
369
+ : index === ranked.length - 1 && rank === ranked.length
370
+ ? " (most expensive)"
371
+ : "";
372
+ const action = ranked[index][0];
373
+ rendered.get(action).rank = `${rank} of ${ranked.length}${suffix}`;
374
+ });
375
+ return rendered;
376
+ }
377
+ function choiceAnswer(value, name, usage) {
378
+ if (!isRecord(value)
379
+ || value.type !== "choice"
380
+ || typeof value.choice !== "string"
381
+ || typeof value.confidence !== "number"
382
+ || !isRecord(value.probabilities)) {
383
+ throw invalidResponse(`Jev response is missing a choice answer for ${name}.`, usage);
384
+ }
385
+ const probabilities = {};
386
+ for (const [label, probability] of Object.entries(value.probabilities)) {
387
+ if (typeof probability === "number")
388
+ probabilities[label] = probability;
389
+ }
390
+ return {
391
+ type: "choice",
392
+ choice: value.choice,
393
+ confidence: value.confidence,
394
+ probabilities,
395
+ };
396
+ }
397
+ function usd(value) {
398
+ if (value >= 1)
399
+ return `$${value.toFixed(2)}`;
400
+ const trimmed = value.toPrecision(3).replace(/0+$/, "").replace(/\.$/, "");
401
+ return `$${trimmed}`;
402
+ }
403
+ function percent(value) {
404
+ return `${Math.round(value * 100)}%`;
405
+ }
406
+ function invalidResponse(message, usage = null) {
407
+ return new JevSelectorOutputError(message, "selector_invalid_response", usage);
408
+ }
409
+ function configurationError(message, param) {
410
+ return new RouterCoreError("configuration", message, "jev_configuration_invalid", param);
411
+ }
412
+ function frameworkError(error) {
413
+ if (!(error instanceof RouterCoreError))
414
+ return error;
415
+ const kind = error.kind === "selector_output" ? "policy" : error.kind;
416
+ return new RouterFrameworkError(kind, error.message, error.code, error.param, { cause: error });
417
+ }
418
+ //# sourceMappingURL=jev_selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jev_selector.js","sourceRoot":"","sources":["../src/jev_selector.ts"],"names":[],"mappings":"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"}
@@ -2,3 +2,4 @@ import type { Provider } from "./types.js";
2
2
  export declare function providerForModel(model: string): Provider;
3
3
  export declare function nativeModelId(model: string): string;
4
4
  export declare function canonicalModelId(modelId: string): string;
5
+ export declare function modelFamilyProvider(model: string, provider?: string): string;
package/dist/model_ids.js CHANGED
@@ -27,4 +27,30 @@ export function canonicalModelId(modelId) {
27
27
  return modelId;
28
28
  return modelId.slice(0, slash).toLowerCase() + modelId.slice(slash);
29
29
  }
30
+ // Serving-provider adapters that execute a canonical model owner's models
31
+ // retain the owner's tokenizer, prompt-cache, and cost family. Warm-prefix
32
+ // provenance is checked separately against the actual serving provider, so
33
+ // an alias here never lets one provider claim another's cached prefix.
34
+ // Returns null when the serving provider is not an alias.
35
+ function aliasFamilyProvider(model, provider) {
36
+ if (provider === "openai-codex")
37
+ return "openai";
38
+ if (provider !== "amazon-bedrock" && provider !== "azure")
39
+ return null;
40
+ const slash = canonicalModelId(model).indexOf("/");
41
+ if (slash <= 0)
42
+ return null;
43
+ const owner = canonicalModelId(model).slice(0, slash).toLowerCase();
44
+ return owner === "openai" || owner === "anthropic" ? owner : null;
45
+ }
46
+ // The provider whose family behavior (tokenizer, prompt cache, cost class)
47
+ // a model follows: the serving provider itself, or the canonical model owner
48
+ // when serving through a provider alias. Callers that know the serving
49
+ // provider pass it; otherwise the model id's prefix decides, and an id with
50
+ // no parseable prefix is an error, not a silently generic model.
51
+ export function modelFamilyProvider(model, provider) {
52
+ const resolved = (provider ?? providerForModel(model)).toLowerCase();
53
+ const aliased = aliasFamilyProvider(model, resolved);
54
+ return aliased ?? resolved;
55
+ }
30
56
  //# sourceMappingURL=model_ids.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model_ids.js","sourceRoot":"","sources":["../src/model_ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAErD,4EAA4E;AAC5E,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,eAAe,CAAC,iBAAiB,EAAE,kCAAkC,KAAK,EAAE,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACxH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,eAAe,CAAC,iBAAiB,EAAE,kCAAkC,KAAK,EAAE,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACxH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0EAA0E;AAC1E,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/B,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"model_ids.js","sourceRoot":"","sources":["../src/model_ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAErD,4EAA4E;AAC5E,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,eAAe,CAAC,iBAAiB,EAAE,kCAAkC,KAAK,EAAE,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACxH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,eAAe,CAAC,iBAAiB,EAAE,kCAAkC,KAAK,EAAE,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACxH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0EAA0E;AAC1E,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/B,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,uEAAuE;AACvE,0DAA0D;AAC1D,SAAS,mBAAmB,CAAC,KAAa,EAAE,QAAgB;IAC1D,IAAI,QAAQ,KAAK,cAAc;QAAE,OAAO,QAAQ,CAAC;IACjD,IAAI,QAAQ,KAAK,gBAAgB,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACvE,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC;AAED,2EAA2E;AAC3E,6EAA6E;AAC7E,uEAAuE;AACvE,4EAA4E;AAC5E,iEAAiE;AACjE,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,QAAiB;IAClE,MAAM,QAAQ,GAAG,CAAC,QAAQ,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACrE,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrD,OAAO,OAAO,IAAI,QAAQ,CAAC;AAC7B,CAAC"}
@@ -8,6 +8,7 @@ export function piContext(request, model) {
8
8
  const calls = new Map();
9
9
  const timestamp = Date.now();
10
10
  let assistant;
11
+ let sawConversationItem = false;
11
12
  const flushAssistant = () => {
12
13
  if (assistant === undefined)
13
14
  return;
@@ -35,16 +36,27 @@ export function piContext(request, model) {
35
36
  for (const item of request.items) {
36
37
  if (item.type === "message" && (item.role === "system" || item.role === "developer")) {
37
38
  flushAssistant();
38
- system.push(systemText(item.content));
39
+ const text = systemText(item.content);
40
+ if (!text)
41
+ continue;
42
+ if (!sawConversationItem) {
43
+ // Leading preamble is identical on every request, so folding it into
44
+ // the system prompt keeps the provider payload prefix stable.
45
+ system.push(text);
46
+ continue;
47
+ }
48
+ // Mid-conversation system/developer notes arrive between turns (Claude
49
+ // Code appends a `<total_tokens>` reminder after every tool result).
50
+ // Folding them into the system prompt mutates the front of the provider
51
+ // payload, so prefix-matching prompt caches miss and re-write the whole
52
+ // conversation at cache-write prices. Keep them positional instead.
53
+ appendPositionalNote(messages, text, timestamp);
39
54
  continue;
40
55
  }
56
+ sawConversationItem = true;
41
57
  if (item.type === "message" && item.role === "user") {
42
58
  flushAssistant();
43
- messages.push({
44
- role: "user",
45
- content: piContent(item.content, "user message"),
46
- timestamp,
47
- });
59
+ appendUserMessage(messages, piContent(item.content, "user message"), timestamp);
48
60
  continue;
49
61
  }
50
62
  if (item.type === "message") {
@@ -150,6 +162,25 @@ function thinkingContent(item, continuation) {
150
162
  redacted: true,
151
163
  };
152
164
  }
165
+ function appendPositionalNote(messages, text, timestamp) {
166
+ const previous = messages.at(-1);
167
+ if (previous?.role === "toolResult") {
168
+ previous.content = [...piContentBlocks(previous.content), { type: "text", text }];
169
+ return;
170
+ }
171
+ appendUserMessage(messages, [{ type: "text", text }], timestamp);
172
+ }
173
+ function appendUserMessage(messages, content, timestamp) {
174
+ const previous = messages.at(-1);
175
+ if (previous?.role === "user") {
176
+ previous.content = [...piContentBlocks(previous.content), ...piContentBlocks(content)];
177
+ return;
178
+ }
179
+ messages.push({ role: "user", content, timestamp });
180
+ }
181
+ function piContentBlocks(content) {
182
+ return typeof content === "string" ? [{ type: "text", text: content }] : content;
183
+ }
153
184
  function systemText(content) {
154
185
  return content.map((part) => {
155
186
  if (part.type !== "text") {
@@ -1 +1 @@
1
- {"version":3,"file":"pi_context.js","sourceRoot":"","sources":["../src/pi_context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pi_context.js","sourceRoot":"","sources":["../src/pi_context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMtC,OAAO,EACL,8BAA8B,EAC9B,oBAAoB,GAErB,MAAM,yBAAyB,CAAC;AAGjC,MAAM,UAAU,SAAS,CAAC,OAAsB,EAAE,KAAc;IAC9D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,SAAkF,CAAC;IACvF,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAEhC,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO;QACpC,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACvF,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;YAC/E,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAC;QACX,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,SAAS,GAAG,SAAS,CAAC;IACxB,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,SAAS,KAAK;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,EAAE;YACX,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,EAAE;YACf,KAAK,EAAE,WAAW,EAAE;YACpB,UAAU,EAAE,MAAM;YAClB,SAAS;SACV,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;YACrF,cAAc,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,qEAAqE;gBACrE,8DAA8D;gBAC9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,uEAAuE;YACvE,qEAAqE;YACrE,wEAAwE;YACxE,wEAAwE;YACxE,oEAAoE;YACpE,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAChD,SAAS;QACX,CAAC;QACD,mBAAmB,GAAG,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACpD,cAAc,EAAE,CAAC;YACjB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC;YAChF,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;YACnC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAChD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACzB,MAAM,IAAI,oBAAoB,CAC5B,iBAAiB,EACjB,0DAA0D,EAC1D,gCAAgC,CACjC,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YACpD,CAAC,CAAC,CAAC,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9D,gBAAgB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC9B,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,cAAc;aAC1B,CAAC,CAAC;YACH,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,MAAM,GAA2B;gBACrC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,KAAK,EAAE,KAAK,CAAC,EAAE;aAChB,CAAC;YACF,MAAM,YAAY,GAAG,8BAA8B,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAC/E,IAAI,YAAY,EAAE,CAAC;gBACjB,gBAAgB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvE,IAAI,QAAQ,EAAE,CAAC;oBACb,qEAAqE;oBACrE,iEAAiE;oBACjE,oCAAoC;oBACpC,gBAAgB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACrC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,6DAA6D;gBAC7D,MAAM,IAAI,oBAAoB,CAC5B,eAAe,EACf,mDAAmD,KAAK,CAAC,GAAG,kEAAkE,EAC9H,kCAAkC,CACnC,CAAC;YACJ,CAAC;YACA,gBAAgB,EAAE,CAAC,OAAqD,CAAC,IAAI,CAAC;gBAC7E,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,IAAI,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,cAAc,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,MAAM;YAC9C,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,IAAI,CAAC,UAAU,GAAG,CAAC;YACpE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK;YAC9B,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IACD,cAAc,EAAE,CAAC;IAEjB,MAAM,KAAK,GAAW,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;QACnC,UAAU,EAAE,IAAI,CAAC,WAAiC;KACnD,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACrE,QAAQ;QACR,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,IAAoE,EACpE,YAAuC;IAEvC,IAAI,YAAY,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAC7C,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,EAAE,CAAC;QAC9D,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/D,iBAAiB,EAAE,8BAA8B,CAAC;gBAChD,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;gBAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;aAChD,CAAC;SACH,CAAC;IACJ,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAC/C,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,iBAAiB,EAAE,YAAY,CAAC,SAAS;SAC1C,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,EAAE;QACZ,iBAAiB,EAAE,YAAY,CAAC,IAAI;QACpC,QAAQ,EAAE,IAAI;KACf,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,QAA6B,EAC7B,IAAY,EACZ,SAAiB;IAEjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,QAAQ,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;QACpC,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,OAAO;IACT,CAAC;IACD,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,iBAAiB,CACxB,QAA6B,EAC7B,OAA0E,EAC1E,SAAiB;IAEjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QAC9B,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,eAAe,CACtB,OAAyF;IAEzF,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACnF,CAAC;AAED,SAAS,UAAU,CAAC,OAAiC;IACnD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,oBAAoB,CAC5B,iBAAiB,EACjB,oEAAoE,EACpE,6BAA6B,CAC9B,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAChB,OAAiC,EACjC,QAAgB;IAEhB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,oBAAoB,CAC5B,iBAAiB,EACjB,MAAM,QAAQ,oCAAoC,EAClD,6BAA6B,CAC9B,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,KAAK,GAAG,uDAAuD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChF,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,aAAa,CAAC,KAAuC,EAAE,EAAU;IACxE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,mEAAmE;IACnE,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,oBAAoB,CAC5B,iBAAiB,EACjB,cAAc,EAAE,iCAAiC,EACjD,2BAA2B,EAC3B,SAAS,EACT,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,oBAAoB,CAC5B,iBAAiB,EACjB,cAAc,EAAE,oCAAoC,EACpD,2BAA2B,CAC5B,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;QACL,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;QACd,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;KACrE,CAAC;AACJ,CAAC"}
@@ -53,7 +53,7 @@ export async function piOptions(runtime, execution, model) {
53
53
  execution.reasoningEffort !== "max") {
54
54
  options.thinkingBudgets = { [execution.reasoningEffort]: budget };
55
55
  }
56
- const patch = payloadPatch(request, model);
56
+ const patch = payloadPatch(request, model, execution);
57
57
  if (patch !== undefined)
58
58
  options.onPayload = patch;
59
59
  return options;
@@ -106,7 +106,7 @@ function piToolChoice(choice) {
106
106
  return choice;
107
107
  return { type: "function", function: { name: choice.name } };
108
108
  }
109
- function payloadPatch(request, model) {
109
+ function payloadPatch(request, model, execution) {
110
110
  const strictTools = request.tools.some((tool) => tool.strict !== undefined);
111
111
  const parallel = request.parallelToolCalls;
112
112
  const imageDetails = imageDetailQueues(request);
@@ -118,7 +118,10 @@ function payloadPatch(request, model) {
118
118
  [...imageDetails.values()].some((queue) => queue.some((detail) => detail !== "auto"))) {
119
119
  throw new RouterFrameworkError("invalid_request", `Pi API '${model.api}' cannot preserve image detail controls.`, "pi_image_detail_unsupported");
120
120
  }
121
- if (!strictTools && parallel === undefined && !thinkingPatch && !imageDetailPatch) {
121
+ if (!strictTools &&
122
+ parallel === undefined &&
123
+ !thinkingPatch &&
124
+ !imageDetailPatch) {
122
125
  return undefined;
123
126
  }
124
127
  if ((strictTools || parallel !== undefined) && !PAYLOAD_PATCH_APIS.has(model.api)) {