pi-smart-router 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.pi/extensions/smart-router/command-formatters.ts +167 -0
- package/.pi/extensions/smart-router/commands.ts +242 -0
- package/.pi/extensions/smart-router/dataset-export.ts +142 -0
- package/.pi/extensions/smart-router/delegate-stream.ts +105 -0
- package/.pi/extensions/smart-router/delegation-runtime.ts +355 -0
- package/.pi/extensions/smart-router/extension-setup.ts +115 -0
- package/.pi/extensions/smart-router/fleet-bootstrap.ts +244 -0
- package/.pi/extensions/smart-router/index.ts +115 -0
- package/.pi/extensions/smart-router/package.json +3 -0
- package/.pi/extensions/smart-router/pi-model-scope.ts +55 -0
- package/.pi/extensions/smart-router/pricing-lifecycle.ts +43 -0
- package/.pi/extensions/smart-router/route-and-delegate.ts +562 -0
- package/.pi/extensions/smart-router/routing-context.ts +171 -0
- package/.pi/extensions/smart-router/routing-outcomes.ts +44 -0
- package/.pi/extensions/smart-router/session-lifecycle.ts +140 -0
- package/.pi/extensions/smart-router/stream-delegation.ts +75 -0
- package/.pi/extensions/smart-router/types.ts +90 -0
- package/.pi/extensions/smart-router/utils.ts +58 -0
- package/README.md +593 -0
- package/bin/pi-smart-router.mjs +79 -0
- package/config/.gitkeep +0 -0
- package/config/hydra-projection-weights.json.example +1169 -0
- package/config/models.yaml.example +58 -0
- package/config/p-success-weights.json.example +19 -0
- package/config/routing-calibration.json.example +1605 -0
- package/config/routing-centroids.json.example +1570 -0
- package/config/routing-clusters.yaml.example +41 -0
- package/data/contrib/example.json +25 -0
- package/dist/api/explain/router-explain.d.ts +47 -0
- package/dist/api/explain/router-explain.d.ts.map +1 -0
- package/dist/api/explain/router-explain.js +101 -0
- package/dist/api/explain/router-explain.js.map +1 -0
- package/dist/api/middleware/pi-router-middleware.d.ts +86 -0
- package/dist/api/middleware/pi-router-middleware.d.ts.map +1 -0
- package/dist/api/middleware/pi-router-middleware.js +83 -0
- package/dist/api/middleware/pi-router-middleware.js.map +1 -0
- package/dist/cli/smart-router-cli.d.ts +85 -0
- package/dist/cli/smart-router-cli.d.ts.map +1 -0
- package/dist/cli/smart-router-cli.js +293 -0
- package/dist/cli/smart-router-cli.js.map +1 -0
- package/dist/config/defaults.d.ts +7 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +33 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/models-loader.d.ts +22 -0
- package/dist/config/models-loader.d.ts.map +1 -0
- package/dist/config/models-loader.js +51 -0
- package/dist/config/models-loader.js.map +1 -0
- package/dist/config/pi-model-mapper.d.ts +40 -0
- package/dist/config/pi-model-mapper.d.ts.map +1 -0
- package/dist/config/pi-model-mapper.js +216 -0
- package/dist/config/pi-model-mapper.js.map +1 -0
- package/dist/config/routing-clusters-loader.d.ts +35 -0
- package/dist/config/routing-clusters-loader.d.ts.map +1 -0
- package/dist/config/routing-clusters-loader.js +100 -0
- package/dist/config/routing-clusters-loader.js.map +1 -0
- package/dist/domain/delegation/delegation-context.d.ts +23 -0
- package/dist/domain/delegation/delegation-context.d.ts.map +1 -0
- package/dist/domain/delegation/delegation-context.js +73 -0
- package/dist/domain/delegation/delegation-context.js.map +1 -0
- package/dist/domain/delegation/execution-ledger.d.ts +19 -0
- package/dist/domain/delegation/execution-ledger.d.ts.map +1 -0
- package/dist/domain/delegation/execution-ledger.js +23 -0
- package/dist/domain/delegation/execution-ledger.js.map +1 -0
- package/dist/domain/delegation/output-headroom.d.ts +39 -0
- package/dist/domain/delegation/output-headroom.d.ts.map +1 -0
- package/dist/domain/delegation/output-headroom.js +78 -0
- package/dist/domain/delegation/output-headroom.js.map +1 -0
- package/dist/domain/matching/cluster-matcher.d.ts +69 -0
- package/dist/domain/matching/cluster-matcher.d.ts.map +1 -0
- package/dist/domain/matching/cluster-matcher.js +294 -0
- package/dist/domain/matching/cluster-matcher.js.map +1 -0
- package/dist/domain/matching/embedding-provider.d.ts +21 -0
- package/dist/domain/matching/embedding-provider.d.ts.map +1 -0
- package/dist/domain/matching/embedding-provider.js +42 -0
- package/dist/domain/matching/embedding-provider.js.map +1 -0
- package/dist/domain/matching/hydra-input.d.ts +18 -0
- package/dist/domain/matching/hydra-input.d.ts.map +1 -0
- package/dist/domain/matching/hydra-input.js +40 -0
- package/dist/domain/matching/hydra-input.js.map +1 -0
- package/dist/domain/matching/hydra-matcher.d.ts +103 -0
- package/dist/domain/matching/hydra-matcher.d.ts.map +1 -0
- package/dist/domain/matching/hydra-matcher.js +275 -0
- package/dist/domain/matching/hydra-matcher.js.map +1 -0
- package/dist/domain/pinning/cache-economics.d.ts +53 -0
- package/dist/domain/pinning/cache-economics.d.ts.map +1 -0
- package/dist/domain/pinning/cache-economics.js +72 -0
- package/dist/domain/pinning/cache-economics.js.map +1 -0
- package/dist/domain/pinning/loop-escalation.d.ts +41 -0
- package/dist/domain/pinning/loop-escalation.d.ts.map +1 -0
- package/dist/domain/pinning/loop-escalation.js +137 -0
- package/dist/domain/pinning/loop-escalation.js.map +1 -0
- package/dist/domain/pinning/session-pinner.d.ts +81 -0
- package/dist/domain/pinning/session-pinner.d.ts.map +1 -0
- package/dist/domain/pinning/session-pinner.js +237 -0
- package/dist/domain/pinning/session-pinner.js.map +1 -0
- package/dist/domain/pinning/sub-route-policy.d.ts +41 -0
- package/dist/domain/pinning/sub-route-policy.d.ts.map +1 -0
- package/dist/domain/pinning/sub-route-policy.js +72 -0
- package/dist/domain/pinning/sub-route-policy.js.map +1 -0
- package/dist/domain/pipeline/router-pipeline.d.ts +180 -0
- package/dist/domain/pipeline/router-pipeline.d.ts.map +1 -0
- package/dist/domain/pipeline/router-pipeline.js +807 -0
- package/dist/domain/pipeline/router-pipeline.js.map +1 -0
- package/dist/domain/pipeline/safe-default.d.ts +25 -0
- package/dist/domain/pipeline/safe-default.d.ts.map +1 -0
- package/dist/domain/pipeline/safe-default.js +41 -0
- package/dist/domain/pipeline/safe-default.js.map +1 -0
- package/dist/domain/refactor-guardrails.d.ts +48 -0
- package/dist/domain/refactor-guardrails.d.ts.map +1 -0
- package/dist/domain/refactor-guardrails.js +129 -0
- package/dist/domain/refactor-guardrails.js.map +1 -0
- package/dist/domain/routing/context-fit.d.ts +53 -0
- package/dist/domain/routing/context-fit.d.ts.map +1 -0
- package/dist/domain/routing/context-fit.js +142 -0
- package/dist/domain/routing/context-fit.js.map +1 -0
- package/dist/domain/routing/expected-cost.d.ts +63 -0
- package/dist/domain/routing/expected-cost.d.ts.map +1 -0
- package/dist/domain/routing/expected-cost.js +177 -0
- package/dist/domain/routing/expected-cost.js.map +1 -0
- package/dist/domain/routing/p-success-classifier.d.ts +130 -0
- package/dist/domain/routing/p-success-classifier.d.ts.map +1 -0
- package/dist/domain/routing/p-success-classifier.js +350 -0
- package/dist/domain/routing/p-success-classifier.js.map +1 -0
- package/dist/domain/routing/tier-features.d.ts +70 -0
- package/dist/domain/routing/tier-features.d.ts.map +1 -0
- package/dist/domain/routing/tier-features.js +174 -0
- package/dist/domain/routing/tier-features.js.map +1 -0
- package/dist/domain/routing/tool-history-guard.d.ts +32 -0
- package/dist/domain/routing/tool-history-guard.d.ts.map +1 -0
- package/dist/domain/routing/tool-history-guard.js +110 -0
- package/dist/domain/routing/tool-history-guard.js.map +1 -0
- package/dist/domain/scoring/multi-objective.d.ts +48 -0
- package/dist/domain/scoring/multi-objective.d.ts.map +1 -0
- package/dist/domain/scoring/multi-objective.js +116 -0
- package/dist/domain/scoring/multi-objective.js.map +1 -0
- package/dist/domain/triage/triage-engine.d.ts +43 -0
- package/dist/domain/triage/triage-engine.d.ts.map +1 -0
- package/dist/domain/triage/triage-engine.js +317 -0
- package/dist/domain/triage/triage-engine.js.map +1 -0
- package/dist/domain/triage/turn-envelope.d.ts +17 -0
- package/dist/domain/triage/turn-envelope.d.ts.map +1 -0
- package/dist/domain/triage/turn-envelope.js +81 -0
- package/dist/domain/triage/turn-envelope.js.map +1 -0
- package/dist/domain/types/entities.d.ts +303 -0
- package/dist/domain/types/entities.d.ts.map +1 -0
- package/dist/domain/types/entities.js +6 -0
- package/dist/domain/types/entities.js.map +1 -0
- package/dist/domain/types/index.d.ts +4 -0
- package/dist/domain/types/index.d.ts.map +1 -0
- package/dist/domain/types/index.js +2 -0
- package/dist/domain/types/index.js.map +1 -0
- package/dist/domain/types/schemas.d.ts +346 -0
- package/dist/domain/types/schemas.d.ts.map +1 -0
- package/dist/domain/types/schemas.js +241 -0
- package/dist/domain/types/schemas.js.map +1 -0
- package/dist/domain/types/store-port.d.ts +44 -0
- package/dist/domain/types/store-port.d.ts.map +1 -0
- package/dist/domain/types/store-port.js +6 -0
- package/dist/domain/types/store-port.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/gemini-provider.d.ts +28 -0
- package/dist/infra/gemini-provider.d.ts.map +1 -0
- package/dist/infra/gemini-provider.js +112 -0
- package/dist/infra/gemini-provider.js.map +1 -0
- package/dist/infra/telemetry.d.ts +51 -0
- package/dist/infra/telemetry.d.ts.map +1 -0
- package/dist/infra/telemetry.js +100 -0
- package/dist/infra/telemetry.js.map +1 -0
- package/dist/infrastructure/delegation/provider-error.d.ts +44 -0
- package/dist/infrastructure/delegation/provider-error.d.ts.map +1 -0
- package/dist/infrastructure/delegation/provider-error.js +179 -0
- package/dist/infrastructure/delegation/provider-error.js.map +1 -0
- package/dist/infrastructure/gateway/circuit-breaker.d.ts +68 -0
- package/dist/infrastructure/gateway/circuit-breaker.d.ts.map +1 -0
- package/dist/infrastructure/gateway/circuit-breaker.js +150 -0
- package/dist/infrastructure/gateway/circuit-breaker.js.map +1 -0
- package/dist/infrastructure/gateway/gateway-dispatch.d.ts +138 -0
- package/dist/infrastructure/gateway/gateway-dispatch.d.ts.map +1 -0
- package/dist/infrastructure/gateway/gateway-dispatch.js +308 -0
- package/dist/infrastructure/gateway/gateway-dispatch.js.map +1 -0
- package/dist/infrastructure/hardware/hardware-probe.d.ts +32 -0
- package/dist/infrastructure/hardware/hardware-probe.d.ts.map +1 -0
- package/dist/infrastructure/hardware/hardware-probe.js +199 -0
- package/dist/infrastructure/hardware/hardware-probe.js.map +1 -0
- package/dist/infrastructure/local/local-zero-tier.d.ts +47 -0
- package/dist/infrastructure/local/local-zero-tier.d.ts.map +1 -0
- package/dist/infrastructure/local/local-zero-tier.js +92 -0
- package/dist/infrastructure/local/local-zero-tier.js.map +1 -0
- package/dist/infrastructure/persistence/memory-store.d.ts +31 -0
- package/dist/infrastructure/persistence/memory-store.d.ts.map +1 -0
- package/dist/infrastructure/persistence/memory-store.js +87 -0
- package/dist/infrastructure/persistence/memory-store.js.map +1 -0
- package/dist/infrastructure/persistence/sqlite-store.d.ts +81 -0
- package/dist/infrastructure/persistence/sqlite-store.d.ts.map +1 -0
- package/dist/infrastructure/persistence/sqlite-store.js +658 -0
- package/dist/infrastructure/persistence/sqlite-store.js.map +1 -0
- package/dist/infrastructure/pricing/litellm-fetch.d.ts +46 -0
- package/dist/infrastructure/pricing/litellm-fetch.d.ts.map +1 -0
- package/dist/infrastructure/pricing/litellm-fetch.js +145 -0
- package/dist/infrastructure/pricing/litellm-fetch.js.map +1 -0
- package/dist/infrastructure/pricing/price-broker.d.ts +56 -0
- package/dist/infrastructure/pricing/price-broker.d.ts.map +1 -0
- package/dist/infrastructure/pricing/price-broker.js +133 -0
- package/dist/infrastructure/pricing/price-broker.js.map +1 -0
- package/dist/infrastructure/pricing/pricing-monitor.d.ts +27 -0
- package/dist/infrastructure/pricing/pricing-monitor.d.ts.map +1 -0
- package/dist/infrastructure/pricing/pricing-monitor.js +46 -0
- package/dist/infrastructure/pricing/pricing-monitor.js.map +1 -0
- package/dist/infrastructure/telemetry/dataset-limits.d.ts +13 -0
- package/dist/infrastructure/telemetry/dataset-limits.d.ts.map +1 -0
- package/dist/infrastructure/telemetry/dataset-limits.js +28 -0
- package/dist/infrastructure/telemetry/dataset-limits.js.map +1 -0
- package/dist/infrastructure/telemetry/dataset-recorder.d.ts +48 -0
- package/dist/infrastructure/telemetry/dataset-recorder.d.ts.map +1 -0
- package/dist/infrastructure/telemetry/dataset-recorder.js +154 -0
- package/dist/infrastructure/telemetry/dataset-recorder.js.map +1 -0
- package/dist/infrastructure/telemetry/outcome-limits.d.ts +12 -0
- package/dist/infrastructure/telemetry/outcome-limits.d.ts.map +1 -0
- package/dist/infrastructure/telemetry/outcome-limits.js +28 -0
- package/dist/infrastructure/telemetry/outcome-limits.js.map +1 -0
- package/dist/infrastructure/telemetry/outcome-recorder.d.ts +29 -0
- package/dist/infrastructure/telemetry/outcome-recorder.d.ts.map +1 -0
- package/dist/infrastructure/telemetry/outcome-recorder.js +49 -0
- package/dist/infrastructure/telemetry/outcome-recorder.js.map +1 -0
- package/dist/infrastructure/telemetry/routing-telemetry.d.ts +115 -0
- package/dist/infrastructure/telemetry/routing-telemetry.d.ts.map +1 -0
- package/dist/infrastructure/telemetry/routing-telemetry.js +529 -0
- package/dist/infrastructure/telemetry/routing-telemetry.js.map +1 -0
- package/dist/infrastructure/telemetry/telemetry-limits.d.ts +16 -0
- package/dist/infrastructure/telemetry/telemetry-limits.d.ts.map +1 -0
- package/dist/infrastructure/telemetry/telemetry-limits.js +35 -0
- package/dist/infrastructure/telemetry/telemetry-limits.js.map +1 -0
- package/package.json +110 -0
- package/skills/router-backlog-orchestrator/SKILL.md +183 -0
- package/skills/router-backlog-orchestrator/references/github-router-issue-template.md +78 -0
- package/skills/router-backlog-orchestrator/references/packet-from-issue.md +99 -0
- package/skills/router-backlog-orchestrator/references/prioritization-rubric.md +65 -0
- package/skills/router-backlog-orchestrator/scripts/collect-backlog.sh +44 -0
- package/specs/001-build-smart-router/contracts/telemetry-contrib.schema.json +151 -0
- package/src/api/explain/.gitkeep +0 -0
- package/src/api/explain/router-explain.ts +146 -0
- package/src/api/middleware/.gitkeep +0 -0
- package/src/api/middleware/pi-router-middleware.ts +169 -0
- package/src/cli/smart-router-cli.ts +436 -0
- package/src/config/.gitkeep +0 -0
- package/src/config/defaults.ts +35 -0
- package/src/config/models-loader.ts +68 -0
- package/src/config/pi-model-mapper.ts +285 -0
- package/src/config/routing-clusters-loader.ts +148 -0
- package/src/domain/delegation/delegation-context.ts +111 -0
- package/src/domain/delegation/execution-ledger.ts +34 -0
- package/src/domain/delegation/output-headroom.ts +131 -0
- package/src/domain/matching/.gitkeep +0 -0
- package/src/domain/matching/cluster-matcher.ts +474 -0
- package/src/domain/matching/embedding-provider.ts +79 -0
- package/src/domain/matching/hydra-input.ts +53 -0
- package/src/domain/matching/hydra-matcher.ts +454 -0
- package/src/domain/pinning/.gitkeep +0 -0
- package/src/domain/pinning/cache-economics.ts +128 -0
- package/src/domain/pinning/loop-escalation.ts +181 -0
- package/src/domain/pinning/session-pinner.ts +388 -0
- package/src/domain/pinning/sub-route-policy.ts +119 -0
- package/src/domain/pipeline/.gitkeep +0 -0
- package/src/domain/pipeline/router-pipeline.ts +1139 -0
- package/src/domain/pipeline/safe-default.ts +70 -0
- package/src/domain/refactor-guardrails.ts +202 -0
- package/src/domain/routing/context-fit.ts +221 -0
- package/src/domain/routing/expected-cost.ts +320 -0
- package/src/domain/routing/p-success-classifier.ts +511 -0
- package/src/domain/routing/tier-features.ts +290 -0
- package/src/domain/routing/tool-history-guard.ts +159 -0
- package/src/domain/scoring/.gitkeep +0 -0
- package/src/domain/scoring/multi-objective.ts +175 -0
- package/src/domain/triage/.gitkeep +0 -0
- package/src/domain/triage/triage-engine.ts +373 -0
- package/src/domain/triage/turn-envelope.ts +104 -0
- package/src/domain/types/.gitkeep +0 -0
- package/src/domain/types/entities.ts +384 -0
- package/src/domain/types/index.ts +41 -0
- package/src/domain/types/schemas.ts +289 -0
- package/src/domain/types/store-port.ts +59 -0
- package/src/index.ts +103 -0
- package/src/infra/gemini-provider.ts +142 -0
- package/src/infra/telemetry.ts +169 -0
- package/src/infrastructure/delegation/provider-error.ts +251 -0
- package/src/infrastructure/gateway/.gitkeep +0 -0
- package/src/infrastructure/gateway/circuit-breaker.ts +196 -0
- package/src/infrastructure/gateway/gateway-dispatch.ts +444 -0
- package/src/infrastructure/hardware/.gitkeep +0 -0
- package/src/infrastructure/hardware/hardware-probe.ts +276 -0
- package/src/infrastructure/local/.gitkeep +0 -0
- package/src/infrastructure/local/local-zero-tier.ts +151 -0
- package/src/infrastructure/persistence/.gitkeep +0 -0
- package/src/infrastructure/persistence/memory-store.ts +122 -0
- package/src/infrastructure/persistence/sqlite-store.ts +900 -0
- package/src/infrastructure/pricing/.gitkeep +0 -0
- package/src/infrastructure/pricing/litellm-fetch.ts +215 -0
- package/src/infrastructure/pricing/price-broker.ts +183 -0
- package/src/infrastructure/pricing/pricing-monitor.ts +65 -0
- package/src/infrastructure/telemetry/.gitkeep +0 -0
- package/src/infrastructure/telemetry/dataset-limits.ts +39 -0
- package/src/infrastructure/telemetry/dataset-recorder.ts +215 -0
- package/src/infrastructure/telemetry/outcome-limits.ts +42 -0
- package/src/infrastructure/telemetry/outcome-recorder.ts +118 -0
- package/src/infrastructure/telemetry/routing-telemetry.ts +824 -0
- package/src/infrastructure/telemetry/telemetry-limits.ts +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router-pipeline.js","sourceRoot":"","sources":["../../../src/domain/pipeline/router-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe cloud default — FR-022 fallback selector.
|
|
3
|
+
*
|
|
4
|
+
* Selects the first healthy economical-cloud model from the fleet,
|
|
5
|
+
* falling back to frontier-cloud only when no economical model is available.
|
|
6
|
+
* Never throws; returns undefined only when the fleet is completely empty or unhealthy.
|
|
7
|
+
*
|
|
8
|
+
* SP-095: when a request is provided, only models that fit context are eligible.
|
|
9
|
+
*/
|
|
10
|
+
import type { ModelProfile, RoutingRequest } from '../types/index.js';
|
|
11
|
+
import { type ContextFitConfig } from '../routing/context-fit.js';
|
|
12
|
+
export interface SafeCloudDefaultOptions {
|
|
13
|
+
readonly request?: RoutingRequest;
|
|
14
|
+
readonly contextFitConfig?: ContextFitConfig;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Select a safe cloud default model from the fleet catalog.
|
|
18
|
+
*
|
|
19
|
+
* Priority order:
|
|
20
|
+
* 1. First healthy economical-cloud model (context-fit aware when request provided)
|
|
21
|
+
* 2. First healthy frontier-cloud model (fallback)
|
|
22
|
+
* 3. undefined (no viable model)
|
|
23
|
+
*/
|
|
24
|
+
export declare function safeCloudDefault(models: readonly ModelProfile[], options?: SafeCloudDefaultOptions): ModelProfile | undefined;
|
|
25
|
+
//# sourceMappingURL=safe-default.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-default.d.ts","sourceRoot":"","sources":["../../../src/domain/pipeline/safe-default.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CAC9C;AAoBD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,OAAO,CAAC,EAAE,uBAAuB,GAChC,YAAY,GAAG,SAAS,CAkB1B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe cloud default — FR-022 fallback selector.
|
|
3
|
+
*
|
|
4
|
+
* Selects the first healthy economical-cloud model from the fleet,
|
|
5
|
+
* falling back to frontier-cloud only when no economical model is available.
|
|
6
|
+
* Never throws; returns undefined only when the fleet is completely empty or unhealthy.
|
|
7
|
+
*
|
|
8
|
+
* SP-095: when a request is provided, only models that fit context are eligible.
|
|
9
|
+
*/
|
|
10
|
+
import { modelFitsContext, resolveSafetyMargin, } from '../routing/context-fit.js';
|
|
11
|
+
function isHealthy(model) {
|
|
12
|
+
return model.healthy !== false;
|
|
13
|
+
}
|
|
14
|
+
function fitsWhenRequired(model, request, config) {
|
|
15
|
+
if (!request) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
const estimatedInputTokens = request.estimated_input_tokens ?? request.prompt_text.length;
|
|
19
|
+
return modelFitsContext(model, estimatedInputTokens, resolveSafetyMargin(config));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Select a safe cloud default model from the fleet catalog.
|
|
23
|
+
*
|
|
24
|
+
* Priority order:
|
|
25
|
+
* 1. First healthy economical-cloud model (context-fit aware when request provided)
|
|
26
|
+
* 2. First healthy frontier-cloud model (fallback)
|
|
27
|
+
* 3. undefined (no viable model)
|
|
28
|
+
*/
|
|
29
|
+
export function safeCloudDefault(models, options) {
|
|
30
|
+
const request = options?.request;
|
|
31
|
+
const config = options?.contextFitConfig;
|
|
32
|
+
const economical = models.find((model) => model.tier === 'economical-cloud' &&
|
|
33
|
+
isHealthy(model) &&
|
|
34
|
+
fitsWhenRequired(model, request, config));
|
|
35
|
+
if (economical)
|
|
36
|
+
return economical;
|
|
37
|
+
return models.find((model) => model.tier === 'frontier-cloud' &&
|
|
38
|
+
isHealthy(model) &&
|
|
39
|
+
fitsWhenRequired(model, request, config));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=safe-default.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-default.js","sourceRoot":"","sources":["../../../src/domain/pipeline/safe-default.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GAEpB,MAAM,2BAA2B,CAAC;AAOnC,SAAS,SAAS,CAAC,KAAmB;IACpC,OAAO,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC;AACjC,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAmB,EACnB,OAAmC,EACnC,MAAoC;IAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,oBAAoB,GACxB,OAAO,CAAC,sBAAsB,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;IAC/D,OAAO,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;AACpF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA+B,EAC/B,OAAiC;IAEjC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;IACjC,MAAM,MAAM,GAAG,OAAO,EAAE,gBAAgB,CAAC;IAEzC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAC5B,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,KAAK,kBAAkB;QACjC,SAAS,CAAC,KAAK,CAAC;QAChB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAC3C,CAAC;IACF,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,OAAO,MAAM,CAAC,IAAI,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,KAAK,gBAAgB;QAC/B,SAAS,CAAC,KAAK,CAAC;QAChB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Epic refactor guardrails — SP-083.
|
|
3
|
+
*
|
|
4
|
+
* Detects large refactoring workloads and emits spine-decomposition,
|
|
5
|
+
* test-gate, and frontier-routing policies. Inert for normal requests —
|
|
6
|
+
* callers treat `is_epic: false` as a no-op.
|
|
7
|
+
*/
|
|
8
|
+
import type { RoutingRequest, Tier } from './types/index.js';
|
|
9
|
+
export declare const EPIC_REFACTOR_DETECTED: "epic_refactor_detected";
|
|
10
|
+
export declare const EPIC_REFACTOR_NOT_DETECTED: "epic_refactor_not_detected";
|
|
11
|
+
export declare const EPIC_REFACTOR_RECOMMENDED_TIER: Tier;
|
|
12
|
+
export type EpicRefactorGuardrailKind = 'spine_decomposition' | 'test_gate' | 'frontier_routing';
|
|
13
|
+
export declare const EPIC_REFACTOR_GUARDRAILS: readonly EpicRefactorGuardrailKind[];
|
|
14
|
+
export interface EpicRefactorScopeSignals {
|
|
15
|
+
readonly epic_keyword_hits: number;
|
|
16
|
+
readonly file_path_mentions: number;
|
|
17
|
+
readonly cyclomatic_score: number;
|
|
18
|
+
readonly planning_turn: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface EpicRefactorGuardrailEvaluation {
|
|
21
|
+
readonly is_epic: boolean;
|
|
22
|
+
readonly reason_code: typeof EPIC_REFACTOR_DETECTED | typeof EPIC_REFACTOR_NOT_DETECTED;
|
|
23
|
+
readonly guardrails: readonly EpicRefactorGuardrailKind[];
|
|
24
|
+
readonly recommended_tier?: Tier;
|
|
25
|
+
readonly signals: EpicRefactorScopeSignals;
|
|
26
|
+
}
|
|
27
|
+
export interface EpicRefactorGuardrailConfig {
|
|
28
|
+
/** Minimum epic-keyword hits when paired with other scope signals. Default 1. */
|
|
29
|
+
readonly minKeywordHits?: number;
|
|
30
|
+
/** File-path mentions required with a keyword hit. Default 3. */
|
|
31
|
+
readonly minFilePathMentions?: number;
|
|
32
|
+
/** Cyclomatic score required with planning turn + keyword. Default 15. */
|
|
33
|
+
readonly minCyclomaticScore?: number;
|
|
34
|
+
/** Keyword hits that alone qualify as epic. Default 2. */
|
|
35
|
+
readonly standaloneKeywordHits?: number;
|
|
36
|
+
}
|
|
37
|
+
export declare function collectEpicRefactorScopeSignals(request: RoutingRequest): EpicRefactorScopeSignals;
|
|
38
|
+
/**
|
|
39
|
+
* Returns true when scope signals indicate an epic refactor workload.
|
|
40
|
+
* Conservative thresholds keep normal routing and small edits unaffected.
|
|
41
|
+
*/
|
|
42
|
+
export declare function isEpicRefactorScope(signals: EpicRefactorScopeSignals, config?: EpicRefactorGuardrailConfig): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Evaluate epic-refactor guardrails for a routing request.
|
|
45
|
+
* Non-epic requests return empty guardrails and no tier override.
|
|
46
|
+
*/
|
|
47
|
+
export declare function evaluateEpicRefactorGuardrails(request: RoutingRequest, config?: EpicRefactorGuardrailConfig): EpicRefactorGuardrailEvaluation;
|
|
48
|
+
//# sourceMappingURL=refactor-guardrails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refactor-guardrails.d.ts","sourceRoot":"","sources":["../../src/domain/refactor-guardrails.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,sBAAsB,EAAG,wBAAiC,CAAC;AACxE,eAAO,MAAM,0BAA0B,EAAG,4BAAqC,CAAC;AAEhF,eAAO,MAAM,8BAA8B,EAAE,IAAuB,CAAC;AAErE,MAAM,MAAM,yBAAyB,GACjC,qBAAqB,GACrB,WAAW,GACX,kBAAkB,CAAC;AAEvB,eAAO,MAAM,wBAAwB,EAAE,SAAS,yBAAyB,EAIxE,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAChB,OAAO,sBAAsB,GAC7B,OAAO,0BAA0B,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC1D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;CAC5C;AAED,MAAM,WAAW,2BAA2B;IAC1C,iFAAiF;IACjF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,iEAAiE;IACjE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC;AA6ED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,cAAc,GACtB,wBAAwB,CAQ1B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,wBAAwB,EACjC,MAAM,CAAC,EAAE,2BAA2B,GACnC,OAAO,CAuBT;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,2BAA2B,GACnC,+BAA+B,CAoBjC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Epic refactor guardrails — SP-083.
|
|
3
|
+
*
|
|
4
|
+
* Detects large refactoring workloads and emits spine-decomposition,
|
|
5
|
+
* test-gate, and frontier-routing policies. Inert for normal requests —
|
|
6
|
+
* callers treat `is_epic: false` as a no-op.
|
|
7
|
+
*/
|
|
8
|
+
import { cyclomaticScan } from './triage/triage-engine.js';
|
|
9
|
+
export const EPIC_REFACTOR_DETECTED = 'epic_refactor_detected';
|
|
10
|
+
export const EPIC_REFACTOR_NOT_DETECTED = 'epic_refactor_not_detected';
|
|
11
|
+
export const EPIC_REFACTOR_RECOMMENDED_TIER = 'frontier-cloud';
|
|
12
|
+
export const EPIC_REFACTOR_GUARDRAILS = [
|
|
13
|
+
'spine_decomposition',
|
|
14
|
+
'test_gate',
|
|
15
|
+
'frontier_routing',
|
|
16
|
+
];
|
|
17
|
+
const DEFAULT_CONFIG = {
|
|
18
|
+
minKeywordHits: 1,
|
|
19
|
+
minFilePathMentions: 3,
|
|
20
|
+
minCyclomaticScore: 15,
|
|
21
|
+
standaloneKeywordHits: 2,
|
|
22
|
+
};
|
|
23
|
+
const EPIC_KEYWORDS = [
|
|
24
|
+
'epic refactor',
|
|
25
|
+
'god file',
|
|
26
|
+
'god object',
|
|
27
|
+
'god class',
|
|
28
|
+
'decompose',
|
|
29
|
+
'decomposition',
|
|
30
|
+
'large refactor',
|
|
31
|
+
'large-scale refactor',
|
|
32
|
+
'mass refactor',
|
|
33
|
+
'restructure',
|
|
34
|
+
'split module',
|
|
35
|
+
'extract module',
|
|
36
|
+
'break up',
|
|
37
|
+
'monolith',
|
|
38
|
+
'cross-cutting',
|
|
39
|
+
'wide-reaching',
|
|
40
|
+
'rename across',
|
|
41
|
+
'move across',
|
|
42
|
+
'refactor entire',
|
|
43
|
+
'refactor whole',
|
|
44
|
+
];
|
|
45
|
+
const STRONG_EPIC_PHRASES = [
|
|
46
|
+
/\bepic\s+refactor\b/i,
|
|
47
|
+
/\bgod\s+(?:file|object|class)\b/i,
|
|
48
|
+
/\bdecompos(?:e|ition)\b/i,
|
|
49
|
+
];
|
|
50
|
+
const RE_FILE_PATH = /\b(?:[\w@.-]+\/)+[\w@.-]+\.(?:ts|tsx|js|jsx|mjs|cjs|py|go|rs|java|kt|swift|rb|php|cs|vue|svelte)\b/gi;
|
|
51
|
+
const RE_BARE_FILE = /\b[\w@.-]+\.(?:ts|tsx|js|jsx|mjs|cjs|py|go|rs|java|kt|swift|rb|php|cs|vue|svelte)\b/gi;
|
|
52
|
+
function countKeywordHits(text) {
|
|
53
|
+
const lower = text.toLowerCase();
|
|
54
|
+
let hits = 0;
|
|
55
|
+
for (const keyword of EPIC_KEYWORDS) {
|
|
56
|
+
if (lower.includes(keyword)) {
|
|
57
|
+
hits += 1;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
for (const pattern of STRONG_EPIC_PHRASES) {
|
|
61
|
+
if (pattern.test(text)) {
|
|
62
|
+
hits += 1;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return hits;
|
|
66
|
+
}
|
|
67
|
+
function countFilePathMentions(text) {
|
|
68
|
+
const paths = new Set();
|
|
69
|
+
for (const match of text.matchAll(RE_FILE_PATH)) {
|
|
70
|
+
paths.add(match[0].toLowerCase());
|
|
71
|
+
}
|
|
72
|
+
for (const match of text.matchAll(RE_BARE_FILE)) {
|
|
73
|
+
paths.add(match[0].toLowerCase());
|
|
74
|
+
}
|
|
75
|
+
return paths.size;
|
|
76
|
+
}
|
|
77
|
+
export function collectEpicRefactorScopeSignals(request) {
|
|
78
|
+
const text = request.prompt_text;
|
|
79
|
+
return {
|
|
80
|
+
epic_keyword_hits: countKeywordHits(text),
|
|
81
|
+
file_path_mentions: countFilePathMentions(text),
|
|
82
|
+
cyclomatic_score: cyclomaticScan(text),
|
|
83
|
+
planning_turn: request.turn_type === 'planning',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Returns true when scope signals indicate an epic refactor workload.
|
|
88
|
+
* Conservative thresholds keep normal routing and small edits unaffected.
|
|
89
|
+
*/
|
|
90
|
+
export function isEpicRefactorScope(signals, config) {
|
|
91
|
+
const resolved = { ...DEFAULT_CONFIG, ...config };
|
|
92
|
+
if (signals.epic_keyword_hits >= resolved.standaloneKeywordHits) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
if (signals.epic_keyword_hits >= resolved.minKeywordHits &&
|
|
96
|
+
signals.file_path_mentions >= resolved.minFilePathMentions) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
if (signals.planning_turn &&
|
|
100
|
+
signals.epic_keyword_hits >= resolved.minKeywordHits &&
|
|
101
|
+
signals.cyclomatic_score >= resolved.minCyclomaticScore) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Evaluate epic-refactor guardrails for a routing request.
|
|
108
|
+
* Non-epic requests return empty guardrails and no tier override.
|
|
109
|
+
*/
|
|
110
|
+
export function evaluateEpicRefactorGuardrails(request, config) {
|
|
111
|
+
const signals = collectEpicRefactorScopeSignals(request);
|
|
112
|
+
const is_epic = isEpicRefactorScope(signals, config);
|
|
113
|
+
if (!is_epic) {
|
|
114
|
+
return {
|
|
115
|
+
is_epic: false,
|
|
116
|
+
reason_code: EPIC_REFACTOR_NOT_DETECTED,
|
|
117
|
+
guardrails: [],
|
|
118
|
+
signals,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
is_epic: true,
|
|
123
|
+
reason_code: EPIC_REFACTOR_DETECTED,
|
|
124
|
+
guardrails: EPIC_REFACTOR_GUARDRAILS,
|
|
125
|
+
recommended_tier: EPIC_REFACTOR_RECOMMENDED_TIER,
|
|
126
|
+
signals,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=refactor-guardrails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refactor-guardrails.js","sourceRoot":"","sources":["../../src/domain/refactor-guardrails.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context-fit gate — SP-093, overflow fallback — SP-095.
|
|
3
|
+
*
|
|
4
|
+
* Filters fleet models whose context window cannot accommodate the estimated
|
|
5
|
+
* input token count (with a configurable safety margin).
|
|
6
|
+
*/
|
|
7
|
+
import type { CandidateScore, ModelProfile, RoutingRequest } from '../types/index.js';
|
|
8
|
+
export declare const CONTEXT_FIT_EXCEEDED: "context_fit_exceeded";
|
|
9
|
+
export declare const CONTEXT_OVERFLOW_SAME_PROVIDER_FALLBACK: "context_overflow_same_provider_fallback";
|
|
10
|
+
export declare const CONTEXT_OVERFLOW_FRONTIER_FALLBACK: "context_overflow_frontier_fallback";
|
|
11
|
+
export declare const CONTEXT_OVERFLOW_NO_FIT: "context_overflow_no_fit";
|
|
12
|
+
export declare const DEFAULT_CONTEXT_FIT_SAFETY_MARGIN = 0.9;
|
|
13
|
+
export declare const CONTEXT_FIT_SAFETY_MARGIN_ENV = "CONTEXT_FIT_SAFETY_MARGIN";
|
|
14
|
+
export interface ContextFitConfig {
|
|
15
|
+
/** Fraction of max_input_tokens treated as usable (default 0.90). */
|
|
16
|
+
readonly safetyMargin?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ContextFitFilterResult {
|
|
19
|
+
readonly effectiveFleet: readonly ModelProfile[];
|
|
20
|
+
readonly rejected: readonly CandidateScore[];
|
|
21
|
+
}
|
|
22
|
+
export interface ContextOverflowFallbackResult {
|
|
23
|
+
readonly kind: 'selected' | 'no_fit';
|
|
24
|
+
readonly model?: ModelProfile;
|
|
25
|
+
readonly reasonCode: typeof CONTEXT_OVERFLOW_SAME_PROVIDER_FALLBACK | typeof CONTEXT_OVERFLOW_FRONTIER_FALLBACK | typeof CONTEXT_OVERFLOW_NO_FIT;
|
|
26
|
+
}
|
|
27
|
+
export declare function resolveSafetyMargin(config?: ContextFitConfig): number;
|
|
28
|
+
export declare function modelFitsContext(profile: ModelProfile, estimatedInputTokens: number, safetyMargin: number): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Select the model with the largest declared context window.
|
|
31
|
+
* Models without declared limits sort last (treated as unknown / unbounded).
|
|
32
|
+
*/
|
|
33
|
+
export declare function selectLargestWindowModel(candidates: readonly ModelProfile[]): ModelProfile | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* SP-095: escalate when economical/pinned models cannot fit context.
|
|
36
|
+
*
|
|
37
|
+
* 1. Same-provider largest-fit model
|
|
38
|
+
* 2. Cheapest frontier model that fits
|
|
39
|
+
* 3. Structured no-fit (never dispatch undersized)
|
|
40
|
+
*/
|
|
41
|
+
export declare function resolveContextOverflowFallback(fleet: readonly ModelProfile[], request: RoutingRequest, preferredProvider: string | null, config?: ContextFitConfig): ContextOverflowFallbackResult;
|
|
42
|
+
/**
|
|
43
|
+
* True when economical models were rejected for context fit and none remain
|
|
44
|
+
* in the post-filter fleet.
|
|
45
|
+
*/
|
|
46
|
+
export declare function needsContextOverflowFallback(activeFleet: readonly ModelProfile[], rejected: readonly CandidateScore[], fullFleet: readonly ModelProfile[]): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Remove fleet entries whose max_input_tokens cannot fit estimated_input_tokens
|
|
49
|
+
* at the given safety margin. Honors `force_model_id` by leaving fleet unchanged.
|
|
50
|
+
* Models without declared limits are retained (unknown window).
|
|
51
|
+
*/
|
|
52
|
+
export declare function filterFleetByContextFit(fleet: readonly ModelProfile[], request: RoutingRequest, config?: ContextFitConfig): ContextFitFilterResult;
|
|
53
|
+
//# sourceMappingURL=context-fit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-fit.d.ts","sourceRoot":"","sources":["../../../src/domain/routing/context-fit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,cAAc,EACf,MAAM,mBAAmB,CAAC;AAG3B,eAAO,MAAM,oBAAoB,EAAG,sBAA+B,CAAC;AAEpE,eAAO,MAAM,uCAAuC,EAClD,yCAAkD,CAAC;AACrD,eAAO,MAAM,kCAAkC,EAC7C,oCAA6C,CAAC;AAChD,eAAO,MAAM,uBAAuB,EAAG,yBAAkC,CAAC;AAE1E,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAErD,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,EAAE,SAAS,YAAY,EAAE,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,EACf,OAAO,uCAAuC,GAC9C,OAAO,kCAAkC,GACzC,OAAO,uBAAuB,CAAC;CACpC;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAgBrE;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,oBAAoB,EAAE,MAAM,EAC5B,YAAY,EAAE,MAAM,GACnB,OAAO,CAQT;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,SAAS,YAAY,EAAE,GAClC,YAAY,GAAG,SAAS,CAc1B;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,OAAO,EAAE,cAAc,EACvB,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,MAAM,CAAC,EAAE,gBAAgB,GACxB,6BAA6B,CAoC/B;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,SAAS,YAAY,EAAE,EACpC,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,SAAS,EAAE,SAAS,YAAY,EAAE,GACjC,OAAO,CAgBT;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,gBAAgB,GACxB,sBAAsB,CA4BxB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context-fit gate — SP-093, overflow fallback — SP-095.
|
|
3
|
+
*
|
|
4
|
+
* Filters fleet models whose context window cannot accommodate the estimated
|
|
5
|
+
* input token count (with a configurable safety margin).
|
|
6
|
+
*/
|
|
7
|
+
import { selectLowestCostModel } from '../pinning/sub-route-policy.js';
|
|
8
|
+
export const CONTEXT_FIT_EXCEEDED = 'context_fit_exceeded';
|
|
9
|
+
export const CONTEXT_OVERFLOW_SAME_PROVIDER_FALLBACK = 'context_overflow_same_provider_fallback';
|
|
10
|
+
export const CONTEXT_OVERFLOW_FRONTIER_FALLBACK = 'context_overflow_frontier_fallback';
|
|
11
|
+
export const CONTEXT_OVERFLOW_NO_FIT = 'context_overflow_no_fit';
|
|
12
|
+
export const DEFAULT_CONTEXT_FIT_SAFETY_MARGIN = 0.9;
|
|
13
|
+
export const CONTEXT_FIT_SAFETY_MARGIN_ENV = 'CONTEXT_FIT_SAFETY_MARGIN';
|
|
14
|
+
function resolveEstimatedInputTokens(request) {
|
|
15
|
+
return request.estimated_input_tokens ?? request.prompt_text.length;
|
|
16
|
+
}
|
|
17
|
+
export function resolveSafetyMargin(config) {
|
|
18
|
+
if (config?.safetyMargin !== undefined) {
|
|
19
|
+
return config.safetyMargin;
|
|
20
|
+
}
|
|
21
|
+
const raw = process.env[CONTEXT_FIT_SAFETY_MARGIN_ENV];
|
|
22
|
+
if (raw === undefined || raw.trim() === '') {
|
|
23
|
+
return DEFAULT_CONTEXT_FIT_SAFETY_MARGIN;
|
|
24
|
+
}
|
|
25
|
+
const parsed = Number(raw);
|
|
26
|
+
if (!Number.isFinite(parsed) || parsed <= 0 || parsed > 1) {
|
|
27
|
+
return DEFAULT_CONTEXT_FIT_SAFETY_MARGIN;
|
|
28
|
+
}
|
|
29
|
+
return parsed;
|
|
30
|
+
}
|
|
31
|
+
export function modelFitsContext(profile, estimatedInputTokens, safetyMargin) {
|
|
32
|
+
const maxInput = profile.limits?.max_input_tokens;
|
|
33
|
+
if (maxInput === undefined) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
const effectiveLimit = Math.floor(maxInput * safetyMargin);
|
|
37
|
+
return estimatedInputTokens <= effectiveLimit;
|
|
38
|
+
}
|
|
39
|
+
function isHealthy(model) {
|
|
40
|
+
return model.healthy !== false;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Select the model with the largest declared context window.
|
|
44
|
+
* Models without declared limits sort last (treated as unknown / unbounded).
|
|
45
|
+
*/
|
|
46
|
+
export function selectLargestWindowModel(candidates) {
|
|
47
|
+
let best;
|
|
48
|
+
let bestWindow = -1;
|
|
49
|
+
for (const model of candidates) {
|
|
50
|
+
if (!isHealthy(model))
|
|
51
|
+
continue;
|
|
52
|
+
const window = model.limits?.max_input_tokens ?? Number.MAX_SAFE_INTEGER;
|
|
53
|
+
if (window > bestWindow) {
|
|
54
|
+
bestWindow = window;
|
|
55
|
+
best = model;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return best;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* SP-095: escalate when economical/pinned models cannot fit context.
|
|
62
|
+
*
|
|
63
|
+
* 1. Same-provider largest-fit model
|
|
64
|
+
* 2. Cheapest frontier model that fits
|
|
65
|
+
* 3. Structured no-fit (never dispatch undersized)
|
|
66
|
+
*/
|
|
67
|
+
export function resolveContextOverflowFallback(fleet, request, preferredProvider, config) {
|
|
68
|
+
const estimatedInputTokens = resolveEstimatedInputTokens(request);
|
|
69
|
+
const safetyMargin = resolveSafetyMargin(config);
|
|
70
|
+
const fits = (model) => modelFitsContext(model, estimatedInputTokens, safetyMargin);
|
|
71
|
+
if (preferredProvider) {
|
|
72
|
+
const sameProviderCandidates = fleet.filter((model) => model.provider === preferredProvider && fits(model));
|
|
73
|
+
const sameProviderModel = selectLargestWindowModel(sameProviderCandidates);
|
|
74
|
+
if (sameProviderModel) {
|
|
75
|
+
return {
|
|
76
|
+
kind: 'selected',
|
|
77
|
+
model: sameProviderModel,
|
|
78
|
+
reasonCode: CONTEXT_OVERFLOW_SAME_PROVIDER_FALLBACK,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const frontierCandidates = fleet.filter((model) => model.tier === 'frontier-cloud' && fits(model));
|
|
83
|
+
const frontierModel = selectLowestCostModel(frontierCandidates);
|
|
84
|
+
if (frontierModel) {
|
|
85
|
+
return {
|
|
86
|
+
kind: 'selected',
|
|
87
|
+
model: frontierModel,
|
|
88
|
+
reasonCode: CONTEXT_OVERFLOW_FRONTIER_FALLBACK,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
kind: 'no_fit',
|
|
93
|
+
reasonCode: CONTEXT_OVERFLOW_NO_FIT,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* True when economical models were rejected for context fit and none remain
|
|
98
|
+
* in the post-filter fleet.
|
|
99
|
+
*/
|
|
100
|
+
export function needsContextOverflowFallback(activeFleet, rejected, fullFleet) {
|
|
101
|
+
if (rejected.length === 0) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
const hasActiveEconomical = activeFleet.some((model) => model.tier === 'economical-cloud' && isHealthy(model));
|
|
105
|
+
if (hasActiveEconomical) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
return rejected.some((candidate) => {
|
|
109
|
+
const profile = fullFleet.find((model) => model.id === candidate.model_id);
|
|
110
|
+
return profile?.tier === 'economical-cloud';
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Remove fleet entries whose max_input_tokens cannot fit estimated_input_tokens
|
|
115
|
+
* at the given safety margin. Honors `force_model_id` by leaving fleet unchanged.
|
|
116
|
+
* Models without declared limits are retained (unknown window).
|
|
117
|
+
*/
|
|
118
|
+
export function filterFleetByContextFit(fleet, request, config) {
|
|
119
|
+
if (request.force_model_id) {
|
|
120
|
+
return { effectiveFleet: fleet, rejected: [] };
|
|
121
|
+
}
|
|
122
|
+
const estimatedInputTokens = resolveEstimatedInputTokens(request);
|
|
123
|
+
const safetyMargin = resolveSafetyMargin(config);
|
|
124
|
+
const effectiveFleet = [];
|
|
125
|
+
const rejected = [];
|
|
126
|
+
for (const profile of fleet) {
|
|
127
|
+
if (modelFitsContext(profile, estimatedInputTokens, safetyMargin)) {
|
|
128
|
+
effectiveFleet.push(profile);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const maxInput = profile.limits.max_input_tokens;
|
|
132
|
+
const effectiveLimit = Math.floor(maxInput * safetyMargin);
|
|
133
|
+
rejected.push({
|
|
134
|
+
model_id: profile.id,
|
|
135
|
+
score: 0,
|
|
136
|
+
shortfall: estimatedInputTokens - effectiveLimit,
|
|
137
|
+
rejected_reason: CONTEXT_FIT_EXCEEDED,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return { effectiveFleet, rejected };
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=context-fit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-fit.js","sourceRoot":"","sources":["../../../src/domain/routing/context-fit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expected-cost tier selection — SP-106, #68.
|
|
3
|
+
*
|
|
4
|
+
* E[cost_T] = P(success | T) × directCost(T)
|
|
5
|
+
* + (1 - P(success | T)) × E[cost_escalation]
|
|
6
|
+
*
|
|
7
|
+
* Selects the tier minimizing adjusted expected cost subject to context-fit,
|
|
8
|
+
* local readiness, and pin/cache economics (FR-008).
|
|
9
|
+
*/
|
|
10
|
+
import type { ModelProfile, PriceCatalog, SessionPin, Tier } from '../types/index.js';
|
|
11
|
+
import { type CacheEconomicsConfig } from '../pinning/cache-economics.js';
|
|
12
|
+
/** Frontier-tier success probability when evaluating escalation terminal cost. */
|
|
13
|
+
export declare const FRONTIER_P_SUCCESS = 1;
|
|
14
|
+
/** Minimum per-1M-token spread required before economical tiers compete. */
|
|
15
|
+
export declare const MIN_PRICE_DELTA_PER_1M = 0.25;
|
|
16
|
+
export interface ExpectedCostBreakdown {
|
|
17
|
+
readonly tier: Tier;
|
|
18
|
+
readonly pSuccess: number;
|
|
19
|
+
readonly costPer1M: number;
|
|
20
|
+
readonly directCostUsd: number;
|
|
21
|
+
readonly escalationCostUsd: number;
|
|
22
|
+
readonly expectedCostUsd: number;
|
|
23
|
+
readonly adjustedExpectedCostUsd: number;
|
|
24
|
+
}
|
|
25
|
+
export interface SelectTierByExpectedCostInput {
|
|
26
|
+
readonly fleet: readonly ModelProfile[];
|
|
27
|
+
readonly priceCatalog: PriceCatalog | null;
|
|
28
|
+
readonly estTokens: number;
|
|
29
|
+
readonly pSuccessCheap: number;
|
|
30
|
+
/** Cost-quality tradeoff in [0, 1]; higher favors economical tiers (SP-106). */
|
|
31
|
+
readonly alpha: number;
|
|
32
|
+
readonly localZeroReady: boolean;
|
|
33
|
+
readonly pinnedModel?: ModelProfile;
|
|
34
|
+
readonly sessionPin?: SessionPin;
|
|
35
|
+
readonly cacheEconomicsConfig?: CacheEconomicsConfig;
|
|
36
|
+
}
|
|
37
|
+
export interface SelectTierByExpectedCostResult {
|
|
38
|
+
readonly tierHint: Tier | null;
|
|
39
|
+
readonly reasonCode: string;
|
|
40
|
+
readonly tierCosts: readonly ExpectedCostBreakdown[];
|
|
41
|
+
readonly rationale: string;
|
|
42
|
+
readonly blockedByPinEconomics: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Resolve representative per-1M cost for a tier using subscription-aware pricing (SP-096).
|
|
46
|
+
*/
|
|
47
|
+
export declare function resolveTierCostPer1M(tier: Tier, fleet: readonly ModelProfile[], priceCatalog: PriceCatalog | null): number;
|
|
48
|
+
/**
|
|
49
|
+
* Compute per-tier expected routing cost under uncertainty.
|
|
50
|
+
*
|
|
51
|
+
* `priceCatalog` drives subscription virtual cost resolution; pass `costPer1M`
|
|
52
|
+
* via options when the caller already resolved tier pricing.
|
|
53
|
+
*/
|
|
54
|
+
export declare function computeExpectedCost(tier: Tier, pSuccess: number, priceCatalog: PriceCatalog | null, estTokens: number, escalationCostUsd: number, options?: {
|
|
55
|
+
readonly alpha?: number;
|
|
56
|
+
readonly costPer1M?: number;
|
|
57
|
+
readonly fleet?: readonly ModelProfile[];
|
|
58
|
+
}): ExpectedCostBreakdown;
|
|
59
|
+
/**
|
|
60
|
+
* Compare expected cost across context-fit-viable tiers and return argmin tier hint.
|
|
61
|
+
*/
|
|
62
|
+
export declare function selectTierByExpectedCost(input: SelectTierByExpectedCostInput): SelectTierByExpectedCostResult;
|
|
63
|
+
//# sourceMappingURL=expected-cost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expected-cost.d.ts","sourceRoot":"","sources":["../../../src/domain/routing/expected-cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,IAAI,EACL,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,+BAA+B,CAAC;AAGvC,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CACtD;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;CACzC;AAmBD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,YAAY,EAAE,YAAY,GAAG,IAAI,GAChC,MAAM,CAMR;AAmBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,YAAY,GAAG,IAAI,EACjC,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAC1C,GACA,qBAAqB,CAyBvB;AAwED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,6BAA6B,GACnC,8BAA8B,CA2FhC"}
|