modelrig 0.3.0 → 0.5.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 +269 -0
- package/README.md +79 -14
- package/dist/adapters/deepseek.d.ts.map +1 -1
- package/dist/adapters/deepseek.js +8 -1
- package/dist/adapters/gemini.d.ts +45 -0
- package/dist/adapters/gemini.d.ts.map +1 -1
- package/dist/adapters/gemini.js +67 -6
- 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/artifacts/artifact.d.ts +3 -2
- package/dist/artifacts/artifact.d.ts.map +1 -1
- package/dist/artifacts/artifact.js +11 -4
- package/dist/artifacts/run-context.d.ts +21 -2
- package/dist/artifacts/run-context.d.ts.map +1 -1
- package/dist/artifacts/run-context.js +46 -1
- package/dist/bakeoff/replay.d.ts.map +1 -1
- package/dist/bakeoff/replay.js +17 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +26 -5
- package/dist/config.d.ts +7 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/index.d.ts +21 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -26
- 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/registry/select.d.ts +59 -0
- package/dist/registry/select.d.ts.map +1 -1
- package/dist/registry/select.js +66 -0
- package/dist/routes/loader-warnings.d.ts +28 -0
- package/dist/routes/loader-warnings.d.ts.map +1 -0
- package/dist/routes/loader-warnings.js +56 -0
- package/dist/routes/loader.d.ts +1 -11
- package/dist/routes/loader.d.ts.map +1 -1
- package/dist/routes/loader.js +44 -26
- 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-defaults.d.ts +52 -0
- package/dist/run/raw-defaults.d.ts.map +1 -0
- package/dist/run/raw-defaults.js +123 -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 +53 -11
- package/dist/run/raw.d.ts.map +1 -1
- package/dist/run/raw.js +157 -31
- 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 +21 -1
- package/dist/run/resolve.d.ts.map +1 -1
- package/dist/run/resolve.js +29 -6
- 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 +7 -1
- package/dist/run/run.d.ts.map +1 -1
- package/dist/run/run.js +38 -55
- package/dist/run/variant.d.ts +43 -0
- package/dist/run/variant.d.ts.map +1 -0
- package/dist/run/variant.js +86 -0
- package/dist/savings/emit.d.ts +33 -0
- package/dist/savings/emit.d.ts.map +1 -1
- package/dist/savings/emit.js +75 -3
- 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 +37 -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/dist/watch/evaluate.d.ts +27 -1
- package/dist/watch/evaluate.d.ts.map +1 -1
- package/dist/watch/evaluate.js +13 -0
- package/dist/watch/proposals.d.ts +28 -0
- package/dist/watch/proposals.d.ts.map +1 -1
- package/dist/watch/proposals.js +51 -0
- package/package.json +1 -1
|
@@ -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[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/types/provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/types/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/types/route.d.ts
CHANGED
|
@@ -7,6 +7,23 @@ import type { ProviderId, SamplingParams, ServiceTier, ToolCall, ToolChoice, Too
|
|
|
7
7
|
export interface CandidateSpec {
|
|
8
8
|
readonly provider: ProviderId;
|
|
9
9
|
readonly model: string;
|
|
10
|
+
/**
|
|
11
|
+
* Declare-first experiment flag (routing-console spec §4.4, R3). A `trial`
|
|
12
|
+
* candidate is DECLARED — it is in the list the brand type, the loader and the
|
|
13
|
+
* runtime candidate-set guard all derive from, so the candidate-set invariant
|
|
14
|
+
* is untouched — but `resolveCandidates` drops it on EVERY live path
|
|
15
|
+
* (`rig.run`, `runStream`, `runBundle`, the hosted gateway slug lane) exactly
|
|
16
|
+
* as it drops a `providers.ignore` entry. Only the bake-off replay path
|
|
17
|
+
* (`replayVariant`, run `mode: "trial"`) keeps it, so a customer can measure a
|
|
18
|
+
* new model on real captured traffic before promoting it to a live candidate.
|
|
19
|
+
* Optional & additive (S3): absent ⇒ false ⇒ an ordinary live candidate.
|
|
20
|
+
*
|
|
21
|
+
* OLDER-SDK CAVEAT (spec §7): the pre-0.4.0 loader is TOLERANT of unknown
|
|
22
|
+
* candidate keys — it would ignore `trial` and serve the candidate LIVE. A
|
|
23
|
+
* bundle using `trial: true` therefore REQUIRES the SDK release that
|
|
24
|
+
* understands it; the console's declare-YAML says so.
|
|
25
|
+
*/
|
|
26
|
+
readonly trial?: boolean;
|
|
10
27
|
}
|
|
11
28
|
export type Requirement = "schema_conformant" | "grounded" | "zero_retention" | "trace_visible";
|
|
12
29
|
export type Preference = "cost" | "latency";
|
|
@@ -57,6 +74,14 @@ export interface RouteVariant {
|
|
|
57
74
|
/** JSON rung override for this variant. */
|
|
58
75
|
readonly json?: "native" | "json_mode";
|
|
59
76
|
readonly repair?: RepairPolicy;
|
|
77
|
+
/**
|
|
78
|
+
* COMPUTED at load (not authored): true when every candidate this variant
|
|
79
|
+
* narrows to is a declared `trial` candidate (routing-console spec §4.4). A
|
|
80
|
+
* trial variant is valid for `rig.bakeoff` but a `RouteConfigError` if a live
|
|
81
|
+
* caller selects it — trial candidates are declared, never live-served. The
|
|
82
|
+
* declare-first flow's `trial-<provider>-<model>` variant is exactly this.
|
|
83
|
+
*/
|
|
84
|
+
readonly trialOnly?: boolean;
|
|
60
85
|
}
|
|
61
86
|
export interface RouteBundle {
|
|
62
87
|
readonly route: string;
|
|
@@ -100,6 +125,12 @@ export interface RunTags {
|
|
|
100
125
|
export interface RunOptions {
|
|
101
126
|
readonly input: Record<string, unknown>;
|
|
102
127
|
readonly tags: RunTags;
|
|
128
|
+
/** Names the ground-truth step this run records (G1 spec §3) — the same field
|
|
129
|
+
* the raw lane exposes, so a routed and a raw call, plus an `artifact.save`,
|
|
130
|
+
* can be composed into ONE step group. Resolution: `stepKey ?? tags.step ??`
|
|
131
|
+
* an auto-minted `route#n`. Validated `[A-Za-z0-9_.:#-]{1,128}`; an invalid
|
|
132
|
+
* value is warned and dropped to the auto key. Absent ⇒ unchanged behavior. */
|
|
133
|
+
readonly stepKey?: string;
|
|
103
134
|
readonly budget?: {
|
|
104
135
|
readonly envelope: string;
|
|
105
136
|
/** Budget for this envelope when it is FIRST opened (open-or-get: the first
|
|
@@ -144,7 +175,7 @@ export interface RunOptions {
|
|
|
144
175
|
* `AdapterRequest.cache` for the matching-provider candidate; ModelRig passes
|
|
145
176
|
* it through verbatim and **never creates, refreshes, or deletes the underlying
|
|
146
177
|
* resource** — long jobs that outlive the provider's default TTL need the
|
|
147
|
-
* customer's OWN heartbeat (see modelrig.dev/
|
|
178
|
+
* customer's OWN heartbeat (see modelrig.dev/caching-lifecycle.html). This wins
|
|
148
179
|
* over the WS-C `cache: auto` generated stamp; absent, WS-C behavior stands
|
|
149
180
|
* byte-for-byte.
|
|
150
181
|
*/
|
|
@@ -186,6 +217,11 @@ export interface RunMeta {
|
|
|
186
217
|
/** "provider/model" that repaired the output — null when unrepaired
|
|
187
218
|
* (Phase 3 WS2). */
|
|
188
219
|
readonly repairedBy: string | null;
|
|
220
|
+
/** The per-call ladder key (routing-console spec §2.1 R0) — the `call_id`
|
|
221
|
+
* shared by every telemetry row this `run`/`runStream`/`runBundle`/`runRaw`
|
|
222
|
+
* invocation wrote, so a caller can correlate a `RunResult` with its ladder in
|
|
223
|
+
* the console. Additive & optional: a pre-0.4.0 caller's meta omits it. */
|
|
224
|
+
readonly callId?: string;
|
|
189
225
|
/** Normalized url_citation annotations (Phase 3 WS3) — present when the
|
|
190
226
|
* grounding-inject rung served this run. */
|
|
191
227
|
readonly citations?: ReadonlyArray<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/types/route.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/types/route.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,21 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { FailureClass } from "./failures";
|
|
6
6
|
import type { RunTags } from "./route";
|
|
7
|
+
/**
|
|
8
|
+
* The rung a telemetry row occupied on the candidate ladder (routing-console R1
|
|
9
|
+
* review ruling F1). SDK-stamped into `tags.rung` on EVERY row so the dashboard
|
|
10
|
+
* and ladder view can tell a real candidate dispatch apart from a tool-call turn
|
|
11
|
+
* or a pre-dispatch failure without column heuristics:
|
|
12
|
+
* • `primary` — the first dispatch of a candidate on this call.
|
|
13
|
+
* • `retry` — a later same-candidate dispatch after a transient fail.
|
|
14
|
+
* • `repair` — a repair-rung re-ask (carries the repaired candidate).
|
|
15
|
+
* • `search` — the grounding-inject search-cost row (`provider="search"`).
|
|
16
|
+
* • `tool_call` — a tool-call turn (a real model call, but not a serve).
|
|
17
|
+
* • `predispatch_fail` — a terminal failure recorded before any dispatch.
|
|
18
|
+
* Rows written by an SDK older than this release carry no `rung`; the rollup
|
|
19
|
+
* falls back to column heuristics (`repaired_by`, `provider="search"`).
|
|
20
|
+
*/
|
|
21
|
+
export type TelemetryRung = "primary" | "retry" | "repair" | "search" | "tool_call" | "predispatch_fail";
|
|
7
22
|
export interface TelemetryRow {
|
|
8
23
|
readonly id: string;
|
|
9
24
|
readonly ts: string;
|
|
@@ -60,6 +75,22 @@ export interface TelemetryRow {
|
|
|
60
75
|
/** "provider/model" of the repair model that produced this row's output
|
|
61
76
|
* (Phase 3 WS2) — null for unrepaired attempts. */
|
|
62
77
|
readonly repairedBy: string | null;
|
|
78
|
+
/** The per-CALL ladder key (routing-console spec §2.1 R0). One `callId` per
|
|
79
|
+
* `rig.run`/`runStream`/`runBundle`/`runRaw` invocation; every attempt row of
|
|
80
|
+
* that call (primary, retry, repair, grounding-search, tool-call) carries it,
|
|
81
|
+
* so a dashboard can reconstruct the exact ladder one call walked. OPTIONAL &
|
|
82
|
+
* additive (same shape as {@link cacheKey}): a row that omits it — from an SDK
|
|
83
|
+
* older than 0.4.0, read back as `null` — predates the ladder key and is never
|
|
84
|
+
* backfilled. Every SDK write path (run loop, raw lane) sets all three. */
|
|
85
|
+
readonly callId?: string | null;
|
|
86
|
+
/** 1-based order of this row WITHIN its call, monotonic across every row kind
|
|
87
|
+
* (spec §2.1). Optional/additive; null for a pre-0.4.0 row. */
|
|
88
|
+
readonly attemptSeq?: number | null;
|
|
89
|
+
/** Position of the dispatched candidate in the call's EFFECTIVE declared list
|
|
90
|
+
* (after variant narrowing and per-run filters; 0 = first eligible). A repair
|
|
91
|
+
* row carries the index of the candidate being repaired; the raw lane is 0.
|
|
92
|
+
* Optional/additive; null for a pre-0.4.0 row. */
|
|
93
|
+
readonly candidateIndex?: number | null;
|
|
63
94
|
}
|
|
64
95
|
export interface EnvelopeRow {
|
|
65
96
|
readonly envelopeKey: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/types/telemetry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;wCAEoC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;;;;;kFAM8E;IAC9E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;wFACoF;IACpF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;uDACmD;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;wEACoE;IACpE,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;oDAGgD;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;oFACgF;IAChF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C;;6DAEyD;IACzD,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC;oDACgD;IAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC;uDACmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/types/telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-cli.d.ts","sourceRoot":"","sources":["../src/validate-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"validate-cli.d.ts","sourceRoot":"","sources":["../src/validate-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,wBAAgB,cAAc,IAAI,MAAM,CA8CvC"}
|
package/dist/validate-cli.js
CHANGED
|
@@ -13,11 +13,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
exports.runValidateCli = runValidateCli;
|
|
14
14
|
const node_path_1 = require("node:path");
|
|
15
15
|
const config_1 = require("./config");
|
|
16
|
+
const rawonly_1 = require("./run/rawonly");
|
|
16
17
|
const loader_1 = require("./routes/loader");
|
|
17
18
|
const manifest_1 = require("./routes/manifest");
|
|
18
19
|
function runValidateCli() {
|
|
19
20
|
const config = (0, config_1.loadConfigFromEnv)();
|
|
20
|
-
const
|
|
21
|
+
const routesDir = (0, rawonly_1.requireRoutesDir)(config, "modelrig validate");
|
|
22
|
+
const rigDir = (0, node_path_1.dirname)(routesDir);
|
|
21
23
|
let failures = 0;
|
|
22
24
|
// rig.yaml (manifest) — absence is fine (never gates); a malformed one is a
|
|
23
25
|
// config error surfaced like any route.
|
|
@@ -29,10 +31,21 @@ function runValidateCli() {
|
|
|
29
31
|
failures += 1;
|
|
30
32
|
console.error(`FAIL rig.yaml: ${configErrorText(err)}`);
|
|
31
33
|
}
|
|
32
|
-
// Every route bundle — one bad file never hides the rest.
|
|
33
|
-
|
|
34
|
+
// Every route bundle — one bad file never hides the rest. A validation command
|
|
35
|
+
// should REPORT, never throw: a missing/unreadable routes dir is a FAIL line +
|
|
36
|
+
// nonzero exit, not a rejected promise (so an embedder calling this gets a clean
|
|
37
|
+
// return, and the CLI output stays uniform).
|
|
38
|
+
let results;
|
|
39
|
+
try {
|
|
40
|
+
results = (0, loader_1.validateRoutesDir)(routesDir);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
console.error(`FAIL routes: ${configErrorText(err)}`);
|
|
44
|
+
console.error(`\n${failures + 1} problem(s) found.`);
|
|
45
|
+
return 1;
|
|
46
|
+
}
|
|
34
47
|
if (results.length === 0) {
|
|
35
|
-
console.log(`(no route bundles in ${
|
|
48
|
+
console.log(`(no route bundles in ${routesDir})`);
|
|
36
49
|
}
|
|
37
50
|
for (const r of results) {
|
|
38
51
|
if (r.ok) {
|