pi-smart-router 1.0.0 → 1.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.
- package/.pi/extensions/smart-router/command-formatters.ts +2 -1
- package/.pi/extensions/smart-router/commands.ts +2 -1
- package/.pi/extensions/smart-router/types.ts +7 -1
- package/README.md +96 -6
- package/bin/pi-smart-router.mjs +6 -4
- package/config/benchmark-profiles.json +2 -2
- package/config/operator-config.json.example +7 -0
- package/config/p-success-weights.json +19 -12
- package/config/routing-calibration.json +157 -24
- package/data/contrib/example.json +5 -2
- package/dist/cli/smart-router-cli.d.ts +21 -3
- package/dist/cli/smart-router-cli.d.ts.map +1 -1
- package/dist/cli/smart-router-cli.js +56 -11
- package/dist/cli/smart-router-cli.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +3 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/domain/matching/embedding-provider.d.ts +63 -1
- package/dist/domain/matching/embedding-provider.d.ts.map +1 -1
- package/dist/domain/matching/embedding-provider.js +117 -0
- package/dist/domain/matching/embedding-provider.js.map +1 -1
- package/dist/domain/matching/encoder-gate.d.ts +73 -0
- package/dist/domain/matching/encoder-gate.d.ts.map +1 -0
- package/dist/domain/matching/encoder-gate.js +66 -0
- package/dist/domain/matching/encoder-gate.js.map +1 -0
- package/dist/domain/matching/hydra-matcher.d.ts +45 -3
- package/dist/domain/matching/hydra-matcher.d.ts.map +1 -1
- package/dist/domain/matching/hydra-matcher.js +48 -3
- package/dist/domain/matching/hydra-matcher.js.map +1 -1
- package/dist/domain/pipeline/low-intensity-stage.d.ts.map +1 -1
- package/dist/domain/pipeline/low-intensity-stage.js +20 -2
- package/dist/domain/pipeline/low-intensity-stage.js.map +1 -1
- package/dist/domain/pipeline/router-pipeline.d.ts +5 -0
- package/dist/domain/pipeline/router-pipeline.d.ts.map +1 -1
- package/dist/domain/pipeline/router-pipeline.js +16 -0
- package/dist/domain/pipeline/router-pipeline.js.map +1 -1
- package/dist/domain/pipeline/triage-stage.d.ts +1 -0
- package/dist/domain/pipeline/triage-stage.d.ts.map +1 -1
- package/dist/domain/pipeline/triage-stage.js +21 -1
- package/dist/domain/pipeline/triage-stage.js.map +1 -1
- package/dist/domain/routing/tier-features.d.ts +3 -1
- package/dist/domain/routing/tier-features.d.ts.map +1 -1
- package/dist/domain/routing/tier-features.js +3 -2
- package/dist/domain/routing/tier-features.js.map +1 -1
- package/dist/domain/triage/triage-engine.d.ts +10 -1
- package/dist/domain/triage/triage-engine.d.ts.map +1 -1
- package/dist/domain/triage/triage-engine.js +19 -2
- package/dist/domain/triage/triage-engine.js.map +1 -1
- package/dist/domain/triage/triage-thresholds.d.ts +45 -0
- package/dist/domain/triage/triage-thresholds.d.ts.map +1 -0
- package/dist/domain/triage/triage-thresholds.js +107 -0
- package/dist/domain/triage/triage-thresholds.js.map +1 -0
- package/dist/domain/types/entities.d.ts +29 -0
- package/dist/domain/types/entities.d.ts.map +1 -1
- package/dist/domain/types/schemas.d.ts +65 -7
- package/dist/domain/types/schemas.d.ts.map +1 -1
- package/dist/domain/types/schemas.js +47 -3
- package/dist/domain/types/schemas.js.map +1 -1
- package/dist/infra/telemetry.d.ts +8 -0
- package/dist/infra/telemetry.d.ts.map +1 -1
- package/dist/infra/telemetry.js +10 -0
- package/dist/infra/telemetry.js.map +1 -1
- package/dist/infrastructure/persistence/sqlite-store.d.ts.map +1 -1
- package/dist/infrastructure/persistence/sqlite-store.js +48 -3
- package/dist/infrastructure/persistence/sqlite-store.js.map +1 -1
- package/dist/infrastructure/telemetry/dataset-recorder.d.ts.map +1 -1
- package/dist/infrastructure/telemetry/dataset-recorder.js +3 -0
- package/dist/infrastructure/telemetry/dataset-recorder.js.map +1 -1
- package/dist/infrastructure/telemetry/routing-telemetry.d.ts +1 -1
- package/dist/infrastructure/telemetry/routing-telemetry.d.ts.map +1 -1
- package/dist/infrastructure/telemetry/routing-telemetry.js +1 -1
- package/dist/infrastructure/telemetry/routing-telemetry.js.map +1 -1
- package/dist/infrastructure/telemetry/telemetry-scalar-fields.d.ts +4 -0
- package/dist/infrastructure/telemetry/telemetry-scalar-fields.d.ts.map +1 -1
- package/dist/infrastructure/telemetry/telemetry-scalar-fields.js +4 -0
- package/dist/infrastructure/telemetry/telemetry-scalar-fields.js.map +1 -1
- package/package.json +1 -1
- package/specs/001-build-smart-router/contracts/telemetry-contrib.schema.json +23 -1
- package/src/cli/smart-router-cli.ts +68 -9
- package/src/config/defaults.ts +3 -0
- package/src/domain/matching/embedding-provider.ts +205 -1
- package/src/domain/matching/encoder-gate.ts +121 -0
- package/src/domain/matching/hydra-matcher.ts +106 -6
- package/src/domain/pipeline/low-intensity-stage.ts +21 -2
- package/src/domain/pipeline/router-pipeline.ts +22 -0
- package/src/domain/pipeline/triage-stage.ts +23 -1
- package/src/domain/routing/tier-features.ts +3 -1
- package/src/domain/triage/triage-engine.ts +28 -2
- package/src/domain/triage/triage-thresholds.ts +153 -0
- package/src/domain/types/entities.ts +29 -0
- package/src/domain/types/schemas.ts +57 -7
- package/src/infra/telemetry.ts +14 -0
- package/src/infrastructure/persistence/sqlite-store.ts +61 -3
- package/src/infrastructure/telemetry/dataset-recorder.ts +3 -0
- package/src/infrastructure/telemetry/routing-telemetry.ts +1 -0
- package/src/infrastructure/telemetry/telemetry-scalar-fields.ts +5 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart-router-cli.d.ts","sourceRoot":"","sources":["../../src/cli/smart-router-cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"smart-router-cli.d.ts","sourceRoot":"","sources":["../../src/cli/smart-router-cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAOpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,eAAO,MAAM,gBAAgB,EAAG,OAAgB,CAAC;AACjD,eAAO,MAAM,gCAAgC,EAAG,0BAAmC,CAAC;AAEpF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAG,CAAU,CAAC;AACpD,eAAO,MAAM,6BAA6B,yEAC8B,CAAC;AAEzE,eAAO,MAAM,oCAAoC,6BAA6B,CAAC;AAC/E,eAAO,MAAM,sCAAsC,QAAsB,CAAC;AAE1E,gGAAgG;AAChG,eAAO,MAAM,4BAA4B,4OAe/B,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,6BAA6B,oFAMhC,CAAC;AACX,iEAAiE;AACjE,eAAO,MAAM,qCAAqC,QAC4C,CAAC;AAE/F;;;;;GAKG;AACH,eAAO,MAAM,uCAAuC,mDAG1C,CAAC;AAEX,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,SAAkB,IAAI,qCAAqC;gBAE/C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAGpD;AAuCD,yFAAyF;AACzF,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAe3C;AAED,sFAAsF;AACtF,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClD;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED,gEAAgE;AAChE,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOxE;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;CACrC,CAkCA;AAUD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,kBAAkB,CA4BhF;AAoBD,yFAAyF;AACzF,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,oBAAoB,EAC5B,QAAQ,GAAE,SAAS,oBAAoB,EAAO,EAC9C,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4DzB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAC1C,MAAM,CAKR;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAC1C,MAAM,CAKR;AAED,wBAAgB,qCAAqC,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAErF;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAMpF;AAED,sEAAsE;AACtE,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGzB;AAED,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,SAAS,oBAAoB,EAAE,EAC/C,cAAc,GAAE,SAAS,oBAAoB,EAAO,EACpD,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAS3B;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,6BAA6B,EAClC,OAAO,CAAC,EAAE,IAAI,CAAC,6BAA6B,EAAE,WAAW,CAAC,GACzD,OAAO,CAAC,4BAA4B,CAAC,CAuBvC;AAED,wFAAwF;AACxF,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,EACzC,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiCzB;AAED,eAAO,MAAM,yBAAyB;;;CAG5B,CAAC"}
|
|
@@ -9,7 +9,7 @@ import { join } from 'node:path';
|
|
|
9
9
|
import { attachOutcomeLabelsToExport, deriveSuccessLabel, indexOutcomesByRequestId, } from '../domain/routing/p-success-classifier.js';
|
|
10
10
|
import { DATASET_MAX_ENTRIES } from '../infrastructure/telemetry/dataset-limits.js';
|
|
11
11
|
import { loadOrCreateDatasetPepper } from '../infrastructure/telemetry/dataset-recorder.js';
|
|
12
|
-
import { hashSessionIdForTelemetryExport } from '../infra/telemetry.js';
|
|
12
|
+
import { hashRequestIdForTelemetryExport, hashSessionIdForTelemetryExport, } from '../infra/telemetry.js';
|
|
13
13
|
export const UNPIN_SUBCOMMAND = 'unpin';
|
|
14
14
|
export const EXPORT_TELEMETRY_CONTRIB_COMMAND = 'export telemetry-contrib';
|
|
15
15
|
/**
|
|
@@ -48,6 +48,16 @@ export const TELEMETRY_CONTRIB_REJECT_KEYS = [
|
|
|
48
48
|
];
|
|
49
49
|
/** Mirrors SP-116 tainted key pattern for ingest-safe export. */
|
|
50
50
|
export const TELEMETRY_CONTRIB_TAINTED_KEY_PATTERN = /(?:^|_)(prompt|message|messages|content|tool_calls?|secret|password|token|api_key)(?:_|$)/i;
|
|
51
|
+
/**
|
|
52
|
+
* Privacy-safe count-only fields that the tainted pattern would otherwise
|
|
53
|
+
* reject by name (SP-285, #170). These carry integer counts — never content —
|
|
54
|
+
* so they are explicitly allowed: `prompt_length_chars` feeds the P(success)
|
|
55
|
+
* prompt_length feature; `message_count` feeds envelope-shape features.
|
|
56
|
+
*/
|
|
57
|
+
export const TELEMETRY_CONTRIB_TAINTED_KEY_ALLOWLIST = [
|
|
58
|
+
'prompt_length_chars',
|
|
59
|
+
'message_count',
|
|
60
|
+
];
|
|
51
61
|
export class TelemetryContribValidationError extends Error {
|
|
52
62
|
name = 'TelemetryContribValidationError';
|
|
53
63
|
constructor(message, options) {
|
|
@@ -69,8 +79,9 @@ function collectForbiddenContribKeys(value, path = '', found = []) {
|
|
|
69
79
|
}
|
|
70
80
|
for (const [key, nested] of Object.entries(value)) {
|
|
71
81
|
const keyPath = path ? `${path}.${key}` : key;
|
|
72
|
-
if (
|
|
73
|
-
|
|
82
|
+
if (!TELEMETRY_CONTRIB_TAINTED_KEY_ALLOWLIST.includes(key) &&
|
|
83
|
+
(TELEMETRY_CONTRIB_REJECT_KEYS.includes(key) ||
|
|
84
|
+
TELEMETRY_CONTRIB_TAINTED_KEY_PATTERN.test(key))) {
|
|
74
85
|
found.push(keyPath);
|
|
75
86
|
}
|
|
76
87
|
collectForbiddenContribKeys(nested, keyPath, found);
|
|
@@ -111,16 +122,17 @@ export function isExportTelemetryContribInvocation(args) {
|
|
|
111
122
|
}
|
|
112
123
|
export function parseExportTelemetryContribArgs(args) {
|
|
113
124
|
if (!isExportTelemetryContribInvocation(args)) {
|
|
114
|
-
throw new Error('Usage: export telemetry-contrib [--limit N]');
|
|
125
|
+
throw new Error('Usage: export telemetry-contrib [--limit N] [--embeddings]');
|
|
115
126
|
}
|
|
116
127
|
const tokens = args.trim().split(/\s+/).filter(Boolean);
|
|
117
128
|
let limit = DEFAULT_TELEMETRY_CONTRIB_EXPORT_LIMIT;
|
|
129
|
+
let includeEmbeddings = false;
|
|
118
130
|
for (let i = 2; i < tokens.length; i++) {
|
|
119
131
|
const token = tokens[i];
|
|
120
132
|
if (token === '--limit') {
|
|
121
133
|
const next = tokens[i + 1];
|
|
122
134
|
if (!next) {
|
|
123
|
-
throw new Error('Usage: export telemetry-contrib [--limit N]');
|
|
135
|
+
throw new Error('Usage: export telemetry-contrib [--limit N] [--embeddings]');
|
|
124
136
|
}
|
|
125
137
|
limit = parsePositiveLimit(next);
|
|
126
138
|
i++;
|
|
@@ -130,9 +142,13 @@ export function parseExportTelemetryContribArgs(args) {
|
|
|
130
142
|
limit = parsePositiveLimit(token.slice('--limit='.length));
|
|
131
143
|
continue;
|
|
132
144
|
}
|
|
145
|
+
if (token === '--embeddings') {
|
|
146
|
+
includeEmbeddings = true;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
133
149
|
throw new Error(`Unknown argument: ${token}`);
|
|
134
150
|
}
|
|
135
|
-
return { limit };
|
|
151
|
+
return { limit, includeEmbeddings };
|
|
136
152
|
}
|
|
137
153
|
function parsePositiveLimit(raw) {
|
|
138
154
|
const parsed = Number.parseInt(raw, 10);
|
|
@@ -182,11 +198,18 @@ function resolveSessionIdHash(record, outcomes, pepper) {
|
|
|
182
198
|
return hashSessionIdForTelemetryExport('', pepper);
|
|
183
199
|
}
|
|
184
200
|
/** Map a dataset row plus linked outcomes to a privacy-safe telemetry contrib record. */
|
|
185
|
-
export function toTelemetryContribRecord(record, outcomes = [], pepper) {
|
|
201
|
+
export function toTelemetryContribRecord(record, outcomes = [], pepper, options) {
|
|
186
202
|
const { success, outcome_signals } = deriveSuccessLabel(outcomes);
|
|
203
|
+
// SP-285 / #170: raw encoder embeddings are larger and more revealing than
|
|
204
|
+
// scalar features, so community contrib rows omit them unless the operator
|
|
205
|
+
// passes --embeddings (capture itself is a separate opt-in env var).
|
|
206
|
+
const includeEmbeddings = options?.includeEmbeddings ?? false;
|
|
187
207
|
const contrib = {
|
|
188
208
|
version: TELEMETRY_CONTRIB_VERSION,
|
|
189
209
|
timestamp: record.timestamp,
|
|
210
|
+
// SP-285 / #170: stable per-install row id — request_id is stripped below,
|
|
211
|
+
// row_id keeps aggregate dedup + reproducible training splits possible.
|
|
212
|
+
row_id: hashRequestIdForTelemetryExport(record.request_id, pepper),
|
|
190
213
|
session_id_hash: resolveSessionIdHash(record, outcomes, pepper),
|
|
191
214
|
turn_type: record.turn_type,
|
|
192
215
|
stage: record.stage,
|
|
@@ -196,6 +219,11 @@ export function toTelemetryContribRecord(record, outcomes = [], pepper) {
|
|
|
196
219
|
routing_latency_ms: record.routing_latency_ms,
|
|
197
220
|
estimated_cost_usd: record.estimated_cost_usd,
|
|
198
221
|
estimated_input_tokens: record.estimated_input_tokens,
|
|
222
|
+
// SP-285 / #170: prompt_length_chars + message_count were previously
|
|
223
|
+
// dropped on this path, starving the P(success) prompt_length feature
|
|
224
|
+
// (Sept dogfood coefficient → 0) and edit-distance proxies.
|
|
225
|
+
prompt_length_chars: record.prompt_length_chars,
|
|
226
|
+
message_count: record.message_count,
|
|
199
227
|
has_tool_context: record.has_tool_context,
|
|
200
228
|
compaction_flag: record.compaction_flag,
|
|
201
229
|
triage_verdict: record.triage_verdict,
|
|
@@ -218,6 +246,9 @@ export function toTelemetryContribRecord(record, outcomes = [], pepper) {
|
|
|
218
246
|
success_label: success,
|
|
219
247
|
outcome_signals,
|
|
220
248
|
};
|
|
249
|
+
if (includeEmbeddings && record.embedding !== null) {
|
|
250
|
+
contrib.embedding = record.embedding;
|
|
251
|
+
}
|
|
221
252
|
for (const key of TELEMETRY_CONTRIB_STRIP_KEYS) {
|
|
222
253
|
delete contrib[key];
|
|
223
254
|
}
|
|
@@ -246,11 +277,11 @@ export function validateTelemetryContribRecord(record, context) {
|
|
|
246
277
|
assertTelemetryContribRecordSafe(record, context);
|
|
247
278
|
return sanitizeTelemetryContribRecord(record);
|
|
248
279
|
}
|
|
249
|
-
export function buildTelemetryContribRecords(datasetRecords, outcomeRecords = [], pepper) {
|
|
280
|
+
export function buildTelemetryContribRecords(datasetRecords, outcomeRecords = [], pepper, options) {
|
|
250
281
|
const outcomesByRequest = indexOutcomesByRequestId(outcomeRecords);
|
|
251
282
|
return datasetRecords.map((record) => {
|
|
252
283
|
const linkedOutcomes = outcomesByRequest.get(record.request_id) ?? [];
|
|
253
|
-
const contrib = toTelemetryContribRecord(record, linkedOutcomes, pepper);
|
|
284
|
+
const contrib = toTelemetryContribRecord(record, linkedOutcomes, pepper, options);
|
|
254
285
|
validateTelemetryContribRecord(contrib, record.request_id);
|
|
255
286
|
return contrib;
|
|
256
287
|
});
|
|
@@ -262,7 +293,9 @@ export async function exportTelemetryContrib(ctx, options) {
|
|
|
262
293
|
// install but never correlatable across installs (SP-249/SP-250). Loaded
|
|
263
294
|
// lazily — no pepper file is created when there is nothing to export.
|
|
264
295
|
const pepper = datasetRecords.length > 0 ? loadOrCreateDatasetPepper(ctx.cwd) : undefined;
|
|
265
|
-
const records = buildTelemetryContribRecords(datasetRecords, outcomeRecords, pepper
|
|
296
|
+
const records = buildTelemetryContribRecords(datasetRecords, outcomeRecords, pepper, {
|
|
297
|
+
includeEmbeddings: ctx.includeEmbeddings,
|
|
298
|
+
});
|
|
266
299
|
const json = formatTelemetryContribJson(records);
|
|
267
300
|
if (records.length === 0 || options?.writeFile === false) {
|
|
268
301
|
return { path: null, recordCount: records.length, json };
|
|
@@ -275,7 +308,7 @@ export async function exportTelemetryContrib(ctx, options) {
|
|
|
275
308
|
return { path: exportPath, recordCount: records.length, json };
|
|
276
309
|
}
|
|
277
310
|
/** Join dataset export shape with outcome labels, then strip to contrib-safe fields. */
|
|
278
|
-
export function datasetExportRowToTelemetryContrib(exportRecord, outcomes, pepper) {
|
|
311
|
+
export function datasetExportRowToTelemetryContrib(exportRecord, outcomes, pepper, options) {
|
|
279
312
|
const joined = attachOutcomeLabelsToExport(exportRecord, outcomes);
|
|
280
313
|
const contrib = {
|
|
281
314
|
version: TELEMETRY_CONTRIB_VERSION,
|
|
@@ -284,6 +317,13 @@ export function datasetExportRowToTelemetryContrib(exportRecord, outcomes, peppe
|
|
|
284
317
|
for (const key of TELEMETRY_CONTRIB_STRIP_KEYS) {
|
|
285
318
|
delete contrib[key];
|
|
286
319
|
}
|
|
320
|
+
// SP-285 / #170: stable per-install row id (raw request_id stripped above).
|
|
321
|
+
if (typeof exportRecord.row_id === 'string' && exportRecord.row_id.length > 0) {
|
|
322
|
+
contrib.row_id = exportRecord.row_id;
|
|
323
|
+
}
|
|
324
|
+
else if (typeof exportRecord.request_id === 'string' && exportRecord.request_id.length > 0) {
|
|
325
|
+
contrib.row_id = hashRequestIdForTelemetryExport(exportRecord.request_id, pepper);
|
|
326
|
+
}
|
|
287
327
|
if (typeof exportRecord.session_id_hash === 'string') {
|
|
288
328
|
contrib.session_id_hash = exportRecord.session_id_hash;
|
|
289
329
|
}
|
|
@@ -291,6 +331,11 @@ export function datasetExportRowToTelemetryContrib(exportRecord, outcomes, peppe
|
|
|
291
331
|
contrib.session_id_hash = hashSessionIdForTelemetryExport(exportRecord.session_id, pepper);
|
|
292
332
|
}
|
|
293
333
|
delete contrib.session_id;
|
|
334
|
+
// SP-285 / #170: community contrib rows omit captured embeddings unless the
|
|
335
|
+
// operator explicitly opts in with --embeddings.
|
|
336
|
+
if (!(options?.includeEmbeddings ?? false)) {
|
|
337
|
+
delete contrib.embedding;
|
|
338
|
+
}
|
|
294
339
|
return validateTelemetryContribRecord(contrib);
|
|
295
340
|
}
|
|
296
341
|
export const smartRouterCliSubcommands = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart-router-cli.js","sourceRoot":"","sources":["../../src/cli/smart-router-cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"smart-router-cli.js","sourceRoot":"","sources":["../../src/cli/smart-router-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAYL,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,iCAAiC,EACjC,yBAAyB,EACzB,gCAAgC,EAChC,mBAAmB,EACnB,kCAAkC,EAClC,4BAA4B,EAC5B,qCAAqC,EACrC,oCAAoC,EACpC,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAEpC,4GAA4G;AAC5G,wBAAgB,4BAA4B,CAC1C,IAAI,GAAE,cAAwC,GAC7C,cAAc,CAOhB;AAED,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,cAAc,CAyCnD,CAAC"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Operator configuration defaults (FR-021).
|
|
3
3
|
* Values sourced from specs/001-build-smart-router/data-model.md § Configuration (Operator).
|
|
4
4
|
*/
|
|
5
|
-
import { DEFAULT_ADAPTIVE_REASONING_CONFIG, DEFAULT_DEGRADED_ROUTE_CONFIG, DEFAULT_LOCAL_ZERO_CONFIG, DEFAULT_PLANNING_DELEGATE_CONFIG, DEFAULT_SAAR_CONFIG, DEFAULT_SPECULATIVE_PREWARM_CONFIG, DEFAULT_WORKLOAD_HEAT_CONFIG, resolveAdaptiveReasoningConfigFromEnv, resolvePlanningDelegateConfigFromEnv, resolveSaarConfigFromEnv, } from '../domain/types/schemas.js';
|
|
5
|
+
import { DEFAULT_ADAPTIVE_REASONING_CONFIG, DEFAULT_DEGRADED_ROUTE_CONFIG, DEFAULT_ENCODER_CASCADE_CONFIG, DEFAULT_LOCAL_ZERO_CONFIG, DEFAULT_PLANNING_DELEGATE_CONFIG, DEFAULT_SAAR_CONFIG, DEFAULT_SPECULATIVE_PREWARM_CONFIG, DEFAULT_WORKLOAD_HEAT_CONFIG, resolveAdaptiveReasoningConfigFromEnv, resolvePlanningDelegateConfigFromEnv, resolveSaarConfigFromEnv, } from '../domain/types/schemas.js';
|
|
6
6
|
import { DEFAULT_LOW_INTENSITY_WEIGHTS } from '../domain/routing/tier-features.js';
|
|
7
7
|
export { DEFAULT_ADAPTIVE_REASONING_CONFIG, DEFAULT_LOCAL_ZERO_CONFIG, DEFAULT_PLANNING_DELEGATE_CONFIG, DEFAULT_SAAR_CONFIG, DEFAULT_SPECULATIVE_PREWARM_CONFIG, DEFAULT_WORKLOAD_HEAT_CONFIG, resolveAdaptiveReasoningConfigFromEnv, resolvePlanningDelegateConfigFromEnv, resolveSaarConfigFromEnv, } from '../domain/types/schemas.js';
|
|
8
8
|
/** Merge operator env overrides onto defaults (adaptive reasoning, SAAR and planning delegate sections). */
|
|
@@ -34,6 +34,8 @@ export const DEFAULT_OPERATOR_CONFIG = {
|
|
|
34
34
|
hydra: {
|
|
35
35
|
artifact_cache_path: '.pi-smart-router/models/',
|
|
36
36
|
encoder: 'minilm',
|
|
37
|
+
/** Opt-in encoder cascade (SP-291, #173): default off. */
|
|
38
|
+
encoder_cascade: DEFAULT_ENCODER_CASCADE_CONFIG,
|
|
37
39
|
hydra_heads: 'learned_projection',
|
|
38
40
|
},
|
|
39
41
|
low_intensity: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,yBAAyB,EACzB,gCAAgC,EAChC,mBAAmB,EACnB,kCAAkC,EAClC,4BAA4B,EAC5B,qCAAqC,EACrC,oCAAoC,EACpC,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,OAAO,EACL,iCAAiC,EACjC,yBAAyB,EACzB,gCAAgC,EAChC,mBAAmB,EACnB,kCAAkC,EAClC,4BAA4B,EAC5B,qCAAqC,EACrC,oCAAoC,EACpC,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAEpC,4GAA4G;AAC5G,MAAM,UAAU,4BAA4B,CAC1C,OAAuB,uBAAuB;IAE9C,OAAO;QACL,GAAG,IAAI;QACP,kBAAkB,EAAE,qCAAqC,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAClF,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC,iBAAiB,EAAE,oCAAoC,CAAC,IAAI,CAAC,iBAAiB,CAAC;KAChF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,SAAS,EAAE;QACT,WAAW,EAAE,GAAG;QAChB,cAAc,EAAE,GAAG;QACnB,gBAAgB,EAAE,IAAI;KACvB;IACD,eAAe,EAAE;QACf,SAAS,EAAE,CAAC;KACb;IACD,OAAO,EAAE;QACP,cAAc,EAAE,EAAE;KACnB;IACD,KAAK,EAAE;QACL,kBAAkB,EAAE,EAAE;QACtB,4BAA4B,EAAE,CAAC;QAC/B,qBAAqB,EAAE,EAAE;KAC1B;IACD,KAAK,EAAE;QACL,mBAAmB,EAAE,0BAA0B;QAC/C,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,oBAAoB;KAClC;IACD,aAAa,EAAE;QACb,OAAO,EAAE,6BAA6B;QACtC,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,GAAG;KACrB;IACD,IAAI,EAAE,mBAAmB;IACzB,iBAAiB,EAAE,gCAAgC;IACnD,UAAU,EAAE,yBAAyB;IACrC,cAAc,EAAE,6BAA6B;IAC7C,8EAA8E;IAC9E,aAAa,EAAE,4BAA4B;IAC3C,mFAAmF;IACnF,mBAAmB,EAAE,kCAAkC;IACvD,8EAA8E;IAC9E,kBAAkB,EAAE,iCAAiC;IACrD,iBAAiB,EAAE,KAAK;CAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,8BAA8B,EAC9B,yBAAyB,EACzB,gCAAgC,EAChC,mBAAmB,EACnB,kCAAkC,EAClC,4BAA4B,EAC5B,qCAAqC,EACrC,oCAAoC,EACpC,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,OAAO,EACL,iCAAiC,EACjC,yBAAyB,EACzB,gCAAgC,EAChC,mBAAmB,EACnB,kCAAkC,EAClC,4BAA4B,EAC5B,qCAAqC,EACrC,oCAAoC,EACpC,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAEpC,4GAA4G;AAC5G,MAAM,UAAU,4BAA4B,CAC1C,OAAuB,uBAAuB;IAE9C,OAAO;QACL,GAAG,IAAI;QACP,kBAAkB,EAAE,qCAAqC,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAClF,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC,iBAAiB,EAAE,oCAAoC,CAAC,IAAI,CAAC,iBAAiB,CAAC;KAChF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,SAAS,EAAE;QACT,WAAW,EAAE,GAAG;QAChB,cAAc,EAAE,GAAG;QACnB,gBAAgB,EAAE,IAAI;KACvB;IACD,eAAe,EAAE;QACf,SAAS,EAAE,CAAC;KACb;IACD,OAAO,EAAE;QACP,cAAc,EAAE,EAAE;KACnB;IACD,KAAK,EAAE;QACL,kBAAkB,EAAE,EAAE;QACtB,4BAA4B,EAAE,CAAC;QAC/B,qBAAqB,EAAE,EAAE;KAC1B;IACD,KAAK,EAAE;QACL,mBAAmB,EAAE,0BAA0B;QAC/C,OAAO,EAAE,QAAQ;QACjB,0DAA0D;QAC1D,eAAe,EAAE,8BAA8B;QAC/C,WAAW,EAAE,oBAAoB;KAClC;IACD,aAAa,EAAE;QACb,OAAO,EAAE,6BAA6B;QACtC,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,GAAG;KACrB;IACD,IAAI,EAAE,mBAAmB;IACzB,iBAAiB,EAAE,gCAAgC;IACnD,UAAU,EAAE,yBAAyB;IACrC,cAAc,EAAE,6BAA6B;IAC7C,8EAA8E;IAC9E,aAAa,EAAE,4BAA4B;IAC3C,mFAAmF;IACnF,mBAAmB,EAAE,kCAAkC;IACvD,8EAA8E;IAC9E,kBAAkB,EAAE,iCAAiC;IACrD,iBAAiB,EAAE,KAAK;CAChB,CAAC"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* matching. One ONNX session per instance; share across matchers via a single
|
|
6
6
|
* factory call and coordinated dispose().
|
|
7
7
|
*/
|
|
8
|
-
import type { Encoder } from '../types/schemas.js';
|
|
8
|
+
import type { Encoder, EncoderCascadeConfig } from '../types/schemas.js';
|
|
9
|
+
import { type EncoderGateReasonCode } from './encoder-gate.js';
|
|
9
10
|
export declare const EMBEDDING_DIM = 384;
|
|
10
11
|
/** MiniLM ONNX model (384-dim, 512-token context). */
|
|
11
12
|
export declare const MINILM_ONNX_MODEL = "Xenova/all-MiniLM-L6-v2";
|
|
@@ -70,4 +71,65 @@ export declare function createOnnxTextEmbedder(artifactCachePath: string, pinOpt
|
|
|
70
71
|
export declare function createGraniteOnnxTextEmbedder(artifactCachePath: string, pinOptions?: OnnxPinOptions): Promise<TextEmbedder>;
|
|
71
72
|
/** Select ONNX text embedder by operator encoder flag. */
|
|
72
73
|
export declare function createTextEmbedder(encoder: Encoder | undefined, artifactCachePath: string, pinOptions?: OnnxPinOptions): Promise<TextEmbedder>;
|
|
74
|
+
/**
|
|
75
|
+
* Decision telemetry for the most recent cascade embed. Mirrors the routing
|
|
76
|
+
* feature-sidecar fields from #173 so the pipeline can copy them onto live
|
|
77
|
+
* decisions without reshaping (SP-292).
|
|
78
|
+
*/
|
|
79
|
+
export interface CascadeEmbedderTelemetry {
|
|
80
|
+
/** Encoder that produced the embedding (never mixed across spaces). */
|
|
81
|
+
readonly encoder_selected: Encoder;
|
|
82
|
+
/** Gate token estimate for the embedded prompt. */
|
|
83
|
+
readonly token_estimate: number;
|
|
84
|
+
/** Configured cascade threshold in effect for the decision. */
|
|
85
|
+
readonly cascade_threshold: number;
|
|
86
|
+
/** SP-291 gate reason code (`under_threshold` / `over_threshold` / `granite_fallback`). */
|
|
87
|
+
readonly reason_code: EncoderGateReasonCode;
|
|
88
|
+
/**
|
|
89
|
+
* Present when an over-threshold prompt degraded to the primary encoder
|
|
90
|
+
* because the long-context session was unavailable (degrade, never mix).
|
|
91
|
+
*/
|
|
92
|
+
readonly cascade_fallback_reason: EncoderGateReasonCode | null;
|
|
93
|
+
}
|
|
94
|
+
export interface CascadingTextEmbedder extends TextEmbedder {
|
|
95
|
+
/**
|
|
96
|
+
* Telemetry from the most recently completed embed(); null before the
|
|
97
|
+
* first embed. Concurrent embeds race on this snapshot — callers on the
|
|
98
|
+
* routing hot path embed sequentially per request.
|
|
99
|
+
*/
|
|
100
|
+
lastTelemetry(): CascadeEmbedderTelemetry | null;
|
|
101
|
+
}
|
|
102
|
+
/** Type guard: does this embedder carry cascade decision telemetry? */
|
|
103
|
+
export declare function isCascadingTextEmbedder(embedder: TextEmbedder): embedder is CascadingTextEmbedder;
|
|
104
|
+
export interface CreateCascadingTextEmbedderOptions {
|
|
105
|
+
readonly pinOptions?: OnnxPinOptions;
|
|
106
|
+
/**
|
|
107
|
+
* Primary encoder for under-threshold / fallback embeds.
|
|
108
|
+
* Default: DEFAULT_ENCODER ('minilm'), matching `hydra.encoder` defaults.
|
|
109
|
+
*/
|
|
110
|
+
readonly primaryEncoder?: Encoder;
|
|
111
|
+
/**
|
|
112
|
+
* Session factory override for tests. Default: createTextEmbedder bound to
|
|
113
|
+
* the cascade artifact cache path and pin options.
|
|
114
|
+
*/
|
|
115
|
+
readonly sessionFactory?: (encoder: Encoder) => Promise<TextEmbedder>;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Lazy dual-session cascading embedder (SP-292, #173 part 2).
|
|
119
|
+
*
|
|
120
|
+
* Owns at most one ONNX session per encoder: the primary session loads on the
|
|
121
|
+
* first embed, the long-context (Granite) session loads only on the first
|
|
122
|
+
* over-threshold prompt — memory is paid only when the path fires. Selection
|
|
123
|
+
* is the SP-291 pure gate; token estimates default to prompt length (the
|
|
124
|
+
* turn-envelope-parity estimator).
|
|
125
|
+
*
|
|
126
|
+
* Failure behavior: degrade, never mix. If the long-context session fails to
|
|
127
|
+
* load or embed, the request is served by the primary encoder with reason
|
|
128
|
+
* code `granite_fallback` and the long-context encoder is marked unavailable
|
|
129
|
+
* for subsequent prompts. Never silently compares cross-encoder vectors.
|
|
130
|
+
*
|
|
131
|
+
* dispose() closes every session that was actually loaded (idempotent);
|
|
132
|
+
* embed() after dispose fails closed (SP-260 precedent).
|
|
133
|
+
*/
|
|
134
|
+
export declare function createCascadingTextEmbedder(config: EncoderCascadeConfig, artifactCachePath: string, options?: CreateCascadingTextEmbedderOptions): CascadingTextEmbedder;
|
|
73
135
|
//# sourceMappingURL=embedding-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-provider.d.ts","sourceRoot":"","sources":["../../../src/domain/matching/embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"embedding-provider.d.ts","sourceRoot":"","sources":["../../../src/domain/matching/embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,kBAAkB,8DAC8B,CAAC;AAE9D,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAID;;;;;;;;;GASG;AACH,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/D,eAAO,MAAM,uBAAuB,EAAE,SAAS,mBAAmB,EAIjE,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,mCAAmC,CAAC;AAEtE,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,+BAA+B,CAAC;AAC9D,eAAO,MAAM,iBAAiB,+BAA+B,CAAC;AAE9D,+EAA+E;AAC/E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IACvC,uFAAuF;IACvF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AA6FD;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CAuCf;AA0GD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,iBAAiB,EAAE,MAAM,EACzB,UAAU,CAAC,EAAE,cAAc,GAC1B,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,iBAAiB,EAAE,MAAM,EACzB,UAAU,CAAC,EAAE,cAAc,GAC1B,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED,0DAA0D;AAC1D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,YAAkB,EAClC,iBAAiB,EAAE,MAAM,EACzB,UAAU,CAAC,EAAE,cAAc,GAC1B,OAAO,CAAC,YAAY,CAAC,CAWvB;AAID;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,uEAAuE;IACvE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,2FAA2F;IAC3F,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C;;;OAGG;IACH,QAAQ,CAAC,uBAAuB,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD;;;;OAIG;IACH,aAAa,IAAI,wBAAwB,GAAG,IAAI,CAAC;CAClD;AAED,uEAAuE;AACvE,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,YAAY,GACrB,QAAQ,IAAI,qBAAqB,CAKnC;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACvE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,oBAAoB,EAC5B,iBAAiB,EAAE,MAAM,EACzB,OAAO,CAAC,EAAE,kCAAkC,GAC3C,qBAAqB,CAyHvB"}
|
|
@@ -9,6 +9,7 @@ import { createHash } from 'node:crypto';
|
|
|
9
9
|
import { promises as fs } from 'node:fs';
|
|
10
10
|
import path from 'node:path';
|
|
11
11
|
import { DEFAULT_ENCODER } from '../types/schemas.js';
|
|
12
|
+
import { selectEncoderForPrompt, } from './encoder-gate.js';
|
|
12
13
|
export const EMBEDDING_DIM = 384;
|
|
13
14
|
/** MiniLM ONNX model (384-dim, 512-token context). */
|
|
14
15
|
export const MINILM_ONNX_MODEL = 'Xenova/all-MiniLM-L6-v2';
|
|
@@ -222,4 +223,120 @@ export async function createTextEmbedder(encoder = DEFAULT_ENCODER, artifactCach
|
|
|
222
223
|
}
|
|
223
224
|
}
|
|
224
225
|
}
|
|
226
|
+
/** Type guard: does this embedder carry cascade decision telemetry? */
|
|
227
|
+
export function isCascadingTextEmbedder(embedder) {
|
|
228
|
+
return (typeof embedder.lastTelemetry ===
|
|
229
|
+
'function');
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Lazy dual-session cascading embedder (SP-292, #173 part 2).
|
|
233
|
+
*
|
|
234
|
+
* Owns at most one ONNX session per encoder: the primary session loads on the
|
|
235
|
+
* first embed, the long-context (Granite) session loads only on the first
|
|
236
|
+
* over-threshold prompt — memory is paid only when the path fires. Selection
|
|
237
|
+
* is the SP-291 pure gate; token estimates default to prompt length (the
|
|
238
|
+
* turn-envelope-parity estimator).
|
|
239
|
+
*
|
|
240
|
+
* Failure behavior: degrade, never mix. If the long-context session fails to
|
|
241
|
+
* load or embed, the request is served by the primary encoder with reason
|
|
242
|
+
* code `granite_fallback` and the long-context encoder is marked unavailable
|
|
243
|
+
* for subsequent prompts. Never silently compares cross-encoder vectors.
|
|
244
|
+
*
|
|
245
|
+
* dispose() closes every session that was actually loaded (idempotent);
|
|
246
|
+
* embed() after dispose fails closed (SP-260 precedent).
|
|
247
|
+
*/
|
|
248
|
+
export function createCascadingTextEmbedder(config, artifactCachePath, options) {
|
|
249
|
+
const primaryEncoder = options?.primaryEncoder ?? DEFAULT_ENCODER;
|
|
250
|
+
const longContextEncoder = config.long_context_encoder;
|
|
251
|
+
const factory = options?.sessionFactory ??
|
|
252
|
+
((encoder) => createTextEmbedder(encoder, artifactCachePath, options?.pinOptions));
|
|
253
|
+
const sessions = new Map();
|
|
254
|
+
let longContextAvailable = true;
|
|
255
|
+
let disposed = false;
|
|
256
|
+
let last = null;
|
|
257
|
+
function sessionFor(encoder) {
|
|
258
|
+
let pending = sessions.get(encoder);
|
|
259
|
+
if (pending === undefined) {
|
|
260
|
+
pending = factory(encoder);
|
|
261
|
+
sessions.set(encoder, pending);
|
|
262
|
+
// A rejected session promise must not be cached forever — drop it so a
|
|
263
|
+
// later retry observes a fresh load attempt.
|
|
264
|
+
pending.catch(() => sessions.delete(encoder));
|
|
265
|
+
}
|
|
266
|
+
return pending;
|
|
267
|
+
}
|
|
268
|
+
function telemetry(decision, fallbackReason) {
|
|
269
|
+
return {
|
|
270
|
+
encoder_selected: decision.encoder,
|
|
271
|
+
token_estimate: decision.token_estimate,
|
|
272
|
+
cascade_threshold: config.token_threshold,
|
|
273
|
+
reason_code: fallbackReason ?? decision.reason_code,
|
|
274
|
+
cascade_fallback_reason: fallbackReason,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
return {
|
|
278
|
+
async embed(text) {
|
|
279
|
+
if (disposed) {
|
|
280
|
+
throw new Error('CascadingTextEmbedder has been disposed; embed() fails closed. ' +
|
|
281
|
+
'Create a new embedder via createCascadingTextEmbedder to continue.');
|
|
282
|
+
}
|
|
283
|
+
const decision = selectEncoderForPrompt(text, config, {
|
|
284
|
+
primaryEncoder,
|
|
285
|
+
longContextAvailable,
|
|
286
|
+
});
|
|
287
|
+
if (decision.encoder === longContextEncoder && longContextAvailable) {
|
|
288
|
+
try {
|
|
289
|
+
const session = await sessionFor(longContextEncoder);
|
|
290
|
+
const vector = await session.embed(text);
|
|
291
|
+
last = telemetry(decision, null);
|
|
292
|
+
return vector;
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
// Degrade, never mix (#173): Granite session/artifacts unavailable →
|
|
296
|
+
// serve with the primary encoder and make the fallback explicit.
|
|
297
|
+
longContextAvailable = false;
|
|
298
|
+
sessions.delete(longContextEncoder);
|
|
299
|
+
console.warn('Encoder cascade: long-context encoder unavailable; degrading to primary encoder (granite_fallback)', {
|
|
300
|
+
long_context_encoder: longContextEncoder,
|
|
301
|
+
primary_encoder: primaryEncoder,
|
|
302
|
+
token_estimate: decision.token_estimate,
|
|
303
|
+
error: error instanceof Error ? error.message : String(error),
|
|
304
|
+
});
|
|
305
|
+
const session = await sessionFor(primaryEncoder);
|
|
306
|
+
const vector = await session.embed(text);
|
|
307
|
+
last = telemetry({ ...decision, encoder: primaryEncoder }, 'granite_fallback');
|
|
308
|
+
return vector;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
const session = await sessionFor(primaryEncoder);
|
|
312
|
+
const vector = await session.embed(text);
|
|
313
|
+
last = telemetry({ ...decision, encoder: primaryEncoder }, decision.reason_code === 'granite_fallback' ? 'granite_fallback' : null);
|
|
314
|
+
return vector;
|
|
315
|
+
},
|
|
316
|
+
lastTelemetry() {
|
|
317
|
+
return last;
|
|
318
|
+
},
|
|
319
|
+
async dispose() {
|
|
320
|
+
if (disposed)
|
|
321
|
+
return; // idempotent: safe for shared-factory callers
|
|
322
|
+
disposed = true;
|
|
323
|
+
const pending = [...sessions.values()];
|
|
324
|
+
sessions.clear();
|
|
325
|
+
const failures = [];
|
|
326
|
+
for (const sessionPromise of pending) {
|
|
327
|
+
try {
|
|
328
|
+
const session = await sessionPromise;
|
|
329
|
+
await session.dispose();
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
failures.push(error instanceof Error ? error.message : String(error));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Fail loud: partially released cascade sessions must not pass silently.
|
|
336
|
+
if (failures.length > 0) {
|
|
337
|
+
throw new Error(`CascadingTextEmbedder dispose failed for ${failures.length} session(s): ${failures.join('; ')}`);
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
}
|
|
225
342
|
//# sourceMappingURL=embedding-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-provider.js","sourceRoot":"","sources":["../../../src/domain/matching/embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"embedding-provider.js","sourceRoot":"","sources":["../../../src/domain/matching/embedding-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encoder cascade gate (SP-291, #173 part 1) — pure domain, unit-testable.
|
|
3
|
+
*
|
|
4
|
+
* Opt-in per-prompt encoder selection: when `hydra.encoder_cascade.enabled`
|
|
5
|
+
* is true, prompts whose estimated token count reaches `token_threshold` are
|
|
6
|
+
* routed to the long-context encoder (Granite 97M, SP-156) instead of the
|
|
7
|
+
* primary `hydra.encoder` (MiniLM, 512-token window). Default off: existing
|
|
8
|
+
* single-encoder installs are unaffected and pay zero added cost — the gate
|
|
9
|
+
* is pre-embedding arithmetic only.
|
|
10
|
+
*
|
|
11
|
+
* Token estimate parity: this module reuses the same estimator as the
|
|
12
|
+
* turn-envelope stage (`src/domain/pipeline/turn-envelope-stage.ts`):
|
|
13
|
+
* `estimated_input_tokens ?? prompt_text.length`. Callers pass
|
|
14
|
+
* `RoutingRequest.estimated_input_tokens` via options when present; the
|
|
15
|
+
* fallback is the prompt's character length.
|
|
16
|
+
*
|
|
17
|
+
* Hard constraint (#173): encoders embed into different vector spaces — the
|
|
18
|
+
* gate only SELECTS an encoder; per-encoder artifacts (centroids, learned
|
|
19
|
+
* projection) and the cascading embedder land in SP-292. Never mix spaces.
|
|
20
|
+
*/
|
|
21
|
+
import type { Encoder, EncoderCascadeConfig } from '../types/schemas.js';
|
|
22
|
+
/** Gate outcomes per #173; attached to decision telemetry. */
|
|
23
|
+
export type EncoderGateReasonCode =
|
|
24
|
+
/** Cascade disabled — every prompt uses the primary encoder. */
|
|
25
|
+
'cascade_disabled'
|
|
26
|
+
/** Estimate below the configured threshold — primary encoder. */
|
|
27
|
+
| 'under_threshold'
|
|
28
|
+
/** Estimate at/over the threshold — long-context encoder selected. */
|
|
29
|
+
| 'over_threshold'
|
|
30
|
+
/**
|
|
31
|
+
* Over threshold but the long-context encoder is unavailable — degrade to
|
|
32
|
+
* the primary encoder (continuity of routing wins; never mix vector spaces).
|
|
33
|
+
*/
|
|
34
|
+
| 'granite_fallback';
|
|
35
|
+
export interface EncoderGateDecision {
|
|
36
|
+
readonly encoder: Encoder;
|
|
37
|
+
readonly reason_code: EncoderGateReasonCode;
|
|
38
|
+
readonly token_estimate: number;
|
|
39
|
+
}
|
|
40
|
+
export interface EncoderGateOptions {
|
|
41
|
+
/**
|
|
42
|
+
* Precomputed token estimate — pass `RoutingRequest.estimated_input_tokens`
|
|
43
|
+
* when set. Falls back to `prompt.length`, exactly mirroring the
|
|
44
|
+
* turn-envelope stage estimator (`estimated_input_tokens ?? prompt_text.length`).
|
|
45
|
+
*/
|
|
46
|
+
readonly estimatedTokens?: number | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Primary encoder used when the cascade is disabled or does not fire.
|
|
49
|
+
* Default: DEFAULT_ENCODER ('minilm'), matching `hydra.encoder` defaults.
|
|
50
|
+
*/
|
|
51
|
+
readonly primaryEncoder?: Encoder | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Long-context encoder availability signal (SP-292 embedder layer owns
|
|
54
|
+
* session/artifact health). When explicitly false, an over-threshold prompt
|
|
55
|
+
* degrades to the primary encoder with reason `granite_fallback`.
|
|
56
|
+
* Default: assumed available.
|
|
57
|
+
*/
|
|
58
|
+
readonly longContextAvailable?: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Turn-envelope-parity token estimator: a caller-supplied estimate wins;
|
|
62
|
+
* otherwise the prompt's character length is the proxy (same formula as
|
|
63
|
+
* `turn-envelope-stage.ts` step 2b breakeven arithmetic).
|
|
64
|
+
*/
|
|
65
|
+
export declare function estimatePromptTokens(prompt: string, estimatedTokens?: number): number;
|
|
66
|
+
/**
|
|
67
|
+
* Select the encoder for a prompt. Pure: no I/O, no ONNX sessions.
|
|
68
|
+
*
|
|
69
|
+
* Boundary semantics (per #173 eval table): `token_estimate >= token_threshold`
|
|
70
|
+
* routes to the long-context encoder; strictly below stays on the primary.
|
|
71
|
+
*/
|
|
72
|
+
export declare function selectEncoderForPrompt(prompt: string, config: EncoderCascadeConfig, options?: EncoderGateOptions): EncoderGateDecision;
|
|
73
|
+
//# sourceMappingURL=encoder-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder-gate.d.ts","sourceRoot":"","sources":["../../../src/domain/matching/encoder-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,8DAA8D;AAC9D,MAAM,MAAM,qBAAqB;AAC/B,gEAAgE;AAC9D,kBAAkB;AACpB,iEAAiE;GAC/D,iBAAiB;AACnB,sEAAsE;GACpE,gBAAgB;AAClB;;;GAGG;GACD,kBAAkB,CAAC;AAEvB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,oBAAoB,EAC5B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,mBAAmB,CAiCrB"}
|