modelrig 0.3.0 → 0.4.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/CHANGELOG.md +140 -0
- package/README.md +66 -14
- package/dist/adapters/deepseek.d.ts.map +1 -1
- package/dist/adapters/deepseek.js +8 -1
- package/dist/adapters/gemini.d.ts +6 -0
- package/dist/adapters/gemini.d.ts.map +1 -1
- package/dist/adapters/gemini.js +14 -4
- package/dist/adapters/grok.d.ts +7 -0
- package/dist/adapters/grok.d.ts.map +1 -1
- package/dist/adapters/grok.js +23 -1
- package/dist/adapters/openai-compat.d.ts +7 -0
- package/dist/adapters/openai-compat.d.ts.map +1 -1
- package/dist/adapters/openai-compat.js +24 -1
- package/dist/adapters/openai.d.ts +7 -0
- package/dist/adapters/openai.d.ts.map +1 -1
- package/dist/adapters/openai.js +23 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -4
- package/dist/config.d.ts +7 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -25
- package/dist/init/init-cli.d.ts.map +1 -1
- package/dist/init/init-cli.js +2 -1
- package/dist/init/observe-cli.d.ts.map +1 -1
- package/dist/init/observe-cli.js +2 -1
- package/dist/routes/sampling-config.d.ts.map +1 -1
- package/dist/routes/sampling-config.js +11 -0
- package/dist/run/dispatch.d.ts +14 -2
- package/dist/run/dispatch.d.ts.map +1 -1
- package/dist/run/dispatch.js +31 -2
- package/dist/run/ladder-key.d.ts +40 -0
- package/dist/run/ladder-key.d.ts.map +1 -0
- package/dist/run/ladder-key.js +39 -0
- package/dist/run/raw-support.d.ts +123 -0
- package/dist/run/raw-support.d.ts.map +1 -0
- package/dist/run/raw-support.js +150 -0
- package/dist/run/raw.d.ts +41 -11
- package/dist/run/raw.d.ts.map +1 -1
- package/dist/run/raw.js +67 -23
- package/dist/run/rawonly.d.ts +60 -0
- package/dist/run/rawonly.d.ts.map +1 -0
- package/dist/run/rawonly.js +120 -0
- package/dist/run/record-attempt.d.ts +14 -1
- package/dist/run/record-attempt.d.ts.map +1 -1
- package/dist/run/record-attempt.js +43 -2
- package/dist/run/resolve.d.ts +4 -0
- package/dist/run/resolve.d.ts.map +1 -1
- package/dist/run/resolve.js +9 -2
- package/dist/run/routing-docs.d.ts +73 -0
- package/dist/run/routing-docs.d.ts.map +1 -0
- package/dist/run/routing-docs.js +222 -0
- package/dist/run/run.d.ts.map +1 -1
- package/dist/run/run.js +24 -22
- package/dist/telemetry/exporter.d.ts.map +1 -1
- package/dist/telemetry/exporter.js +6 -0
- package/dist/telemetry/ingest-protocol.d.ts +7 -0
- package/dist/telemetry/ingest-protocol.d.ts.map +1 -1
- package/dist/telemetry/load-error-report.d.ts.map +1 -1
- package/dist/telemetry/load-error-report.js +4 -1
- package/dist/telemetry/otel-map.d.ts.map +1 -1
- package/dist/telemetry/otel-map.js +8 -0
- package/dist/telemetry/store-migrations.d.ts +15 -0
- package/dist/telemetry/store-migrations.d.ts.map +1 -0
- package/dist/telemetry/store-migrations.js +119 -0
- package/dist/telemetry/store.d.ts.map +1 -1
- package/dist/telemetry/store.js +26 -93
- package/dist/types/failures-teaching.js +1 -1
- package/dist/types/provider.d.ts +13 -0
- package/dist/types/provider.d.ts.map +1 -1
- package/dist/types/route.d.ts +6 -1
- package/dist/types/route.d.ts.map +1 -1
- package/dist/types/telemetry.d.ts +31 -0
- package/dist/types/telemetry.d.ts.map +1 -1
- package/dist/validate-cli.d.ts.map +1 -1
- package/dist/validate-cli.js +17 -4
- package/package.json +1 -1
package/dist/run/run.js
CHANGED
|
@@ -24,6 +24,7 @@ const grounding_1 = require("./grounding");
|
|
|
24
24
|
const validate_1 = require("./validate");
|
|
25
25
|
const dispatch_1 = require("./dispatch");
|
|
26
26
|
const record_attempt_1 = require("./record-attempt");
|
|
27
|
+
const ladder_key_1 = require("./ladder-key");
|
|
27
28
|
const run_context_1 = require("../artifacts/run-context");
|
|
28
29
|
const capture_write_1 = require("./capture-write");
|
|
29
30
|
/** Look up a named variant; null = default (base config). Unknown names are
|
|
@@ -62,19 +63,6 @@ function effectiveRoute(route, variant) {
|
|
|
62
63
|
const USER_DIRECTIVE = "Produce the required output now, following the system instructions exactly.";
|
|
63
64
|
/** User turn for repair calls (WS2) — same terse-trigger convention. */
|
|
64
65
|
const REPAIR_DIRECTIVE = "Produce the corrected JSON object now, following the system instructions exactly.";
|
|
65
|
-
/** Schema coaching for the json_mode rung — ported from the production
|
|
66
|
-
* DeepSeek provider's schema-in-prompt guidance (minLength-is-a-FLOOR etc.). */
|
|
67
|
-
function jsonModeCoaching(schema) {
|
|
68
|
-
return ("\n\n---\nOUTPUT FORMAT (STRICT): Respond with a SINGLE valid JSON object and nothing else — " +
|
|
69
|
-
'no markdown fences, no introductory text, no sign-off. Your response MUST start with "{" and ' +
|
|
70
|
-
'end with "}". Sanitize every nested string so embedded quotes/brackets do not break the root ' +
|
|
71
|
-
"JSON escaping. The object MUST conform to this JSON Schema — match key names and types " +
|
|
72
|
-
"EXACTLY, include ALL required fields, and do not add commentary fields. CRITICAL: where the " +
|
|
73
|
-
"schema sets a minLength on a narrative/prose field, that is a FLOOR, not a target — write " +
|
|
74
|
-
"thorough, non-repetitive analysis that comfortably EXCEEDS the minimum (do not pad with " +
|
|
75
|
-
"repetition; add real substance). When unsure how long to make a prose field, write more, " +
|
|
76
|
-
`not less:\n\n${JSON.stringify(schema)}`);
|
|
77
|
-
}
|
|
78
66
|
/** prefer:[cost] ordering metric — combined input+output USD per million
|
|
79
67
|
* tokens from the pricing snapshot; null (unknown) sorts last in resolve. */
|
|
80
68
|
function costPerMTok(provider, model) {
|
|
@@ -109,6 +97,9 @@ async function run(deps, routeName, opts) {
|
|
|
109
97
|
// it (attempt-per-row, ruling c). Inert without a run.start on this path.
|
|
110
98
|
const runCtx = (0, run_context_1.getActiveRunContext)();
|
|
111
99
|
const autoStepKey = runCtx !== null ? runCtx.nextStepKey(route.route) : null;
|
|
100
|
+
// Per-call ladder key (spec §2.1 R0): one call_id, a monotonic attempt_seq per
|
|
101
|
+
// row, and the current candidate_index (advanced by nextCandidate below).
|
|
102
|
+
const ladder = (0, ladder_key_1.createLadderKeyMinter)();
|
|
112
103
|
// Capture-WRITE gate (settings-plane §1.5, closes gate 5): the control-plane
|
|
113
104
|
// capture flag wins over the YAML flag, the task's scrub setting is honored,
|
|
114
105
|
// and capture OFF is a no-op writer (byte-identical). See ./capture-write.ts.
|
|
@@ -126,6 +117,7 @@ async function run(deps, routeName, opts) {
|
|
|
126
117
|
autoStepKey,
|
|
127
118
|
cache: opts.cache,
|
|
128
119
|
droppedCacheHandle,
|
|
120
|
+
ladder,
|
|
129
121
|
});
|
|
130
122
|
function failRun(candidate, failure, latencyMs) {
|
|
131
123
|
recordAttempt({
|
|
@@ -254,6 +246,7 @@ async function run(deps, routeName, opts) {
|
|
|
254
246
|
attemptsByClass: ledger.snapshot(),
|
|
255
247
|
servedVariant,
|
|
256
248
|
repairedBy,
|
|
249
|
+
callId: ladder.callId,
|
|
257
250
|
...(injectedSources !== null
|
|
258
251
|
? { citations: (0, grounding_1.extractCitations)(result.text, injectedSources) }
|
|
259
252
|
: {}),
|
|
@@ -263,7 +256,14 @@ async function run(deps, routeName, opts) {
|
|
|
263
256
|
}
|
|
264
257
|
const searchAvailable = deps.search !== undefined && deps.search !== null;
|
|
265
258
|
const iter = (0, resolve_1.resolveCandidates)(route, deps.capabilities, costPerMTok, searchAvailable, (0, resolve_1.candidateFilterFromOptions)(opts));
|
|
266
|
-
|
|
259
|
+
// Advance the iterator AND publish the served candidate's index to the ladder,
|
|
260
|
+
// so every row of this candidate's turn (incl. repair rows) carries it (§2.1).
|
|
261
|
+
const nextCandidate = () => {
|
|
262
|
+
const c = iter.next();
|
|
263
|
+
ladder.setCandidateIndex(iter.index);
|
|
264
|
+
return c;
|
|
265
|
+
};
|
|
266
|
+
let candidate = nextCandidate();
|
|
267
267
|
if (candidate === null) {
|
|
268
268
|
throw new loader_1.RouteConfigError(`route "${route.route}" has no eligible candidate — none of the declared candidates ` +
|
|
269
269
|
`satisfy require=[${route.require.join(", ")}] with json=${route.policy.json}${(0, resolve_1.filterSummary)(opts)}`);
|
|
@@ -294,7 +294,7 @@ async function run(deps, routeName, opts) {
|
|
|
294
294
|
// the next (the invariant guard above already OK'd the pair); nothing
|
|
295
295
|
// dispatched, so nothing billed. All-inert surfaces via the final throw.
|
|
296
296
|
lastFailure = (0, serveability_1.inertCandidateFailure)(candidate, route.route);
|
|
297
|
-
candidate =
|
|
297
|
+
candidate = nextCandidate();
|
|
298
298
|
continue;
|
|
299
299
|
}
|
|
300
300
|
// Render against the SERVING candidate's capability flags.
|
|
@@ -324,14 +324,13 @@ async function run(deps, routeName, opts) {
|
|
|
324
324
|
try {
|
|
325
325
|
searchResponse = await deps.search.search(query);
|
|
326
326
|
guard?.settle(searchResponse.costUsd);
|
|
327
|
-
(0, dispatch_1.recordSearchCostRow)(deps.telemetry, route, effectiveTags, servedVariant, deps.search.id, searchResponse.costUsd);
|
|
327
|
+
(0, dispatch_1.recordSearchCostRow)(deps.telemetry, route, effectiveTags, servedVariant, deps.search.id, searchResponse.costUsd, ladder);
|
|
328
328
|
}
|
|
329
329
|
catch (err) {
|
|
330
330
|
const failure = {
|
|
331
331
|
class: "network",
|
|
332
332
|
message: `grounding search failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
333
|
-
fixHint: "check the search provider key/config (RigConfig.search)",
|
|
334
|
-
cause: err,
|
|
333
|
+
fixHint: "check the search provider key/config (RigConfig.search)", cause: err,
|
|
335
334
|
};
|
|
336
335
|
recordAttempt({
|
|
337
336
|
candidate,
|
|
@@ -342,13 +341,14 @@ async function run(deps, routeName, opts) {
|
|
|
342
341
|
costUsd: 0,
|
|
343
342
|
latencyMs: 0,
|
|
344
343
|
failure,
|
|
344
|
+
rung: "search", // the SEARCH failed, no model was asked — never a candidate dispatch
|
|
345
345
|
});
|
|
346
346
|
lastFailure = failure;
|
|
347
347
|
if (ledger.consume("network")) {
|
|
348
348
|
await sleep(ledger.delayMs("network"));
|
|
349
349
|
continue;
|
|
350
350
|
}
|
|
351
|
-
candidate =
|
|
351
|
+
candidate = nextCandidate();
|
|
352
352
|
continue;
|
|
353
353
|
}
|
|
354
354
|
}
|
|
@@ -360,7 +360,7 @@ async function run(deps, routeName, opts) {
|
|
|
360
360
|
const useJsonModeCoaching = route.outputSchema !== null &&
|
|
361
361
|
(route.policy.json === "json_mode" || !flags.has("structured_native"));
|
|
362
362
|
if (useJsonModeCoaching) {
|
|
363
|
-
systemPrompt += jsonModeCoaching(route.outputSchema);
|
|
363
|
+
systemPrompt += (0, dispatch_1.jsonModeCoaching)(route.outputSchema);
|
|
364
364
|
}
|
|
365
365
|
// Envelope precheck BEFORE dispatch — upper-bound estimate from the
|
|
366
366
|
// pricing snapshot (prompt-length input + full output budget).
|
|
@@ -404,6 +404,7 @@ async function run(deps, routeName, opts) {
|
|
|
404
404
|
attemptsByClass: ledger.snapshot(),
|
|
405
405
|
servedVariant,
|
|
406
406
|
pricingMissing,
|
|
407
|
+
callId: ladder.callId,
|
|
407
408
|
});
|
|
408
409
|
}
|
|
409
410
|
const outcome = (0, validate_1.validateOutput)(route, result.text);
|
|
@@ -440,6 +441,7 @@ async function run(deps, routeName, opts) {
|
|
|
440
441
|
attemptsByClass: ledger.snapshot(),
|
|
441
442
|
servedVariant,
|
|
442
443
|
repairedBy: null,
|
|
444
|
+
callId: ladder.callId,
|
|
443
445
|
...(injectedSources !== null
|
|
444
446
|
? { citations: (0, grounding_1.extractCitations)(result.text, injectedSources) }
|
|
445
447
|
: {}),
|
|
@@ -491,7 +493,7 @@ async function run(deps, routeName, opts) {
|
|
|
491
493
|
if (ledger.consume("content_invalid")) {
|
|
492
494
|
continue; // retry the SAME candidate until the class budget is spent
|
|
493
495
|
}
|
|
494
|
-
candidate =
|
|
496
|
+
candidate = nextCandidate(); // then advance within the declared set
|
|
495
497
|
continue;
|
|
496
498
|
}
|
|
497
499
|
// Adapter-level typed failure. F1: refusals/truncations that BILLED
|
|
@@ -531,7 +533,7 @@ async function run(deps, routeName, opts) {
|
|
|
531
533
|
await sleep(ledger.delayMs(failure.class));
|
|
532
534
|
continue; // retry the SAME candidate
|
|
533
535
|
}
|
|
534
|
-
candidate =
|
|
536
|
+
candidate = nextCandidate(); // class budget spent — advance candidate
|
|
535
537
|
}
|
|
536
538
|
throw new failures_1.RigFailureError(lastFailure ?? {
|
|
537
539
|
class: "network",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../src/telemetry/exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAYlE,OAAO,KAAK,EACV,WAAW,EASZ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1F;8BAC0B;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;6EAEyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,SAAS,WAAW,EAAE,GAC9B,mBAAmB,EAAE,CAYvB;AAED,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD;6EACyE;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC;;;0CAGsC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvD;;;;6CAIyC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACnD;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;8DAG0D;IAC1D,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC;;;;;;;;OAQG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED;;;sEAGsE;AACtE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,QAAQ;IACvB;;oCAEgC;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC;IAChC,KAAK,IAAI,IAAI,CAAC;IACd,qEAAqE;IACrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB;;iEAE6D;IAC7D,KAAK,IAAI,aAAa,CAAC;CACxB;AAGD;iFACiF;AACjF,eAAO,MAAM,mBAAmB,QAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../src/telemetry/exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -94,6 +94,12 @@ function toWireInference(row) {
|
|
|
94
94
|
tokens_cache_write_1h: row.tokensCacheWrite1h ?? 0,
|
|
95
95
|
cache_key: row.cacheKey ?? null,
|
|
96
96
|
prefix_fingerprint: row.prefixFingerprint ?? null,
|
|
97
|
+
// Ladder key (spec §2.1 R0) — spread-iff-present: a row without it (pre-0.4.0
|
|
98
|
+
// SDK, read back as null) emits NO key, so the wire payload is byte-identical
|
|
99
|
+
// to before R0 and the server leaves the column null.
|
|
100
|
+
...(row.callId != null ? { call_id: row.callId } : {}),
|
|
101
|
+
...(row.attemptSeq != null ? { attempt_seq: row.attemptSeq } : {}),
|
|
102
|
+
...(row.candidateIndex != null ? { candidate_index: row.candidateIndex } : {}),
|
|
97
103
|
};
|
|
98
104
|
}
|
|
99
105
|
function toWireRun(row) {
|
|
@@ -83,6 +83,13 @@ export interface WireInference {
|
|
|
83
83
|
readonly tokens_cache_write_1h?: number;
|
|
84
84
|
readonly cache_key?: string | null;
|
|
85
85
|
readonly prefix_fingerprint?: string | null;
|
|
86
|
+
/** Per-call ladder key (routing-console spec §2.1 R0). OPTIONAL on the wire and
|
|
87
|
+
* OMITTED when unset (spread-iff-present in the exporter), so an older SDK's
|
|
88
|
+
* payload is byte-identical and the server defaults the columns to null.
|
|
89
|
+
* `attempt_seq ≥ 1`, `candidate_index ≥ 0` (ingest.validInference). */
|
|
90
|
+
readonly call_id?: string;
|
|
91
|
+
readonly attempt_seq?: number;
|
|
92
|
+
readonly candidate_index?: number;
|
|
86
93
|
}
|
|
87
94
|
export interface WireFeedback {
|
|
88
95
|
readonly id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest-protocol.d.ts","sourceRoot":"","sources":["../../src/telemetry/ingest-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,oDAAoD;AACpD,eAAO,MAAM,WAAW,eAAe,CAAC;AAExC;;;;6DAI6D;AAC7D,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC;;+EAE+E;AAC/E,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C,kEAAkE;AAClE,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAE5D;kBACkB;AAClB,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC;;;+EAG2E;IAC3E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ingest-protocol.d.ts","sourceRoot":"","sources":["../../src/telemetry/ingest-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-error-report.d.ts","sourceRoot":"","sources":["../../src/telemetry/load-error-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOpD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"load-error-report.d.ts","sourceRoot":"","sources":["../../src/telemetry/load-error-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOpD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAsBhF"}
|
|
@@ -35,7 +35,10 @@ function reportLoadError(config, error) {
|
|
|
35
35
|
// name/dimensions/contribution so the reporting upsert doesn't blank them.
|
|
36
36
|
let manifestMeta = null;
|
|
37
37
|
try {
|
|
38
|
-
|
|
38
|
+
// routesDir === null is a runRaw-only rig with no manifest (CE-8); it never
|
|
39
|
+
// reaches here (load errors come from the string path), so null ⇒ no meta.
|
|
40
|
+
if (config.routesDir !== null)
|
|
41
|
+
manifestMeta = (0, manifest_1.loadManifest)((0, node_path_1.dirname)(config.routesDir));
|
|
39
42
|
}
|
|
40
43
|
catch {
|
|
41
44
|
// rig.yaml is itself broken/absent; fall back to source-id naming so the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otel-map.d.ts","sourceRoot":"","sources":["../../src/telemetry/otel-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;4EAC4E;AAC5E,eAAO,MAAM,eAAe,WAAW,CAAC;AAMxC;sCACsC;AACtC,QAAA,MAAM,YAAY,IAAI,CAAC;AACvB,QAAA,MAAM,YAAY,IAAI,CAAC;AAGvB,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,YAAY,GAAG,OAAO,YAAY,CAAC;IACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;QACpC,QAAQ,CAAC,QAAQ,EAAE;YAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAA;SAAE,CAAC;QACrE,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;YACjC,QAAQ,CAAC,KAAK,EAAE;gBAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC;YACpE,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;SACzC,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ;AAYD,gFAAgF;AAChF,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAKlD,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAQrF;AAwCD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"otel-map.d.ts","sourceRoot":"","sources":["../../src/telemetry/otel-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -146,6 +146,14 @@ function inferenceToSpan(row) {
|
|
|
146
146
|
attrs.push(strAttr("modelrig.served_variant", row.servedVariant));
|
|
147
147
|
if (row.repairedBy !== null)
|
|
148
148
|
attrs.push(strAttr("modelrig.repaired_by", row.repairedBy));
|
|
149
|
+
// Per-call ladder key (spec §2.1 R0) — emitted only when present, so a pre-0.4.0
|
|
150
|
+
// row's span is byte-identical to before R0.
|
|
151
|
+
if (row.callId != null)
|
|
152
|
+
attrs.push(strAttr("modelrig.call_id", row.callId));
|
|
153
|
+
if (row.attemptSeq != null)
|
|
154
|
+
attrs.push(intAttr("modelrig.attempt_seq", row.attemptSeq));
|
|
155
|
+
if (row.candidateIndex != null)
|
|
156
|
+
attrs.push(intAttr("modelrig.candidate_index", row.candidateIndex));
|
|
149
157
|
if (row.fingerprintCell !== null) {
|
|
150
158
|
// Irreversible by construction (a schema hash) — safe to emit (spec §3).
|
|
151
159
|
attrs.push(strAttr("modelrig.fingerprint_cell", row.fingerprintCell));
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite telemetry-store migration ladder — extracted from store.ts.
|
|
3
|
+
*
|
|
4
|
+
* Every rung is idempotent on every open: a FRESH database gets the full current
|
|
5
|
+
* schema from `SCHEMA_SQL` (store.ts) and each rung only stamps `user_version`;
|
|
6
|
+
* an OLDER database (whose CREATEs were no-ops) gains the additive columns via
|
|
7
|
+
* `ALTER TABLE … ADD COLUMN`, existing rows reading the nullable/default value.
|
|
8
|
+
* The ladder lives here so store.ts stays under the LOC cap and a new schema
|
|
9
|
+
* epoch is one self-contained rung to add.
|
|
10
|
+
*/
|
|
11
|
+
import type Database from "better-sqlite3";
|
|
12
|
+
/** Apply every pending schema migration to an open telemetry database. Safe to
|
|
13
|
+
* call on every open (idempotent). */
|
|
14
|
+
export declare function runStoreMigrations(db: Database.Database): void;
|
|
15
|
+
//# sourceMappingURL=store-migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-migrations.d.ts","sourceRoot":"","sources":["../../src/telemetry/store-migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;sCACsC;AACtC,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAuG9D"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SQLite telemetry-store migration ladder — extracted from store.ts.
|
|
4
|
+
*
|
|
5
|
+
* Every rung is idempotent on every open: a FRESH database gets the full current
|
|
6
|
+
* schema from `SCHEMA_SQL` (store.ts) and each rung only stamps `user_version`;
|
|
7
|
+
* an OLDER database (whose CREATEs were no-ops) gains the additive columns via
|
|
8
|
+
* `ALTER TABLE … ADD COLUMN`, existing rows reading the nullable/default value.
|
|
9
|
+
* The ladder lives here so store.ts stays under the LOC cap and a new schema
|
|
10
|
+
* epoch is one self-contained rung to add.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.runStoreMigrations = runStoreMigrations;
|
|
14
|
+
/** Apply every pending schema migration to an open telemetry database. Safe to
|
|
15
|
+
* call on every open (idempotent). */
|
|
16
|
+
function runStoreMigrations(db) {
|
|
17
|
+
// v1 databases (tables pre-existing, so SCHEMA_SQL's CREATEs were no-ops) gain
|
|
18
|
+
// the fingerprint_cell column additively — existing rows read it as NULL.
|
|
19
|
+
if (db.pragma("user_version", { simple: true }) < 2) {
|
|
20
|
+
const columns = db.prepare("PRAGMA table_info(inferences)").all();
|
|
21
|
+
if (!columns.some((c) => c.name === "fingerprint_cell")) {
|
|
22
|
+
db.exec("ALTER TABLE inferences ADD COLUMN fingerprint_cell TEXT");
|
|
23
|
+
}
|
|
24
|
+
db.pragma("user_version = 2");
|
|
25
|
+
}
|
|
26
|
+
// v3 (Phase 3): captures table (from SCHEMA_SQL — a no-op CREATE on fresh
|
|
27
|
+
// databases) + the variant/repair columns, additive and nullable.
|
|
28
|
+
if (db.pragma("user_version", { simple: true }) < 3) {
|
|
29
|
+
const columns = db.prepare("PRAGMA table_info(inferences)").all();
|
|
30
|
+
if (!columns.some((c) => c.name === "served_variant")) {
|
|
31
|
+
db.exec("ALTER TABLE inferences ADD COLUMN served_variant TEXT");
|
|
32
|
+
}
|
|
33
|
+
if (!columns.some((c) => c.name === "repaired_by")) {
|
|
34
|
+
db.exec("ALTER TABLE inferences ADD COLUMN repaired_by TEXT");
|
|
35
|
+
}
|
|
36
|
+
db.pragma("user_version = 3");
|
|
37
|
+
}
|
|
38
|
+
// v4 (addendum A1): pricing_missing flag — additive; old rows read false.
|
|
39
|
+
if (db.pragma("user_version", { simple: true }) < 4) {
|
|
40
|
+
const columns = db.prepare("PRAGMA table_info(inferences)").all();
|
|
41
|
+
if (!columns.some((c) => c.name === "pricing_missing")) {
|
|
42
|
+
db.exec("ALTER TABLE inferences ADD COLUMN pricing_missing INTEGER NOT NULL DEFAULT 0");
|
|
43
|
+
}
|
|
44
|
+
db.pragma("user_version = 4");
|
|
45
|
+
}
|
|
46
|
+
// v5 (Phase 4 WS2): feedback table — purely additive; SCHEMA_SQL's
|
|
47
|
+
// CREATE IF NOT EXISTS handles fresh AND migrating databases identically, so
|
|
48
|
+
// the bump only stamps the version.
|
|
49
|
+
if (db.pragma("user_version", { simple: true }) < 5) {
|
|
50
|
+
db.pragma("user_version = 5");
|
|
51
|
+
}
|
|
52
|
+
// v6 (Phase 4 WS3): ttfb_ms — additive, nullable; old rows read null.
|
|
53
|
+
if (db.pragma("user_version", { simple: true }) < 6) {
|
|
54
|
+
const columns = db.prepare("PRAGMA table_info(inferences)").all();
|
|
55
|
+
if (!columns.some((c) => c.name === "ttfb_ms")) {
|
|
56
|
+
db.exec("ALTER TABLE inferences ADD COLUMN ttfb_ms INTEGER");
|
|
57
|
+
}
|
|
58
|
+
db.pragma("user_version = 6");
|
|
59
|
+
}
|
|
60
|
+
// v7 (Phase 6 WS2): feedback.org_id + feedback.created_by — additive,
|
|
61
|
+
// nullable. Old verdicts read null on both, which is TRUE of them: they were
|
|
62
|
+
// recorded before either concept existed, and backfilling a guess into an
|
|
63
|
+
// unrecomputable record is exactly what 00017 refused to do.
|
|
64
|
+
if (db.pragma("user_version", { simple: true }) < 7) {
|
|
65
|
+
const columns = db.prepare("PRAGMA table_info(feedback)").all();
|
|
66
|
+
if (!columns.some((c) => c.name === "org_id")) {
|
|
67
|
+
db.exec("ALTER TABLE feedback ADD COLUMN org_id TEXT");
|
|
68
|
+
}
|
|
69
|
+
if (!columns.some((c) => c.name === "created_by")) {
|
|
70
|
+
db.exec("ALTER TABLE feedback ADD COLUMN created_by TEXT");
|
|
71
|
+
}
|
|
72
|
+
db.pragma("user_version = 7");
|
|
73
|
+
}
|
|
74
|
+
// v8 (G-4 observed-health): idx_inferences_provider_model_ts — index-only, no
|
|
75
|
+
// data change. SCHEMA_SQL's CREATE INDEX IF NOT EXISTS handles fresh AND
|
|
76
|
+
// migrating databases identically (it ran above), so the bump only stamps the
|
|
77
|
+
// version. Kept explicit rather than folded into v5's bare-stamp branch so the
|
|
78
|
+
// migration ladder reads one rung per schema epoch.
|
|
79
|
+
if (db.pragma("user_version", { simple: true }) < 8) {
|
|
80
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_inferences_provider_model_ts ON inferences (provider, model, ts)");
|
|
81
|
+
db.pragma("user_version = 8");
|
|
82
|
+
}
|
|
83
|
+
// v9 (Expansion E2 chunk A): runs + steps local outbox. Purely additive —
|
|
84
|
+
// SCHEMA_SQL's CREATE TABLE IF NOT EXISTS handles fresh AND migrating
|
|
85
|
+
// databases identically (it ran above), so the bump only stamps the version.
|
|
86
|
+
// A rig that never enables the artifact namespace simply never writes to them.
|
|
87
|
+
if (db.pragma("user_version", { simple: true }) < 9) {
|
|
88
|
+
db.pragma("user_version = 9");
|
|
89
|
+
}
|
|
90
|
+
// v10 (WS-A cache accounting): cache-write buckets + cache-key/prefix
|
|
91
|
+
// substrate. Additive; old rows read 0 / null (true of them — recorded before
|
|
92
|
+
// caching was accounted). Same ALTER pattern as v2–v6, folded over a list.
|
|
93
|
+
if (db.pragma("user_version", { simple: true }) < 10) {
|
|
94
|
+
const cols = db.prepare("PRAGMA table_info(inferences)").all();
|
|
95
|
+
const add = (name, ddl) => {
|
|
96
|
+
if (!cols.some((c) => c.name === name))
|
|
97
|
+
db.exec(`ALTER TABLE inferences ADD COLUMN ${ddl}`);
|
|
98
|
+
};
|
|
99
|
+
add("tokens_cache_write", "tokens_cache_write INTEGER NOT NULL DEFAULT 0");
|
|
100
|
+
add("tokens_cache_write_1h", "tokens_cache_write_1h INTEGER NOT NULL DEFAULT 0");
|
|
101
|
+
add("cache_key", "cache_key TEXT");
|
|
102
|
+
add("prefix_fingerprint", "prefix_fingerprint TEXT");
|
|
103
|
+
db.pragma("user_version = 10");
|
|
104
|
+
}
|
|
105
|
+
// v11 (routing-console R0, spec §2.1): the per-call ladder key. Three nullable
|
|
106
|
+
// columns; old rows read null ("recorded by an SDK older than 0.4.0"). Additive;
|
|
107
|
+
// same ALTER-over-a-list pattern as v10. No backfill (it cannot be derived).
|
|
108
|
+
if (db.pragma("user_version", { simple: true }) < 11) {
|
|
109
|
+
const cols = db.prepare("PRAGMA table_info(inferences)").all();
|
|
110
|
+
const add = (name, ddl) => {
|
|
111
|
+
if (!cols.some((c) => c.name === name))
|
|
112
|
+
db.exec(`ALTER TABLE inferences ADD COLUMN ${ddl}`);
|
|
113
|
+
};
|
|
114
|
+
add("call_id", "call_id TEXT");
|
|
115
|
+
add("attempt_seq", "attempt_seq INTEGER");
|
|
116
|
+
add("candidate_index", "candidate_index INTEGER");
|
|
117
|
+
db.pragma("user_version = 11");
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/telemetry/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,MAAM,EACN,OAAO,EACP,YAAY,EACZ,cAAc,EACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAA2B,KAAK,cAAc,EAAuB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/telemetry/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,MAAM,EACN,OAAO,EACP,YAAY,EACZ,cAAc,EACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAA2B,KAAK,cAAc,EAAuB,MAAM,UAAU,CAAC;AAG7F;;;;;GAKG;AACH,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,qEAAqE;IACrE,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IACpG,uEAAuE;IACvE,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;IACjG;mEAC+D;IAC/D,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iFAAiF;IACjF,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,kEAAkE;IAClE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxF,mEAAmE;IACnE,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC1F;;iFAE6E;IAC7E,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClE,iEAAiE;IACjE,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IAC3C,aAAa,IAAI,WAAW,EAAE,CAAC;IAC/B,oEAAoE;IACpE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7C,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9D;;;;;OAKG;IACH,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;CAC3E;AA0SD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,CA+Q3E"}
|
package/dist/telemetry/store.js
CHANGED
|
@@ -19,6 +19,7 @@ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
|
19
19
|
const node_fs_1 = require("node:fs");
|
|
20
20
|
const node_path_1 = require("node:path");
|
|
21
21
|
const health_1 = require("./health");
|
|
22
|
+
const store_migrations_1 = require("./store-migrations");
|
|
22
23
|
const SCHEMA_SQL = `
|
|
23
24
|
CREATE TABLE IF NOT EXISTS inferences (
|
|
24
25
|
id TEXT PRIMARY KEY,
|
|
@@ -47,7 +48,12 @@ CREATE TABLE IF NOT EXISTS inferences (
|
|
|
47
48
|
tokens_cache_write INTEGER NOT NULL DEFAULT 0,
|
|
48
49
|
tokens_cache_write_1h INTEGER NOT NULL DEFAULT 0,
|
|
49
50
|
cache_key TEXT,
|
|
50
|
-
prefix_fingerprint TEXT
|
|
51
|
+
prefix_fingerprint TEXT,
|
|
52
|
+
-- v11 (routing-console R0): the per-call ladder key. Fresh here; older
|
|
53
|
+
-- databases gain them via the ALTER ladder. Null = recorded pre-0.4.0.
|
|
54
|
+
call_id TEXT,
|
|
55
|
+
attempt_seq INTEGER,
|
|
56
|
+
candidate_index INTEGER
|
|
51
57
|
);
|
|
52
58
|
CREATE INDEX IF NOT EXISTS idx_inferences_route_ts ON inferences (route, ts);
|
|
53
59
|
-- v8 (G-4 observed-health): per-endpoint windowed aggregation filters by
|
|
@@ -213,6 +219,11 @@ function toTelemetryRow(r) {
|
|
|
213
219
|
tokensCacheWrite1h: r.tokens_cache_write_1h ?? 0,
|
|
214
220
|
cacheKey: r.cache_key ?? null,
|
|
215
221
|
prefixFingerprint: r.prefix_fingerprint ?? null,
|
|
222
|
+
// Ladder key (spec §2.1 R0) — `?? null`: a v10-or-earlier database returns
|
|
223
|
+
// undefined for a v11 ALTER column, and those rows genuinely predate the key.
|
|
224
|
+
callId: r.call_id ?? null,
|
|
225
|
+
attemptSeq: r.attempt_seq ?? null,
|
|
226
|
+
candidateIndex: r.candidate_index ?? null,
|
|
216
227
|
};
|
|
217
228
|
}
|
|
218
229
|
function toEnvelopeRow(r) {
|
|
@@ -228,107 +239,23 @@ function openTelemetryStore(dbPath) {
|
|
|
228
239
|
const db = new better_sqlite3_1.default(dbPath);
|
|
229
240
|
db.pragma("journal_mode = WAL");
|
|
230
241
|
db.exec(SCHEMA_SQL);
|
|
231
|
-
//
|
|
232
|
-
// schema from SCHEMA_SQL above;
|
|
233
|
-
//
|
|
234
|
-
|
|
235
|
-
if (db.pragma("user_version", { simple: true }) < 2) {
|
|
236
|
-
const columns = db.prepare("PRAGMA table_info(inferences)").all();
|
|
237
|
-
if (!columns.some((c) => c.name === "fingerprint_cell")) {
|
|
238
|
-
db.exec("ALTER TABLE inferences ADD COLUMN fingerprint_cell TEXT");
|
|
239
|
-
}
|
|
240
|
-
db.pragma("user_version = 2");
|
|
241
|
-
}
|
|
242
|
-
// v3 (Phase 3): captures table (from SCHEMA_SQL above — a no-op CREATE on
|
|
243
|
-
// fresh databases) + the variant/repair columns, additive and nullable.
|
|
244
|
-
if (db.pragma("user_version", { simple: true }) < 3) {
|
|
245
|
-
const columns = db.prepare("PRAGMA table_info(inferences)").all();
|
|
246
|
-
if (!columns.some((c) => c.name === "served_variant")) {
|
|
247
|
-
db.exec("ALTER TABLE inferences ADD COLUMN served_variant TEXT");
|
|
248
|
-
}
|
|
249
|
-
if (!columns.some((c) => c.name === "repaired_by")) {
|
|
250
|
-
db.exec("ALTER TABLE inferences ADD COLUMN repaired_by TEXT");
|
|
251
|
-
}
|
|
252
|
-
db.pragma("user_version = 3");
|
|
253
|
-
}
|
|
254
|
-
// v4 (addendum A1): pricing_missing flag — additive; old rows read false.
|
|
255
|
-
if (db.pragma("user_version", { simple: true }) < 4) {
|
|
256
|
-
const columns = db.prepare("PRAGMA table_info(inferences)").all();
|
|
257
|
-
if (!columns.some((c) => c.name === "pricing_missing")) {
|
|
258
|
-
db.exec("ALTER TABLE inferences ADD COLUMN pricing_missing INTEGER NOT NULL DEFAULT 0");
|
|
259
|
-
}
|
|
260
|
-
db.pragma("user_version = 4");
|
|
261
|
-
}
|
|
262
|
-
// v5 (Phase 4 WS2): feedback table — purely additive; SCHEMA_SQL's
|
|
263
|
-
// CREATE IF NOT EXISTS handles fresh AND migrating databases identically,
|
|
264
|
-
// so the bump only stamps the version.
|
|
265
|
-
if (db.pragma("user_version", { simple: true }) < 5) {
|
|
266
|
-
db.pragma("user_version = 5");
|
|
267
|
-
}
|
|
268
|
-
// v6 (Phase 4 WS3): ttfb_ms — additive, nullable; old rows read null.
|
|
269
|
-
if (db.pragma("user_version", { simple: true }) < 6) {
|
|
270
|
-
const columns = db.prepare("PRAGMA table_info(inferences)").all();
|
|
271
|
-
if (!columns.some((c) => c.name === "ttfb_ms")) {
|
|
272
|
-
db.exec("ALTER TABLE inferences ADD COLUMN ttfb_ms INTEGER");
|
|
273
|
-
}
|
|
274
|
-
db.pragma("user_version = 6");
|
|
275
|
-
}
|
|
276
|
-
// v7 (Phase 6 WS2): feedback.org_id + feedback.created_by — additive,
|
|
277
|
-
// nullable. Old verdicts read null on both, which is TRUE of them: they were
|
|
278
|
-
// recorded before either concept existed, and backfilling a guess into an
|
|
279
|
-
// unrecomputable record is exactly what 00017 refused to do.
|
|
280
|
-
if (db.pragma("user_version", { simple: true }) < 7) {
|
|
281
|
-
const columns = db.prepare("PRAGMA table_info(feedback)").all();
|
|
282
|
-
if (!columns.some((c) => c.name === "org_id")) {
|
|
283
|
-
db.exec("ALTER TABLE feedback ADD COLUMN org_id TEXT");
|
|
284
|
-
}
|
|
285
|
-
if (!columns.some((c) => c.name === "created_by")) {
|
|
286
|
-
db.exec("ALTER TABLE feedback ADD COLUMN created_by TEXT");
|
|
287
|
-
}
|
|
288
|
-
db.pragma("user_version = 7");
|
|
289
|
-
}
|
|
290
|
-
// v8 (G-4 observed-health): idx_inferences_provider_model_ts — index-only, no
|
|
291
|
-
// data change. SCHEMA_SQL's CREATE INDEX IF NOT EXISTS handles fresh AND
|
|
292
|
-
// migrating databases identically (it ran above), so the bump only stamps the
|
|
293
|
-
// version. Kept explicit rather than folded into v5's bare-stamp branch so the
|
|
294
|
-
// migration ladder reads one rung per schema epoch.
|
|
295
|
-
if (db.pragma("user_version", { simple: true }) < 8) {
|
|
296
|
-
db.exec("CREATE INDEX IF NOT EXISTS idx_inferences_provider_model_ts ON inferences (provider, model, ts)");
|
|
297
|
-
db.pragma("user_version = 8");
|
|
298
|
-
}
|
|
299
|
-
// v9 (Expansion E2 chunk A): runs + steps local outbox. Purely additive —
|
|
300
|
-
// SCHEMA_SQL's CREATE TABLE IF NOT EXISTS handles fresh AND migrating
|
|
301
|
-
// databases identically (it ran above), so the bump only stamps the version.
|
|
302
|
-
// A rig that never enables the artifact namespace simply never writes to them.
|
|
303
|
-
if (db.pragma("user_version", { simple: true }) < 9) {
|
|
304
|
-
db.pragma("user_version = 9");
|
|
305
|
-
}
|
|
306
|
-
// v10 (WS-A cache accounting): cache-write buckets + cache-key/prefix
|
|
307
|
-
// substrate. Additive; old rows read 0 / null (true of them — recorded before
|
|
308
|
-
// caching was accounted). Same ALTER pattern as v2–v6, folded over a list.
|
|
309
|
-
if (db.pragma("user_version", { simple: true }) < 10) {
|
|
310
|
-
const cols = db.prepare("PRAGMA table_info(inferences)").all();
|
|
311
|
-
const add = (name, ddl) => {
|
|
312
|
-
if (!cols.some((c) => c.name === name))
|
|
313
|
-
db.exec(`ALTER TABLE inferences ADD COLUMN ${ddl}`);
|
|
314
|
-
};
|
|
315
|
-
add("tokens_cache_write", "tokens_cache_write INTEGER NOT NULL DEFAULT 0");
|
|
316
|
-
add("tokens_cache_write_1h", "tokens_cache_write_1h INTEGER NOT NULL DEFAULT 0");
|
|
317
|
-
add("cache_key", "cache_key TEXT");
|
|
318
|
-
add("prefix_fingerprint", "prefix_fingerprint TEXT");
|
|
319
|
-
db.pragma("user_version = 10");
|
|
320
|
-
}
|
|
242
|
+
// Schema migrations — idempotent on every open (telemetry/store-migrations.ts).
|
|
243
|
+
// Fresh databases get the full current schema from SCHEMA_SQL above; older
|
|
244
|
+
// databases gain the additive columns via the ALTER ladder.
|
|
245
|
+
(0, store_migrations_1.runStoreMigrations)(db);
|
|
321
246
|
const insertInference = db.prepare(`
|
|
322
247
|
INSERT INTO inferences (
|
|
323
248
|
id, ts, route, route_version, provider, model, requested_tier, served_tier,
|
|
324
249
|
tokens_in, tokens_out, tokens_cached, cost_estimate_usd, latency_ms, ttfb_ms,
|
|
325
250
|
failure_class, attempts_json, tags_json, fingerprint_cell, served_variant, repaired_by, pricing_missing,
|
|
326
|
-
tokens_cache_write, tokens_cache_write_1h, cache_key, prefix_fingerprint
|
|
251
|
+
tokens_cache_write, tokens_cache_write_1h, cache_key, prefix_fingerprint,
|
|
252
|
+
call_id, attempt_seq, candidate_index
|
|
327
253
|
) VALUES (
|
|
328
254
|
@id, @ts, @route, @route_version, @provider, @model, @requested_tier, @served_tier,
|
|
329
255
|
@tokens_in, @tokens_out, @tokens_cached, @cost_estimate_usd, @latency_ms, @ttfb_ms,
|
|
330
256
|
@failure_class, @attempts_json, @tags_json, @fingerprint_cell, @served_variant, @repaired_by, @pricing_missing,
|
|
331
|
-
@tokens_cache_write, @tokens_cache_write_1h, @cache_key, @prefix_fingerprint
|
|
257
|
+
@tokens_cache_write, @tokens_cache_write_1h, @cache_key, @prefix_fingerprint,
|
|
258
|
+
@call_id, @attempt_seq, @candidate_index
|
|
332
259
|
)
|
|
333
260
|
`);
|
|
334
261
|
const selectByTag = db.prepare(`
|
|
@@ -413,6 +340,12 @@ function openTelemetryStore(dbPath) {
|
|
|
413
340
|
tokens_cache_write_1h: row.tokensCacheWrite1h ?? 0,
|
|
414
341
|
cache_key: row.cacheKey ?? null,
|
|
415
342
|
prefix_fingerprint: row.prefixFingerprint ?? null,
|
|
343
|
+
// `?? null`: the ladder-key fields are optional on TelemetryRow, and
|
|
344
|
+
// better-sqlite3 rejects an `undefined` bound param — a row that omits
|
|
345
|
+
// them (pre-0.4.0 read-back) binds null (the nullable-column default).
|
|
346
|
+
call_id: row.callId ?? null,
|
|
347
|
+
attempt_seq: row.attemptSeq ?? null,
|
|
348
|
+
candidate_index: row.candidateIndex ?? null,
|
|
416
349
|
});
|
|
417
350
|
},
|
|
418
351
|
recordFeedback(row) {
|
|
@@ -22,7 +22,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
22
22
|
exports.FAILURE_TEACHING = void 0;
|
|
23
23
|
exports.teach = teach;
|
|
24
24
|
exports.renderFailureForTerminal = renderFailureForTerminal;
|
|
25
|
-
const DOCS_BASE = "https://modelrig.dev/
|
|
25
|
+
const DOCS_BASE = "https://modelrig.dev/routing-reliability.html";
|
|
26
26
|
exports.FAILURE_TEACHING = {
|
|
27
27
|
content_invalid: {
|
|
28
28
|
class: "content_invalid",
|
package/dist/types/provider.d.ts
CHANGED
|
@@ -136,6 +136,19 @@ export interface AdapterRequest {
|
|
|
136
136
|
* the gemini adapter rejects a non-thinking model (adapters/gemini.ts).
|
|
137
137
|
*/
|
|
138
138
|
readonly reasoning?: ReasoningParams;
|
|
139
|
+
/**
|
|
140
|
+
* Declared response-format shaping (CE-9, spec R4). Threaded from the raw
|
|
141
|
+
* lane's `RawRunInput.responseFormat` (run/raw.ts). `"json_object"` maps to
|
|
142
|
+
* each provider's syntactic-JSON directive: the OpenAI-dialect providers
|
|
143
|
+
* (openai/deepseek/grok/deepinfra/fireworks) → `response_format: { type:
|
|
144
|
+
* "json_object" }`; gemini → `responseMimeType: "application/json"` WITHOUT a
|
|
145
|
+
* schema. This is MIME-SHAPING, NOT schema enforcement — F4 stands: the raw
|
|
146
|
+
* lane never validates or repairs and `meta.validated` stays false. Anthropic
|
|
147
|
+
* has no equivalent and FAILS CLOSED at the raw-lane guard (run/raw.ts);
|
|
148
|
+
* absent ⇒ no key added (byte-identical). Never set alongside a non-null
|
|
149
|
+
* `outputSchema` — the routed lane uses `outputSchema`, the raw lane this
|
|
150
|
+
* field; where both could appear, `outputSchema` (native/strict) wins. */
|
|
151
|
+
readonly responseFormat?: "json_object";
|
|
139
152
|
/** Unified tool-calling (spec §4.4) — tools the model may call. Adapters map
|
|
140
153
|
* to native tool shapes; absent => no tool surface (identical to today). */
|
|
141
154
|
readonly tools?: readonly ToolDefinition[];
|