pi-smart-router 0.1.0 → 0.2.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 (67) hide show
  1. package/.pi/extensions/smart-router/delegation-runtime.ts +12 -2
  2. package/README.md +55 -17
  3. package/dist/api/explain/router-explain.d.ts +4 -1
  4. package/dist/api/explain/router-explain.d.ts.map +1 -1
  5. package/dist/api/explain/router-explain.js +9 -9
  6. package/dist/api/explain/router-explain.js.map +1 -1
  7. package/dist/config/defaults.d.ts +4 -1
  8. package/dist/config/defaults.d.ts.map +1 -1
  9. package/dist/config/defaults.js +10 -0
  10. package/dist/config/defaults.js.map +1 -1
  11. package/dist/domain/delegation/delegation-context.d.ts +23 -1
  12. package/dist/domain/delegation/delegation-context.d.ts.map +1 -1
  13. package/dist/domain/delegation/delegation-context.js +93 -0
  14. package/dist/domain/delegation/delegation-context.js.map +1 -1
  15. package/dist/domain/pinning/cache-breakeven.d.ts +51 -0
  16. package/dist/domain/pinning/cache-breakeven.d.ts.map +1 -0
  17. package/dist/domain/pinning/cache-breakeven.js +124 -0
  18. package/dist/domain/pinning/cache-breakeven.js.map +1 -0
  19. package/dist/domain/pinning/saar-session-state.d.ts +36 -0
  20. package/dist/domain/pinning/saar-session-state.d.ts.map +1 -0
  21. package/dist/domain/pinning/saar-session-state.js +74 -0
  22. package/dist/domain/pinning/saar-session-state.js.map +1 -0
  23. package/dist/domain/pinning/session-pinner.d.ts +35 -3
  24. package/dist/domain/pinning/session-pinner.d.ts.map +1 -1
  25. package/dist/domain/pinning/session-pinner.js +149 -1
  26. package/dist/domain/pinning/session-pinner.js.map +1 -1
  27. package/dist/domain/pipeline/router-pipeline.d.ts +15 -1
  28. package/dist/domain/pipeline/router-pipeline.d.ts.map +1 -1
  29. package/dist/domain/pipeline/router-pipeline.js +118 -6
  30. package/dist/domain/pipeline/router-pipeline.js.map +1 -1
  31. package/dist/domain/routing/tool-history-guard.d.ts +21 -5
  32. package/dist/domain/routing/tool-history-guard.d.ts.map +1 -1
  33. package/dist/domain/routing/tool-history-guard.js +77 -10
  34. package/dist/domain/routing/tool-history-guard.js.map +1 -1
  35. package/dist/domain/types/entities.d.ts +48 -0
  36. package/dist/domain/types/entities.d.ts.map +1 -1
  37. package/dist/domain/types/index.d.ts +1 -1
  38. package/dist/domain/types/index.d.ts.map +1 -1
  39. package/dist/domain/types/schemas.d.ts +24 -0
  40. package/dist/domain/types/schemas.d.ts.map +1 -1
  41. package/dist/domain/types/schemas.js +54 -0
  42. package/dist/domain/types/schemas.js.map +1 -1
  43. package/dist/infra/gemini-provider.d.ts.map +1 -1
  44. package/dist/infra/gemini-provider.js +2 -1
  45. package/dist/infra/gemini-provider.js.map +1 -1
  46. package/dist/infrastructure/persistence/sqlite-store.d.ts.map +1 -1
  47. package/dist/infrastructure/persistence/sqlite-store.js +3 -0
  48. package/dist/infrastructure/persistence/sqlite-store.js.map +1 -1
  49. package/dist/infrastructure/telemetry/routing-telemetry.d.ts +30 -2
  50. package/dist/infrastructure/telemetry/routing-telemetry.d.ts.map +1 -1
  51. package/dist/infrastructure/telemetry/routing-telemetry.js +221 -3
  52. package/dist/infrastructure/telemetry/routing-telemetry.js.map +1 -1
  53. package/package.json +5 -4
  54. package/src/api/explain/router-explain.ts +14 -10
  55. package/src/config/defaults.ts +18 -1
  56. package/src/domain/delegation/delegation-context.ts +124 -0
  57. package/src/domain/pinning/cache-breakeven.ts +219 -0
  58. package/src/domain/pinning/saar-session-state.ts +93 -0
  59. package/src/domain/pinning/session-pinner.ts +244 -3
  60. package/src/domain/pipeline/router-pipeline.ts +159 -7
  61. package/src/domain/routing/tool-history-guard.ts +108 -10
  62. package/src/domain/types/entities.ts +54 -0
  63. package/src/domain/types/index.ts +4 -0
  64. package/src/domain/types/schemas.ts +69 -0
  65. package/src/infra/gemini-provider.ts +2 -1
  66. package/src/infrastructure/persistence/sqlite-store.ts +6 -0
  67. package/src/infrastructure/telemetry/routing-telemetry.ts +327 -7
@@ -6,6 +6,8 @@
6
6
  */
7
7
  import { CONTEXT_FIT_EXCEEDED, CONTEXT_OVERFLOW_FRONTIER_FALLBACK, CONTEXT_OVERFLOW_NO_FIT, CONTEXT_OVERFLOW_SAME_PROVIDER_FALLBACK, modelFitsContext, resolveSafetyMargin, } from '../../domain/routing/context-fit.js';
8
8
  import { CLUSTER_REASON_CODE_PREFIX } from '../../config/routing-clusters-loader.js';
9
+ import { evaluateModelSwitchBreakeven } from '../../domain/pinning/session-pinner.js';
10
+ import { selectLowestCostModel } from '../../domain/pinning/sub-route-policy.js';
9
11
  import { resolveFrugalityCostPer1M } from '../pricing/price-broker.js';
10
12
  import { TELEMETRY_MAX_ENTRIES, TELEMETRY_WINDOW_MS, evictExpiredTelemetryEntries, makeTelemetryRoom, } from './telemetry-limits.js';
11
13
  export const CONTEXT_FIT_PASS = 'context_fit_pass';
@@ -15,6 +17,23 @@ export const LOW_INTENSITY_STRUCTURAL = 'low_intensity_structural';
15
17
  export const HIGH_INTENSITY_STRUCTURAL = 'high_intensity_structural';
16
18
  export const P_SUCCESS_CHEAP = 'p_success_cheap';
17
19
  export const P_SUCCESS_UNCERTAIN = 'p_success_uncertain';
20
+ export const BREAKEVEN_BLOCKED = 'breakeven_blocked';
21
+ export const BREAKEVEN_PASS = 'breakeven_pass';
22
+ export const SAAR_BUFFER_ACTIVE = 'saar_buffer_active';
23
+ export const SAAR_HARD_LOCK = 'saar_hard_lock';
24
+ const TURN_ENVELOPE_TIER_MAP = {
25
+ planning: 'frontier-cloud',
26
+ tool_result: 'economical-cloud',
27
+ subagent: 'economical-cloud',
28
+ main_loop: null,
29
+ unknown: null,
30
+ };
31
+ const SAAR_DECISION_REASON_CODES = new Set([
32
+ SAAR_BUFFER_ACTIVE,
33
+ SAAR_HARD_LOCK,
34
+ 'saar_tier_upgrade',
35
+ 'saar_idle_reopen',
36
+ ]);
18
37
  const EXPECTED_COST_PREFIX = 'expected_cost_';
19
38
  const EXPECTED_COST_DEFER_CODES = new Set([
20
39
  'expected_cost_price_delta_insufficient',
@@ -288,6 +307,145 @@ export function buildTierSelectionObservability(input) {
288
307
  local_zero_skip_reasons: buildLocalZeroSkipReasons(decision, features),
289
308
  };
290
309
  }
310
+ function resolveTurnEnvelopeTargetTier(request) {
311
+ const turnType = request.turn_type ?? 'unknown';
312
+ return TURN_ENVELOPE_TIER_MAP[turnType] ?? null;
313
+ }
314
+ function isSaarPlanningBufferActive(request, sessionPinner, saarConfig) {
315
+ if (!saarConfig || !sessionPinner || request.turn_type !== 'planning') {
316
+ return false;
317
+ }
318
+ if (!sessionPinner.getPin(request.session_id)) {
319
+ return false;
320
+ }
321
+ const saarState = sessionPinner.getSaarState(request.session_id);
322
+ const turnIndex = saarState?.turn_index ?? 0;
323
+ return turnIndex < saarConfig.planning_turn_buffer;
324
+ }
325
+ function resolveSaarReasonCode(decision) {
326
+ if (SAAR_DECISION_REASON_CODES.has(decision.reason_code)) {
327
+ return decision.reason_code;
328
+ }
329
+ return null;
330
+ }
331
+ /** Build privacy-safe SAAR pin state for explain and telemetry (SP-126). */
332
+ export function buildSaarObservability(input) {
333
+ const { request, decision, sessionPinner, saarConfig } = input;
334
+ if (!saarConfig) {
335
+ return null;
336
+ }
337
+ const saarState = sessionPinner?.getSaarState(request.session_id) ?? null;
338
+ const pin = sessionPinner?.getPin(request.session_id) ?? null;
339
+ if (!pin && !saarState && !resolveSaarReasonCode(decision)) {
340
+ return null;
341
+ }
342
+ const turnIndex = saarState?.turn_index ?? (pin ? 0 : null);
343
+ return {
344
+ buffer_active: turnIndex !== null ? turnIndex < saarConfig.planning_turn_buffer : false,
345
+ hard_lock: saarState?.hard_lock ?? false,
346
+ turn_index_in_session: turnIndex,
347
+ planning_turn_buffer: saarConfig.planning_turn_buffer,
348
+ idle_timeout_seconds: saarConfig.idle_timeout_seconds,
349
+ saar_reason_code: resolveSaarReasonCode(decision),
350
+ };
351
+ }
352
+ /** Build cache breakeven breakdown when a pin would switch tiers (SP-126). */
353
+ export function buildBreakevenObservability(input) {
354
+ const { request, sessionPinner, saarConfig, fleet } = input;
355
+ if (!fleet || !sessionPinner) {
356
+ return null;
357
+ }
358
+ const pin = sessionPinner.getPin(request.session_id);
359
+ if (!pin) {
360
+ return null;
361
+ }
362
+ const targetTier = resolveTurnEnvelopeTargetTier(request);
363
+ if (!targetTier) {
364
+ return null;
365
+ }
366
+ if (isSaarPlanningBufferActive(request, sessionPinner, saarConfig)) {
367
+ return null;
368
+ }
369
+ const pinnedModel = fleet.find((model) => model.id === pin.pinned_model_id && model.healthy !== false);
370
+ const candidate = selectLowestCostModel(fleet.filter((model) => model.tier === targetTier && model.healthy !== false));
371
+ if (!pinnedModel || !candidate || pinnedModel.id === candidate.id) {
372
+ return null;
373
+ }
374
+ const tokenEstimate = request.estimated_input_tokens ?? request.prompt_text.length;
375
+ const breakeven = evaluateModelSwitchBreakeven(pinnedModel, candidate, tokenEstimate, tokenEstimate, saarConfig);
376
+ return {
377
+ marginal_savings: breakeven.marginal_savings,
378
+ future_cache_value: breakeven.future_cache_value,
379
+ cache_reprime_cost: breakeven.cache_reprime_cost,
380
+ decision: breakeven.shouldSwitch ? 'pass' : 'blocked',
381
+ breakeven_reason_code: breakeven.shouldSwitch ? BREAKEVEN_PASS : BREAKEVEN_BLOCKED,
382
+ };
383
+ }
384
+ function defaultBreakevenTelemetry() {
385
+ return {
386
+ marginal_savings: null,
387
+ future_cache_value: null,
388
+ cache_reprime_cost: null,
389
+ breakeven_decision: null,
390
+ breakeven_reason_code: null,
391
+ };
392
+ }
393
+ function defaultSaarTelemetry() {
394
+ return {
395
+ saar_buffer_active: false,
396
+ saar_hard_lock: false,
397
+ turn_index_in_session: null,
398
+ saar_reason_code: null,
399
+ };
400
+ }
401
+ /** Default breakeven telemetry scalars for tests and legacy store reads. */
402
+ export const DEFAULT_BREAKEVEN_TELEMETRY_FIELDS = defaultBreakevenTelemetry();
403
+ /** Default SAAR telemetry scalars for tests and legacy store reads. */
404
+ export const DEFAULT_SAAR_TELEMETRY_FIELDS = defaultSaarTelemetry();
405
+ function pinEconomicsTelemetryFromInput(input) {
406
+ const breakeven = buildBreakevenObservability(input);
407
+ const saar = buildSaarObservability(input);
408
+ return {
409
+ ...(breakeven
410
+ ? {
411
+ marginal_savings: breakeven.marginal_savings,
412
+ future_cache_value: breakeven.future_cache_value,
413
+ cache_reprime_cost: breakeven.cache_reprime_cost,
414
+ breakeven_decision: breakeven.decision,
415
+ breakeven_reason_code: breakeven.breakeven_reason_code,
416
+ }
417
+ : defaultBreakevenTelemetry()),
418
+ saar_buffer_active: saar?.buffer_active ?? false,
419
+ saar_hard_lock: saar?.hard_lock ?? false,
420
+ turn_index_in_session: saar?.turn_index_in_session ?? null,
421
+ saar_reason_code: saar?.saar_reason_code ?? null,
422
+ };
423
+ }
424
+ /** Attach breakeven and SAAR observability to routing decision features (SP-126). */
425
+ export function enrichRoutingDecisionWithPinEconomics(request, decision, options) {
426
+ const input = {
427
+ request,
428
+ decision,
429
+ ...(options?.fleet !== undefined ? { fleet: options.fleet } : {}),
430
+ ...(options?.sessionPinner !== undefined
431
+ ? { sessionPinner: options.sessionPinner }
432
+ : {}),
433
+ ...(options?.saarConfig !== undefined ? { saarConfig: options.saarConfig } : {}),
434
+ };
435
+ const breakeven = buildBreakevenObservability(input);
436
+ const saar = buildSaarObservability(input);
437
+ if (!breakeven && !saar) {
438
+ return decision;
439
+ }
440
+ return {
441
+ ...decision,
442
+ features: {
443
+ ...(decision.features ?? emptyFeatureSidecar()),
444
+ ...(breakeven ? { breakeven } : {}),
445
+ ...(saar ? { saar } : {}),
446
+ },
447
+ };
448
+ }
291
449
  function emptyFeatureSidecar() {
292
450
  return {
293
451
  triage: null,
@@ -330,7 +488,16 @@ export async function enrichRoutingDecisionForExplain(request, decision, options
330
488
  clusterMatchTable = null;
331
489
  }
332
490
  }
333
- return enrichRoutingDecisionWithTierSelection(withContextFit, clusterMatchTable);
491
+ return enrichRoutingDecisionWithPinEconomics(request, enrichRoutingDecisionWithTierSelection(withContextFit, clusterMatchTable), pinEconomicsOptionsFromExplain(options));
492
+ }
493
+ function pinEconomicsOptionsFromExplain(options) {
494
+ return {
495
+ ...(options?.fleet !== undefined ? { fleet: options.fleet } : {}),
496
+ ...(options?.sessionPinner !== undefined
497
+ ? { sessionPinner: options.sessionPinner }
498
+ : {}),
499
+ ...(options?.saarConfig !== undefined ? { saarConfig: options.saarConfig } : {}),
500
+ };
334
501
  }
335
502
  /** Attach context-fit observability to a routing decision features sidecar (SP-110). */
336
503
  export function enrichRoutingDecisionWithContextFit(request, decision, fleet, contextFitConfig) {
@@ -352,9 +519,19 @@ export function enrichRoutingDecisionWithContextFit(request, decision, fleet, co
352
519
  };
353
520
  }
354
521
  /** JSON payload for SMART_ROUTER_LOG_ROUTING=1 stderr lines (SP-110). */
355
- export function buildRoutingDecisionLogPayload(request, decision, delegate, fleet, contextFitConfig) {
356
- const enriched = enrichRoutingDecisionWithTierSelection(enrichRoutingDecisionWithContextFit(request, decision, fleet, contextFitConfig));
522
+ export function buildRoutingDecisionLogPayload(request, decision, delegate, fleet, contextFitConfig, pinEconomics) {
523
+ const enriched = enrichRoutingDecisionWithPinEconomics(request, enrichRoutingDecisionWithTierSelection(enrichRoutingDecisionWithContextFit(request, decision, fleet, contextFitConfig)), {
524
+ ...(fleet !== undefined ? { fleet } : {}),
525
+ ...(pinEconomics?.sessionPinner !== undefined
526
+ ? { sessionPinner: pinEconomics.sessionPinner }
527
+ : {}),
528
+ ...(pinEconomics?.saarConfig !== undefined
529
+ ? { saarConfig: pinEconomics.saarConfig }
530
+ : {}),
531
+ });
357
532
  const tierSelection = enriched.features?.tier_selection;
533
+ const breakeven = enriched.features?.breakeven;
534
+ const saar = enriched.features?.saar;
358
535
  return {
359
536
  request_id: enriched.request_id,
360
537
  selected_model_id: enriched.selected_model_id,
@@ -374,6 +551,25 @@ export function buildRoutingDecisionLogPayload(request, decision, delegate, flee
374
551
  p_success_cheap: tierSelection.p_success_cheap,
375
552
  }
376
553
  : null,
554
+ breakeven_summary: breakeven
555
+ ? {
556
+ marginal_savings: breakeven.marginal_savings,
557
+ future_cache_value: breakeven.future_cache_value,
558
+ cache_reprime_cost: breakeven.cache_reprime_cost,
559
+ decision: breakeven.decision,
560
+ breakeven_reason_code: breakeven.breakeven_reason_code,
561
+ }
562
+ : null,
563
+ saar_summary: saar
564
+ ? {
565
+ buffer_active: saar.buffer_active,
566
+ hard_lock: saar.hard_lock,
567
+ turn_index_in_session: saar.turn_index_in_session,
568
+ planning_turn_buffer: saar.planning_turn_buffer,
569
+ idle_timeout_seconds: saar.idle_timeout_seconds,
570
+ saar_reason_code: saar.saar_reason_code,
571
+ }
572
+ : null,
377
573
  delegate,
378
574
  };
379
575
  }
@@ -448,6 +644,8 @@ export class RoutingTelemetryEmitter {
448
644
  onRecord;
449
645
  fleet;
450
646
  contextFitConfig;
647
+ sessionPinner;
648
+ saarConfig;
451
649
  constructor(options) {
452
650
  this.maxEntries = options?.maxEntries ?? TELEMETRY_MAX_ENTRIES;
453
651
  this.windowMs = options?.windowMs ?? TELEMETRY_WINDOW_MS;
@@ -455,6 +653,8 @@ export class RoutingTelemetryEmitter {
455
653
  this.onRecord = options?.onRecord;
456
654
  this.fleet = options?.fleet;
457
655
  this.contextFitConfig = options?.contextFitConfig;
656
+ this.sessionPinner = options?.sessionPinner;
657
+ this.saarConfig = options?.saarConfig;
458
658
  }
459
659
  /**
460
660
  * Emit a telemetry record from a completed routing decision.
@@ -486,6 +686,15 @@ export class RoutingTelemetryEmitter {
486
686
  });
487
687
  const contextFitFields = contextFit ?? defaultContextFitTelemetry();
488
688
  const tierSelectionFields = tierSelectionTelemetryFromDecision(decision);
689
+ const pinEconomicsFields = pinEconomicsTelemetryFromInput({
690
+ request,
691
+ decision,
692
+ ...(this.fleet !== undefined ? { fleet: this.fleet } : {}),
693
+ ...(this.sessionPinner !== undefined
694
+ ? { sessionPinner: this.sessionPinner }
695
+ : {}),
696
+ ...(this.saarConfig !== undefined ? { saarConfig: this.saarConfig } : {}),
697
+ });
489
698
  const record = {
490
699
  timestamp: this.clock(),
491
700
  session_id: request.session_id,
@@ -511,6 +720,15 @@ export class RoutingTelemetryEmitter {
511
720
  p_success_cheap: tierSelectionFields.p_success_cheap,
512
721
  local_eligible_reason: tierSelectionFields.local_eligible_reason,
513
722
  tier_selection_reason_code: tierSelectionFields.tier_selection_reason_code,
723
+ marginal_savings: pinEconomicsFields.marginal_savings,
724
+ future_cache_value: pinEconomicsFields.future_cache_value,
725
+ cache_reprime_cost: pinEconomicsFields.cache_reprime_cost,
726
+ breakeven_decision: pinEconomicsFields.breakeven_decision,
727
+ breakeven_reason_code: pinEconomicsFields.breakeven_reason_code,
728
+ saar_buffer_active: pinEconomicsFields.saar_buffer_active,
729
+ saar_hard_lock: pinEconomicsFields.saar_hard_lock,
730
+ turn_index_in_session: pinEconomicsFields.turn_index_in_session,
731
+ saar_reason_code: pinEconomicsFields.saar_reason_code,
514
732
  };
515
733
  this.entries.push(record);
516
734
  this.onRecord?.(record);
@@ -1 +1 @@
1
- {"version":3,"file":"routing-telemetry.js","sourceRoot":"","sources":["../../../src/infrastructure/telemetry/routing-telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routing-telemetry.js","sourceRoot":"","sources":["../../../src/infrastructure/telemetry/routing-telemetry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-smart-router",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Auto-model router middleware for the pi.dev coding agent",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -51,7 +51,8 @@
51
51
  "scripts": {
52
52
  "build": "tsc --project tsconfig.build.json",
53
53
  "prepublishOnly": "npm run release:check",
54
- "release:check": "npm run verify:ci",
54
+ "release:check": "npm run verify:ci && npm run release:consumer-pack",
55
+ "release:consumer-pack": "bash scripts/verify-consumer-pack.sh",
55
56
  "typecheck": "tsc --noEmit",
56
57
  "test": "vitest run",
57
58
  "coverage:check": "vitest run --coverage",
@@ -86,13 +87,13 @@
86
87
  "eslint": "^8.57.1",
87
88
  "typescript": "^5.8.3",
88
89
  "@vitest/coverage-v8": "^3.2.3",
89
- "vitest": "^3.2.3",
90
- "yaml": "^2.9.0"
90
+ "vitest": "^3.2.3"
91
91
  },
92
92
  "dependencies": {
93
93
  "@earendil-works/pi-ai": "^0.80.3",
94
94
  "@huggingface/transformers": "^4.2.0",
95
95
  "better-sqlite3": "^12.11.1",
96
+ "yaml": "^2.9.0",
96
97
  "zod": "^4.4.3"
97
98
  },
98
99
  "allowScripts": {
@@ -13,11 +13,12 @@
13
13
  * - MUST emit no RoutingTelemetry with upstream cost (routing_latency_ms only)
14
14
  */
15
15
 
16
- import type { ModelProfile, RoutingDecision, RoutingRequest, Message } from '../../domain/types/index.js';
16
+ import type { ModelProfile, RoutingDecision, RoutingRequest, Message, SaarConfig } from '../../domain/types/index.js';
17
17
  import { RoutingRequestSchema } from '../../domain/types/schemas.js';
18
18
  import { RouterPipeline } from '../../domain/pipeline/router-pipeline.js';
19
19
  import { safeCloudDefault } from '../../domain/pipeline/safe-default.js';
20
20
  import type { ClusterMatcher } from '../../domain/matching/cluster-matcher.js';
21
+ import type { SessionPinner } from '../../domain/pinning/session-pinner.js';
21
22
  import { enrichRoutingDecisionForExplain } from '../../infrastructure/telemetry/routing-telemetry.js';
22
23
 
23
24
  // ─── Result types ─────────────────────────────────────────────────────────────
@@ -50,6 +51,8 @@ export interface ExplainHandlerDeps {
50
51
  readonly fleet: readonly ModelProfile[];
51
52
  readonly pipeline: RouterPipeline;
52
53
  readonly clusterMatcher?: ClusterMatcher;
54
+ readonly sessionPinner?: SessionPinner;
55
+ readonly saarConfig?: SaarConfig;
53
56
  }
54
57
 
55
58
  // ─── Handler factory ──────────────────────────────────────────────────────────
@@ -61,7 +64,14 @@ export interface ExplainHandlerDeps {
61
64
  * session pin state and stage ordering are identical.
62
65
  */
63
66
  export function createExplainHandler(deps: ExplainHandlerDeps) {
64
- const { fleet, pipeline, clusterMatcher } = deps;
67
+ const { fleet, pipeline, clusterMatcher, sessionPinner, saarConfig } = deps;
68
+
69
+ const explainEnrichmentOptions = {
70
+ fleet,
71
+ ...(clusterMatcher !== undefined ? { clusterMatcher } : {}),
72
+ ...(sessionPinner !== undefined ? { sessionPinner } : {}),
73
+ ...(saarConfig !== undefined ? { saarConfig } : {}),
74
+ };
65
75
 
66
76
  return async function explain(rawBody: unknown): Promise<ExplainResult> {
67
77
  const parsed = RoutingRequestSchema.safeParse(rawBody);
@@ -85,10 +95,7 @@ export function createExplainHandler(deps: ExplainHandlerDeps) {
85
95
  const decision = await pipeline.route(request);
86
96
  return {
87
97
  status: 200,
88
- body: await enrichRoutingDecisionForExplain(request, decision, {
89
- fleet,
90
- ...(clusterMatcher !== undefined ? { clusterMatcher } : {}),
91
- }),
98
+ body: await enrichRoutingDecisionForExplain(request, decision, explainEnrichmentOptions),
92
99
  };
93
100
  } catch {
94
101
  const fallbackModel = safeCloudDefault(fleet);
@@ -103,10 +110,7 @@ export function createExplainHandler(deps: ExplainHandlerDeps) {
103
110
  };
104
111
  return {
105
112
  status: 503,
106
- body: await enrichRoutingDecisionForExplain(request, decision, {
107
- fleet,
108
- ...(clusterMatcher !== undefined ? { clusterMatcher } : {}),
109
- }),
113
+ body: await enrichRoutingDecisionForExplain(request, decision, explainEnrichmentOptions),
110
114
  };
111
115
  }
112
116
  };
@@ -3,9 +3,25 @@
3
3
  * Values sourced from specs/001-build-smart-router/data-model.md § Configuration (Operator).
4
4
  */
5
5
 
6
- import type { OperatorConfig } from '../domain/types/schemas.js';
6
+ import {
7
+ DEFAULT_SAAR_CONFIG,
8
+ resolveSaarConfigFromEnv,
9
+ type OperatorConfig,
10
+ } from '../domain/types/schemas.js';
7
11
  import { DEFAULT_LOW_INTENSITY_WEIGHTS } from '../domain/routing/tier-features.js';
8
12
 
13
+ export { DEFAULT_SAAR_CONFIG, resolveSaarConfigFromEnv } from '../domain/types/schemas.js';
14
+
15
+ /** Merge operator env overrides onto defaults (SAAR section only today). */
16
+ export function resolveOperatorConfigFromEnv(
17
+ base: OperatorConfig = DEFAULT_OPERATOR_CONFIG,
18
+ ): OperatorConfig {
19
+ return {
20
+ ...base,
21
+ saar: resolveSaarConfigFromEnv(base.saar),
22
+ };
23
+ }
24
+
9
25
  export const DEFAULT_OPERATOR_CONFIG: Readonly<OperatorConfig> = {
10
26
  frugality: {
11
27
  lambda_cost: 0.5,
@@ -32,4 +48,5 @@ export const DEFAULT_OPERATOR_CONFIG: Readonly<OperatorConfig> = {
32
48
  low_threshold: 0.35,
33
49
  p_success_alpha: 0.5,
34
50
  },
51
+ saar: DEFAULT_SAAR_CONFIG,
35
52
  } as const;
@@ -19,10 +19,71 @@ import type { ExecutionModel } from './execution-ledger.js';
19
19
  export const VIRTUAL_ROUTER_PROVIDER = 'smart-router' as const;
20
20
  export const VIRTUAL_ROUTER_MODEL_ID = 'auto' as const;
21
21
 
22
+ /**
23
+ * Google Gemini bypass sentinel for tool-call replay when no signature was captured.
24
+ *
25
+ * Semantic value (Google API / pi#1829): `skip_thought_signature_validator`.
26
+ * Wire format (@earendil-works/pi-ai@0.80.3 google-shared): TYPE_BYTES — base64
27
+ * only. Plain string fails `isValidThoughtSignature`, so pi-ai strips it before
28
+ * the request leaves the client. We store/send the base64 encoding of the literal
29
+ * sentinel string so both Google validation and pi-ai serialization accept it.
30
+ *
31
+ * @see https://ai.google.dev/gemini-api/docs/thought-signatures
32
+ */
33
+ export const GEMINI_SKIP_THOUGHT_SIGNATURE_SENTINEL =
34
+ 'c2tpcF90aG91Z2h0X3NpZ25hdHVyZV92YWxpZGF0b3I=' as const;
35
+
36
+ const GOOGLE_DELEGATION_APIS = new Set<Api>(['google-generative-ai', 'google-vertex']);
37
+
38
+ const GOOGLE_ORIGIN_PROVIDER_ALIASES = new Set([
39
+ 'google',
40
+ 'google-gemini',
41
+ 'google-generative-ai',
42
+ 'gemini',
43
+ ]);
44
+
22
45
  export function isVirtualRouterIdentity(provider: string, modelId: string): boolean {
23
46
  return provider === VIRTUAL_ROUTER_PROVIDER && modelId === VIRTUAL_ROUTER_MODEL_ID;
24
47
  }
25
48
 
49
+ export function isGoogleDelegationTarget<TApi extends Api>(model: Model<TApi>): boolean {
50
+ if (!GOOGLE_DELEGATION_APIS.has(model.api)) {
51
+ return false;
52
+ }
53
+
54
+ const provider = model.provider.trim().toLowerCase();
55
+ if (GOOGLE_ORIGIN_PROVIDER_ALIASES.has(provider)) {
56
+ return true;
57
+ }
58
+
59
+ if (provider.includes('google') || provider.includes('gemini')) {
60
+ return true;
61
+ }
62
+
63
+ return provider === 'cursor' && /gemini/i.test(model.id);
64
+ }
65
+
66
+ export function isGoogleOriginAssistantMessage(message: AssistantMessage): boolean {
67
+ if (isVirtualRouterIdentity(message.provider, message.model)) {
68
+ return true;
69
+ }
70
+
71
+ if (GOOGLE_DELEGATION_APIS.has(message.api)) {
72
+ return true;
73
+ }
74
+
75
+ const provider = message.provider.trim().toLowerCase();
76
+ if (GOOGLE_ORIGIN_PROVIDER_ALIASES.has(provider)) {
77
+ return true;
78
+ }
79
+
80
+ if (provider.includes('google') || provider.includes('gemini')) {
81
+ return true;
82
+ }
83
+
84
+ return provider === 'cursor' && /gemini/i.test(message.model);
85
+ }
86
+
26
87
  export function hasReplaySensitiveState(messages: readonly Message[]): boolean {
27
88
  for (const message of messages) {
28
89
  if (message.role !== 'assistant') {
@@ -68,6 +129,28 @@ function rewriteAssistantIdentity(
68
129
  };
69
130
  }
70
131
 
132
+ function repairGoogleOriginAssistantMessage(
133
+ message: AssistantMessage,
134
+ targetExecution: ExecutionModel,
135
+ ): AssistantMessage {
136
+ const content = message.content.map((block) => {
137
+ if (block.type !== 'toolCall') {
138
+ return block;
139
+ }
140
+
141
+ if (block.thoughtSignature && block.thoughtSignature.length > 0) {
142
+ return block;
143
+ }
144
+
145
+ return {
146
+ ...block,
147
+ thoughtSignature: GEMINI_SKIP_THOUGHT_SIGNATURE_SENTINEL,
148
+ };
149
+ });
150
+
151
+ return rewriteAssistantIdentity({ ...message, content }, targetExecution);
152
+ }
153
+
71
154
  export interface NormalizeDelegationContextOptions {
72
155
  readonly virtualProvider?: typeof VIRTUAL_ROUTER_PROVIDER;
73
156
  readonly sessionExecution?: ExecutionModel | null;
@@ -109,3 +192,44 @@ export function normalizeDelegationContext<TApi extends Api>(
109
192
 
110
193
  return { ...context, messages };
111
194
  }
195
+
196
+ /**
197
+ * Repair Gemini tool-call replay for cross-model Google delegation.
198
+ *
199
+ * Call after {@link normalizeDelegationContext}. Aligns Google-origin assistant
200
+ * identity to the delegation target and injects the thought-signature sentinel
201
+ * when tool calls lack a captured signature.
202
+ */
203
+ export function repairGeminiReplayContext<TApi extends Api>(
204
+ context: Context,
205
+ targetModel: Model<TApi>,
206
+ sessionExecution?: ExecutionModel | null,
207
+ ): Context {
208
+ // Accepted for SP-128 call-site symmetry with normalizeDelegationContext; identity
209
+ // always aligns to the delegation target so pi-ai isSameModel matches targetModel.
210
+ void sessionExecution;
211
+
212
+ if (!isGoogleDelegationTarget(targetModel)) {
213
+ return context;
214
+ }
215
+
216
+ const targetExecution: ExecutionModel = {
217
+ provider: targetModel.provider,
218
+ api: targetModel.api,
219
+ id: targetModel.id,
220
+ };
221
+
222
+ const messages = context.messages.map((message) => {
223
+ if (message.role !== 'assistant') {
224
+ return message;
225
+ }
226
+
227
+ if (!isGoogleOriginAssistantMessage(message)) {
228
+ return message;
229
+ }
230
+
231
+ return repairGoogleOriginAssistantMessage(message, targetExecution);
232
+ });
233
+
234
+ return { ...context, messages };
235
+ }