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
package/dist/adapters/grok.js
CHANGED
|
@@ -23,6 +23,7 @@ const openai_1 = __importDefault(require("openai"));
|
|
|
23
23
|
const tool_mapping_1 = require("./tool-mapping");
|
|
24
24
|
const openai_stream_1 = require("./openai-stream");
|
|
25
25
|
const sampling_1 = require("./sampling");
|
|
26
|
+
const raw_support_1 = require("../run/raw-support");
|
|
26
27
|
const GROK_BASE_URL = "https://api.x.ai/v1";
|
|
27
28
|
const DEFAULT_MAX_TOKENS = 32000;
|
|
28
29
|
function grokSupports(feature, _model) {
|
|
@@ -65,6 +66,14 @@ function classifyGrokFailure(message) {
|
|
|
65
66
|
fixHint: "the candidate model was not found — fix the model id in the route's candidate list",
|
|
66
67
|
};
|
|
67
68
|
}
|
|
69
|
+
// CE-9 R1: a non-reasoning grok variant rejects `reasoning_effort` — teach the
|
|
70
|
+
// fix (pick a reasoning variant) rather than surface a cryptic 400.
|
|
71
|
+
if (/reasoning_effort/.test(msg)) {
|
|
72
|
+
return {
|
|
73
|
+
cls: "network",
|
|
74
|
+
fixHint: "this Grok model does not accept reasoning_effort — remove reasoning or pick a Grok reasoning variant",
|
|
75
|
+
};
|
|
76
|
+
}
|
|
68
77
|
return { cls: "network" };
|
|
69
78
|
}
|
|
70
79
|
function buildGrokParams(model, req) {
|
|
@@ -84,6 +93,17 @@ function buildGrokParams(model, req) {
|
|
|
84
93
|
...(req.cache?.key !== undefined && req.cache.key !== ""
|
|
85
94
|
? { prompt_cache_key: req.cache.key }
|
|
86
95
|
: {}),
|
|
96
|
+
// CE-9 R1: coarsen the neutral level to xAI's low|high (disclosed mapping).
|
|
97
|
+
// Absent ⇒ no key. A non-reasoning grok model's rejection is taught below.
|
|
98
|
+
...(req.reasoning !== undefined
|
|
99
|
+
? { reasoning_effort: (0, raw_support_1.coarsenGrokReasoningEffort)(req.reasoning.level) }
|
|
100
|
+
: {}),
|
|
101
|
+
// CE-9b: grounding is NOT mapped here. xAI retired Live Search
|
|
102
|
+
// (`search_parameters` → HTTP 410 on the CE-9 live gate); the replacement
|
|
103
|
+
// `web_search` tool is Responses-API-only. The raw-lane guard fails grok
|
|
104
|
+
// grounding closed (matrix: supported=false) until CE-9b adds that path.
|
|
105
|
+
// response_format: a native strict json_schema (routed lane) wins; else the
|
|
106
|
+
// RAW lane's mime-shaping json_object (CE-9 R4). Absent both ⇒ no key.
|
|
87
107
|
...(req.outputSchema !== null
|
|
88
108
|
? {
|
|
89
109
|
response_format: {
|
|
@@ -95,7 +115,9 @@ function buildGrokParams(model, req) {
|
|
|
95
115
|
},
|
|
96
116
|
},
|
|
97
117
|
}
|
|
98
|
-
:
|
|
118
|
+
: req.responseFormat === "json_object"
|
|
119
|
+
? { response_format: { type: "json_object" } }
|
|
120
|
+
: {}),
|
|
99
121
|
...(req.tools !== undefined && req.tools.length > 0
|
|
100
122
|
? {
|
|
101
123
|
tools: (0, tool_mapping_1.toOpenAITools)(req.tools),
|
|
@@ -49,6 +49,13 @@ export interface OpenAICompatShapedParams {
|
|
|
49
49
|
/** CE-6 declared sampling — present only when the route/raw asks for them. */
|
|
50
50
|
readonly temperature?: number;
|
|
51
51
|
readonly top_p?: number;
|
|
52
|
+
/** CE-9 R1 — reasoning effort forwarded verbatim (1:1). Present only when the
|
|
53
|
+
* caller declared `reasoning`; a host/model that does not accept it rejects at
|
|
54
|
+
* the provider and `classifyCompatFailure` teaches (no per-model allowlist). */
|
|
55
|
+
readonly reasoning_effort?: "minimal" | "low" | "medium" | "high";
|
|
56
|
+
/** CE-9 R3 — the DeepInfra prompt_cache_key gap: `cache.key` → the routing
|
|
57
|
+
* hint. Present only when the caller supplies `cache.key`. */
|
|
58
|
+
readonly prompt_cache_key?: string;
|
|
52
59
|
readonly response_format?: {
|
|
53
60
|
readonly type: "json_object";
|
|
54
61
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-compat.d.ts","sourceRoot":"","sources":["../../src/adapters/openai-compat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAIV,cAAc,EACd,eAAe,EACf,UAAU,EACX,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAMhE,OAAO,KAAK,EAAuB,cAAc,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAQhG;;8CAE8C;AAC9C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACnD;AAED;;;0EAG0E;AAC1E,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,GAAG,WAAW,EAAE,gBAAgB,CAAC,CAG7F,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"openai-compat.d.ts","sourceRoot":"","sources":["../../src/adapters/openai-compat.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,6 +66,15 @@ function classifyCompatFailure(message, host) {
|
|
|
66
66
|
fixHint: "the candidate model was not found — fix the model id in the route's candidate list",
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
|
+
// CE-9 R1: a model that does not accept `reasoning_effort` rejects the request
|
|
70
|
+
// — teach it rather than surfacing a cryptic generic 400 (the reason we forward
|
|
71
|
+
// verbatim instead of keeping a per-model allowlist).
|
|
72
|
+
if (/reasoning_effort/.test(msg)) {
|
|
73
|
+
return {
|
|
74
|
+
cls: "network",
|
|
75
|
+
fixHint: `this ${host} model does not accept reasoning_effort — remove reasoning or pick a reasoning model`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
69
78
|
return { cls: "network" };
|
|
70
79
|
}
|
|
71
80
|
/** json_object mode 400s on several compat backends when the literal word
|
|
@@ -93,6 +102,18 @@ function buildOpenAICompatParams(model, req, profileFlags) {
|
|
|
93
102
|
stream: true,
|
|
94
103
|
stream_options: { include_usage: true },
|
|
95
104
|
...(0, sampling_1.openAISamplingFields)(req),
|
|
105
|
+
// CE-9 R1: forward reasoning effort verbatim (1:1). Absent ⇒ no key.
|
|
106
|
+
...(req.reasoning !== undefined ? { reasoning_effort: req.reasoning.level } : {}),
|
|
107
|
+
// CE-9 R3: the DeepInfra prompt_cache_key gap — map cache.key → the routing
|
|
108
|
+
// hint (absent ⇒ no key, byte-identical). Additive; unrecognized on a host
|
|
109
|
+
// that doesn't cache, the hint is simply ignored.
|
|
110
|
+
...(req.cache?.key !== undefined && req.cache.key !== ""
|
|
111
|
+
? { prompt_cache_key: req.cache.key }
|
|
112
|
+
: {}),
|
|
113
|
+
// response_format: a routed strict json_schema (structured_native profile)
|
|
114
|
+
// wins; else routed json_object; else the RAW lane's mime-shaping json_object
|
|
115
|
+
// (CE-9 R4). The raw path carries NO JSON_GUARD injection — the word-"JSON"
|
|
116
|
+
// wrinkle is the caller's prompt responsibility on the raw lane.
|
|
96
117
|
...(wantJson
|
|
97
118
|
? strict
|
|
98
119
|
? {
|
|
@@ -102,7 +123,9 @@ function buildOpenAICompatParams(model, req, profileFlags) {
|
|
|
102
123
|
},
|
|
103
124
|
}
|
|
104
125
|
: { response_format: { type: "json_object" } }
|
|
105
|
-
:
|
|
126
|
+
: req.responseFormat === "json_object"
|
|
127
|
+
? { response_format: { type: "json_object" } }
|
|
128
|
+
: {}),
|
|
106
129
|
...(req.tools !== undefined && req.tools.length > 0
|
|
107
130
|
? {
|
|
108
131
|
tools: (0, tool_mapping_1.toOpenAITools)(req.tools),
|
|
@@ -38,7 +38,14 @@ export interface OpenAIShapedParams {
|
|
|
38
38
|
readonly service_tier?: "flex" | "priority";
|
|
39
39
|
readonly prompt_cache_key?: string;
|
|
40
40
|
readonly prompt_cache_retention?: "24h";
|
|
41
|
+
/** CE-9 R1 — reasoning effort forwarded verbatim (1:1 from the neutral
|
|
42
|
+
* `level`). Present only when the caller declared `reasoning`. A model that
|
|
43
|
+
* does not accept it rejects at the provider; `classifyOpenAIFailure` turns
|
|
44
|
+
* that 400 into a teaching failure (no per-model allowlist). */
|
|
45
|
+
readonly reasoning_effort?: "minimal" | "low" | "medium" | "high";
|
|
41
46
|
readonly response_format?: {
|
|
47
|
+
readonly type: "json_object";
|
|
48
|
+
} | {
|
|
42
49
|
readonly type: "json_schema";
|
|
43
50
|
readonly json_schema: {
|
|
44
51
|
readonly name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAIV,cAAc,EACd,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAMhE,OAAO,KAAK,EAAuB,cAAc,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAMhG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAI9D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAe9E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/adapters/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAIV,cAAc,EACd,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAMhE,OAAO,KAAK,EAAuB,cAAc,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAMhG,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAI9D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAe9E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CA8BxE;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE;QAAE,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAA;KAAE,CAAC;IAC1D,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,KAAK,CAAC;IACxC;;;oEAGgE;IAChE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClE,QAAQ,CAAC,eAAe,CAAC,EACrB;QAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;KAAE,GAChC;QACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;QAC7B,QAAQ,CAAC,WAAW,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;SAAE,CAAC;KACjG,CAAC;IACN,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,kBAAkB,CAuDtF;AAcD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,eAAe,CAwMhF"}
|
package/dist/adapters/openai.js
CHANGED
|
@@ -71,6 +71,18 @@ function classifyOpenAIFailure(message) {
|
|
|
71
71
|
fixHint: "the candidate model was not found — fix the model id in the route's candidate list",
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
|
+
// CE-9 R1: a model that does not accept `reasoning_effort` rejects the request
|
|
75
|
+
// (400 "unsupported/unknown parameter reasoning_effort"). Teach it instead of
|
|
76
|
+
// surfacing a cryptic generic 400 — the whole point of forwarding verbatim
|
|
77
|
+
// rather than keeping a per-model allowlist. Mirrors gemini's invalid_argument
|
|
78
|
+
// → network + fixHint (a request-shape rejection, retryable to the next
|
|
79
|
+
// candidate, never terminal).
|
|
80
|
+
if (/reasoning_effort/.test(msg)) {
|
|
81
|
+
return {
|
|
82
|
+
cls: "network",
|
|
83
|
+
fixHint: "this model does not accept reasoning_effort — remove reasoning or pick a reasoning model (e.g. an o-series / gpt-5 reasoning model)",
|
|
84
|
+
};
|
|
85
|
+
}
|
|
74
86
|
return { cls: "network" };
|
|
75
87
|
}
|
|
76
88
|
const DEFAULT_MAX_COMPLETION_TOKENS = 32000;
|
|
@@ -98,6 +110,14 @@ function buildOpenAIParams(model, req) {
|
|
|
98
110
|
...((req.cache.ttlSeconds ?? 0) >= 86400 ? { prompt_cache_retention: "24h" } : {}),
|
|
99
111
|
}
|
|
100
112
|
: {}),
|
|
113
|
+
// CE-9 R1: forward reasoning effort verbatim (1:1). Absent ⇒ no key
|
|
114
|
+
// (byte-identical). The provider — not an allowlist here — decides whether
|
|
115
|
+
// the model accepts it; a rejection is classified teachably below.
|
|
116
|
+
...(req.reasoning !== undefined ? { reasoning_effort: req.reasoning.level } : {}),
|
|
117
|
+
// response_format precedence: a native/strict json_schema (routed lane,
|
|
118
|
+
// outputSchema set) WINS; else the raw lane's mime-shaping json_object
|
|
119
|
+
// (CE-9 R4). The two never co-occur — the routed lane sets outputSchema, the
|
|
120
|
+
// raw lane responseFormat — but the precedence keeps resolution deterministic.
|
|
101
121
|
...(req.outputSchema !== null
|
|
102
122
|
? {
|
|
103
123
|
response_format: {
|
|
@@ -109,7 +129,9 @@ function buildOpenAIParams(model, req) {
|
|
|
109
129
|
},
|
|
110
130
|
},
|
|
111
131
|
}
|
|
112
|
-
:
|
|
132
|
+
: req.responseFormat === "json_object"
|
|
133
|
+
? { response_format: { type: "json_object" } }
|
|
134
|
+
: {}),
|
|
113
135
|
...(req.tools !== undefined && req.tools.length > 0
|
|
114
136
|
? {
|
|
115
137
|
tools: (0, tool_mapping_1.toOpenAITools)(req.tools),
|
|
@@ -39,8 +39,9 @@ export interface ArtifactSaveOptions {
|
|
|
39
39
|
/** The pipeline step this artifact belongs to — the semantic grouping key the
|
|
40
40
|
* console's chain view orders on (E3 spec §2.1). E2 deferred step attribution
|
|
41
41
|
* ("refined when @step scopes persist, E3"); an EXPLICIT key set by the caller
|
|
42
|
-
* is the E3 refinement
|
|
43
|
-
*
|
|
42
|
+
* is the E3 refinement and stays the safe choice under parallel steps inside
|
|
43
|
+
* ONE run; absent one, the ambient current step (G1) is used — see
|
|
44
|
+
* run-context.ts currentStepKey(). Null (no key, no context) ⇒ ungrouped. */
|
|
44
45
|
readonly stepKey?: string;
|
|
45
46
|
/** The step attempt this artifact came from (mirrors steps.attempt_no). Only
|
|
46
47
|
* meaningful alongside stepKey; null for artifacts saved outside a step. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact.d.ts","sourceRoot":"","sources":["../../src/artifacts/artifact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAEnF;4DAC4D;AAC5D,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEnG;8CAC8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;CAC1C;AAYD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB
|
|
1
|
+
{"version":3,"file":"artifact.d.ts","sourceRoot":"","sources":["../../src/artifacts/artifact.ts"],"names":[],"mappings":"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"}
|
|
@@ -166,6 +166,11 @@ function createArtifactApi(deps) {
|
|
|
166
166
|
const schema = opts.schema ?? null;
|
|
167
167
|
const id = (0, node_crypto_1.randomUUID)();
|
|
168
168
|
const version = opts.supersedes !== undefined ? opts.supersedes.version + 1 : 1;
|
|
169
|
+
// G1 (spec §3): an explicit stepKey wins; absent, the artifact lands in the
|
|
170
|
+
// AMBIENT step — the most recent auto-step in this run context — so
|
|
171
|
+
// `artifact.save` and the run/@step graph compose. Null outside a step (or
|
|
172
|
+
// outside a run context), exactly as before.
|
|
173
|
+
const stepKey = opts.stepKey ?? ctx?.currentStepKey() ?? null;
|
|
169
174
|
// Custody applies only when a rig content policy exists AND the caller left
|
|
170
175
|
// the bytes to us (a caller-supplied contentRef = their own store; managed
|
|
171
176
|
// custody must not double-home it).
|
|
@@ -181,9 +186,10 @@ function createArtifactApi(deps) {
|
|
|
181
186
|
store.recordArtifact({
|
|
182
187
|
id,
|
|
183
188
|
runId: ctx?.runId ?? null,
|
|
184
|
-
// E3: step attribution is
|
|
185
|
-
//
|
|
186
|
-
|
|
189
|
+
// E3: step attribution is an explicit caller-supplied key; G1 adds the
|
|
190
|
+
// ambient-step fallback (resolved above) so a save with no stepKey joins
|
|
191
|
+
// the current run/@step. Absent both ⇒ null, exactly as before.
|
|
192
|
+
stepKey,
|
|
187
193
|
attemptNo: opts.attemptNo ?? null,
|
|
188
194
|
task: opts.task ?? null,
|
|
189
195
|
name: opts.name,
|
|
@@ -243,7 +249,8 @@ function createArtifactApi(deps) {
|
|
|
243
249
|
store.recordArtifact({
|
|
244
250
|
id: redactedId,
|
|
245
251
|
runId: ctx?.runId ?? null,
|
|
246
|
-
|
|
252
|
+
// Same ambient-step resolution as the original row it supersedes.
|
|
253
|
+
stepKey,
|
|
247
254
|
attemptNo: opts.attemptNo ?? null,
|
|
248
255
|
task: opts.task ?? null,
|
|
249
256
|
name: opts.name,
|
|
@@ -68,16 +68,35 @@ export interface ActiveRunContext {
|
|
|
68
68
|
takeLoadedIds(): string[];
|
|
69
69
|
/** Mint a unique step key for ONE rig.run()/@step invocation. Retries of that
|
|
70
70
|
* invocation reuse the returned key (attempt_no distinguishes them); a later
|
|
71
|
-
* invocation gets a fresh key, so two calls never collapse into one step.
|
|
71
|
+
* invocation gets a fresh key, so two calls never collapse into one step. Also
|
|
72
|
+
* marks the minted key as the ambient step (see currentStepKey). */
|
|
72
73
|
nextStepKey(label: string): string;
|
|
74
|
+
/** The most recent step key in this context — the ambient step an
|
|
75
|
+
* `artifact.save` without an explicit `stepKey` attaches to (G1 spec §3). Set
|
|
76
|
+
* by both `nextStepKey` (auto-steps, `@step` scopes) and `emitGroundTruthStep`
|
|
77
|
+
* (a raw-lane call with a caller-supplied key that never minted). Null before
|
|
78
|
+
* any step in this run. NOTE: a single mutable current-step cross-attributes
|
|
79
|
+
* under parallel step waves on ONE context — use `run.scope()` (each concurrent
|
|
80
|
+
* run gets its own context) or an explicit `stepKey` when steps overlap. */
|
|
81
|
+
currentStepKey(): string | null;
|
|
73
82
|
/** Record one ground-truth step attempt (the rig.run auto-step). attempt_no is
|
|
74
83
|
* assigned here, per step key. Fail-open — a buffer error is logged, dropped,
|
|
75
|
-
* and never thrown into the run loop. */
|
|
84
|
+
* and never thrown into the run loop. Marks its key as the ambient step. */
|
|
76
85
|
emitGroundTruthStep(input: GroundTruthStepInput): void;
|
|
77
86
|
}
|
|
78
87
|
/** The active run context, or null when none is set (namespace disabled, or no
|
|
79
88
|
* run.start on this async path). Read by the run loop's auto-step seam. */
|
|
80
89
|
export declare function getActiveRunContext(): ActiveRunContext | null;
|
|
90
|
+
/** True when `key` is a valid caller-supplied step key (spec §3). */
|
|
91
|
+
export declare function isValidStepKey(key: string): boolean;
|
|
92
|
+
/** Resolve a ground-truth step key for either lane (spec §3): an explicit
|
|
93
|
+
* caller-supplied key wins, then the `tags.step` convention, else a freshly
|
|
94
|
+
* minted auto key. A caller key is validated `[A-Za-z0-9_.:#-]{1,128}`; an
|
|
95
|
+
* invalid one is warned (once per bad value) and DROPPED to the auto key —
|
|
96
|
+
* instrumentation never throws a telemetry-label error into customer code. */
|
|
97
|
+
export declare function resolveStepKey(explicit: string | undefined, tagStep: string | undefined, auto: () => string): string;
|
|
98
|
+
/** Test-only: clear the once-per-process invalid-stepKey warning latch. */
|
|
99
|
+
export declare function resetStepKeyWarningsForTest(): void;
|
|
81
100
|
/** A run-level evaluation the caller attaches (E5 chunk V.2) — the run-subject
|
|
82
101
|
* mirror of ArtifactEvaluateOptions. The subject is the run, so there is no ref. */
|
|
83
102
|
export interface RunEvaluateOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-context.d.ts","sourceRoot":"","sources":["../../src/artifacts/run-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGjF;;sEAEsE;AACtE,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;wEAEoE;IACpE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;oCAGgC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;gFACgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;uFAEmF;IACnF,aAAa,IAAI,MAAM,EAAE,CAAC;IAC1B
|
|
1
|
+
{"version":3,"file":"run-context.d.ts","sourceRoot":"","sources":["../../src/artifacts/run-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
*/
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
23
|
exports.getActiveRunContext = getActiveRunContext;
|
|
24
|
+
exports.isValidStepKey = isValidStepKey;
|
|
25
|
+
exports.resolveStepKey = resolveStepKey;
|
|
26
|
+
exports.resetStepKeyWarningsForTest = resetStepKeyWarningsForTest;
|
|
24
27
|
exports.createRunNamespace = createRunNamespace;
|
|
25
28
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
26
29
|
const node_crypto_1 = require("node:crypto");
|
|
@@ -32,6 +35,38 @@ function getActiveRunContext() {
|
|
|
32
35
|
const ctx = storage.getStore();
|
|
33
36
|
return ctx !== undefined && !ctx.ended ? ctx : null;
|
|
34
37
|
}
|
|
38
|
+
/** Valid ground-truth step key (G1 spec §3): a caller-supplied `stepKey` (either
|
|
39
|
+
* lane) or a `tags.step` used as one. Auto-minted keys (`label#seq`) may contain
|
|
40
|
+
* a `/` from a route slug or `provider/model` label and are NOT validated — the
|
|
41
|
+
* regex gates only what a customer types. */
|
|
42
|
+
const STEP_KEY_PATTERN = /^[A-Za-z0-9_.:#-]{1,128}$/;
|
|
43
|
+
/** True when `key` is a valid caller-supplied step key (spec §3). */
|
|
44
|
+
function isValidStepKey(key) {
|
|
45
|
+
return STEP_KEY_PATTERN.test(key);
|
|
46
|
+
}
|
|
47
|
+
const warnedStepKeys = new Set();
|
|
48
|
+
/** Resolve a ground-truth step key for either lane (spec §3): an explicit
|
|
49
|
+
* caller-supplied key wins, then the `tags.step` convention, else a freshly
|
|
50
|
+
* minted auto key. A caller key is validated `[A-Za-z0-9_.:#-]{1,128}`; an
|
|
51
|
+
* invalid one is warned (once per bad value) and DROPPED to the auto key —
|
|
52
|
+
* instrumentation never throws a telemetry-label error into customer code. */
|
|
53
|
+
function resolveStepKey(explicit, tagStep, auto) {
|
|
54
|
+
const candidate = explicit ?? tagStep;
|
|
55
|
+
if (candidate === undefined)
|
|
56
|
+
return auto();
|
|
57
|
+
if (isValidStepKey(candidate))
|
|
58
|
+
return candidate;
|
|
59
|
+
if (!warnedStepKeys.has(candidate)) {
|
|
60
|
+
warnedStepKeys.add(candidate);
|
|
61
|
+
console.warn(`[modelrig artifacts] invalid stepKey "${candidate}" (allowed [A-Za-z0-9_.:#-], 1-128 chars) — ` +
|
|
62
|
+
"grouped under an auto-generated key instead.");
|
|
63
|
+
}
|
|
64
|
+
return auto();
|
|
65
|
+
}
|
|
66
|
+
/** Test-only: clear the once-per-process invalid-stepKey warning latch. */
|
|
67
|
+
function resetStepKeyWarningsForTest() {
|
|
68
|
+
warnedStepKeys.clear();
|
|
69
|
+
}
|
|
35
70
|
function warnOnce(scope, err) {
|
|
36
71
|
console.warn(`[modelrig artifacts] ${scope} buffer write failed (dropped, run unaffected): ` +
|
|
37
72
|
`${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -67,6 +102,9 @@ function createRunNamespace(deps) {
|
|
|
67
102
|
const attemptByStep = new Map();
|
|
68
103
|
const loaded = new Set();
|
|
69
104
|
let stepSeq = 0;
|
|
105
|
+
// The ambient step key (G1): the last step minted or emitted in this run,
|
|
106
|
+
// which an artifact.save without an explicit stepKey attaches to.
|
|
107
|
+
let lastStepKey = null;
|
|
70
108
|
return {
|
|
71
109
|
runId,
|
|
72
110
|
traceId,
|
|
@@ -84,9 +122,16 @@ function createRunNamespace(deps) {
|
|
|
84
122
|
},
|
|
85
123
|
nextStepKey(label) {
|
|
86
124
|
stepSeq += 1;
|
|
87
|
-
|
|
125
|
+
lastStepKey = `${label}#${stepSeq}`;
|
|
126
|
+
return lastStepKey;
|
|
127
|
+
},
|
|
128
|
+
currentStepKey() {
|
|
129
|
+
return lastStepKey;
|
|
88
130
|
},
|
|
89
131
|
emitGroundTruthStep(input) {
|
|
132
|
+
// A caller-supplied key on the raw lane never minted through nextStepKey;
|
|
133
|
+
// record it as the ambient step so artifacts saved around this call join it.
|
|
134
|
+
lastStepKey = input.stepKey;
|
|
90
135
|
const attemptNo = (attemptByStep.get(input.stepKey) ?? 0) + 1;
|
|
91
136
|
attemptByStep.set(input.stepKey, attemptNo);
|
|
92
137
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/bakeoff/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/bakeoff/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;uCAEmC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mEAAmE;IACnE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;yDACqD;IACrD,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,oEAAoE;IACpE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;sDACkD;IAClD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAwFxC"}
|
package/dist/bakeoff/replay.js
CHANGED
|
@@ -23,16 +23,29 @@ exports.replayVariant = replayVariant;
|
|
|
23
23
|
const node_crypto_1 = require("node:crypto");
|
|
24
24
|
const failures_1 = require("../types/failures");
|
|
25
25
|
const run_1 = require("../run/run");
|
|
26
|
+
const variant_1 = require("../run/variant");
|
|
26
27
|
async function replayVariant(deps, captures, req) {
|
|
27
28
|
const rows = captures.readLast(req.route, req.lastN);
|
|
28
29
|
const replayId = (0, node_crypto_1.randomUUID)();
|
|
29
30
|
const envelopeKey = `replay:${replayId}`;
|
|
31
|
+
// Trial mode is scoped to the ARM being replayed, not the whole pass. A
|
|
32
|
+
// bake-off measures a declared trial candidate ONLY under a trial-only
|
|
33
|
+
// variant arm; the `default` arm (and any non-trial variant) must replay in
|
|
34
|
+
// LIVE mode so the incumbent never admits the cheaper trial candidate —
|
|
35
|
+
// otherwise `prefer:[cost]` would pick the trial model on BOTH arms and the
|
|
36
|
+
// comparison degenerates to trial-vs-trial (armMeta then misreports the
|
|
37
|
+
// incumbent). `mode: "trial"` keeps trial candidates and permits selecting a
|
|
38
|
+
// trial variant; `live` drops them, exactly as every production surface does.
|
|
39
|
+
const route = deps.routes.get(req.route);
|
|
40
|
+
const variant = req.variant === "default" ? undefined : route.variants.find((v) => v.name === req.variant);
|
|
41
|
+
const mode = variant !== undefined && (0, variant_1.isTrialOnlyVariant)(route, variant) ? "trial" : "live";
|
|
30
42
|
// Zero production exposure knobs: no capture writes (no replay-of-replay),
|
|
31
43
|
// and the whole pass shares one hard envelope.
|
|
32
44
|
const replayDeps = {
|
|
33
45
|
...deps,
|
|
34
46
|
captures: null,
|
|
35
47
|
envelopeBudgetUsd: req.envelopeUsd,
|
|
48
|
+
mode,
|
|
36
49
|
};
|
|
37
50
|
const results = [];
|
|
38
51
|
for (const capture of rows) {
|
|
@@ -48,8 +61,11 @@ async function replayVariant(deps, captures, req) {
|
|
|
48
61
|
// text — plan §10 replay-validity risk), repair/grounding rungs and
|
|
49
62
|
// retry budgets all behave exactly as production serving would.
|
|
50
63
|
const result = await (0, run_1.run)(replayDeps, req.route, {
|
|
64
|
+
// `lane: "trial"` (spec §4.4) tags every replay attempt row so the R1
|
|
65
|
+
// route rollups and the savings odometer EXCLUDE trial spend — a
|
|
66
|
+
// bake-off's real dispatches must never move a live route's numbers.
|
|
67
|
+
tags: { replay: replayId, replay_capture: sampleTag, variant: req.variant, lane: "trial" },
|
|
51
68
|
input: JSON.parse(capture.variablesJson),
|
|
52
|
-
tags: { replay: replayId, replay_capture: sampleTag, variant: req.variant },
|
|
53
69
|
...(req.variant !== "default" ? { variant: req.variant } : {}),
|
|
54
70
|
budget: { envelope: envelopeKey },
|
|
55
71
|
});
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG;AAkCH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpC;AAeD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAuBxD;AA+hBD,wBAAsB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqCnE"}
|
package/dist/cli.js
CHANGED
|
@@ -35,6 +35,7 @@ const samples_1 = require("./bakeoff/samples");
|
|
|
35
35
|
const report_1 = require("./bakeoff/report");
|
|
36
36
|
const cli_run_1 = require("./verify/cli-run");
|
|
37
37
|
const loader_1 = require("./routes/loader");
|
|
38
|
+
const rawonly_1 = require("./run/rawonly");
|
|
38
39
|
const validate_cli_1 = require("./validate-cli");
|
|
39
40
|
const store_1 = require("./telemetry/store");
|
|
40
41
|
const budget_1 = require("./watch/budget");
|
|
@@ -156,9 +157,29 @@ async function cmdBakeoff(flags) {
|
|
|
156
157
|
throw new Error(`proposal ${proposalId} is ${proposal.status} — evidence runs apply to ` +
|
|
157
158
|
"suggested/evidenced proposals only");
|
|
158
159
|
}
|
|
159
|
-
const routes = (0, loader_1.loadRoutes)(
|
|
160
|
+
const routes = (0, loader_1.loadRoutes)((0, rawonly_1.requireRoutesDir)(config, "modelrig bakeoff"));
|
|
160
161
|
const bundle = routes.get(proposal.route);
|
|
161
|
-
|
|
162
|
+
// Declare-first (routing-console spec §4.4, R3): a manual_challenger proposal
|
|
163
|
+
// names ONE trial variant — bake off default vs that variant only. The trial
|
|
164
|
+
// variant must be DECLARED in the local routes (the human merged the
|
|
165
|
+
// declare-YAML); until then it isn't loadable, so fail with a teaching error
|
|
166
|
+
// rather than a bake-off that silently omits the challenger.
|
|
167
|
+
let variants;
|
|
168
|
+
const trigger = proposal.trigger;
|
|
169
|
+
if (trigger.type === "manual_challenger") {
|
|
170
|
+
const trialVariant = trigger.variant;
|
|
171
|
+
if (typeof trialVariant !== "string" || trialVariant === "") {
|
|
172
|
+
throw new Error(`proposal ${proposalId} is a manual_challenger with no trial variant name`);
|
|
173
|
+
}
|
|
174
|
+
if (!bundle.variants.some((v) => v.name === trialVariant)) {
|
|
175
|
+
throw new Error(`route "${proposal.route}" does not declare the trial variant "${trialVariant}" yet — ` +
|
|
176
|
+
"merge the declare-YAML from the proposal first (modelrig ... declare-body), then re-run");
|
|
177
|
+
}
|
|
178
|
+
variants = ["default", trialVariant];
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
variants = ["default", ...bundle.variants.map((v) => v.name)];
|
|
182
|
+
}
|
|
162
183
|
const lastRaw = flags.named.get("replay-last");
|
|
163
184
|
const replayLastN = lastRaw !== undefined ? Number(lastRaw) : 25;
|
|
164
185
|
if (!Number.isInteger(replayLastN) || replayLastN < 1) {
|
|
@@ -243,7 +264,7 @@ async function cmdWatch(flags) {
|
|
|
243
264
|
}
|
|
244
265
|
const config = (0, config_1.loadConfigFromEnv)();
|
|
245
266
|
const client = proposalsClientFrom(config);
|
|
246
|
-
const routes = (0, loader_1.loadRoutes)(
|
|
267
|
+
const routes = (0, loader_1.loadRoutes)((0, rawonly_1.requireRoutesDir)(config, "modelrig watch"));
|
|
247
268
|
const routeEconomics = routes.list().map((b) => ({
|
|
248
269
|
route: b.route,
|
|
249
270
|
candidates: b.candidates.map((c) => ({ provider: c.provider, model: c.model })),
|
|
@@ -318,7 +339,7 @@ async function cmdSwapExecute(flags) {
|
|
|
318
339
|
const config = (0, config_1.loadConfigFromEnv)();
|
|
319
340
|
const proposals = proposalsClientFrom(config);
|
|
320
341
|
const swaps = swapsClientFrom(config);
|
|
321
|
-
const routes = (0, loader_1.loadRoutes)(
|
|
342
|
+
const routes = (0, loader_1.loadRoutes)((0, rawonly_1.requireRoutesDir)(config, "modelrig swap execute"));
|
|
322
343
|
// The orchestration (guards, ordering, baseline snapshot) lives in the
|
|
323
344
|
// hermetically-tested executeSwap; the CLI only injects the real config
|
|
324
345
|
// deps and prints. The --approve gate is enforced here (fast-fail before
|
|
@@ -359,7 +380,7 @@ async function cmdSwapRevert(flags) {
|
|
|
359
380
|
const incumbents = swap.baseline.incumbent_candidates ?? [];
|
|
360
381
|
console.log(`swap ${swapId} marked reverted — the odometer stops accruing it at ${revertedAt}\n`);
|
|
361
382
|
console.log("APPLY THIS CHANGE (git is the actuator, as always):\n");
|
|
362
|
-
const routes = (0, loader_1.loadRoutes)(
|
|
383
|
+
const routes = (0, loader_1.loadRoutes)((0, rawonly_1.requireRoutesDir)(config, "modelrig swap revert"));
|
|
363
384
|
let version = null;
|
|
364
385
|
try {
|
|
365
386
|
version = routes.get(swap.route).version + 1;
|
package/dist/config.d.ts
CHANGED
|
@@ -5,7 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { CapabilityFlag, ProviderId } from "./types/provider";
|
|
7
7
|
export interface RigConfig {
|
|
8
|
-
|
|
8
|
+
/** Directory of route bundles, OR `null` for a first-class runRaw-only rig
|
|
9
|
+
* (CE-8, `ce8-runraw-only-rig-spec-plan.md` R1). With `null`, createRig skips
|
|
10
|
+
* route loading, the `rig.yaml` manifest, and the serveability gate; the raw
|
|
11
|
+
* lane works unchanged and every route-dependent surface throws a teaching
|
|
12
|
+
* `invariant_violation`. `loadConfigFromEnv` stays string-only (R2) — opt out
|
|
13
|
+
* in code: `createRig({ ...loadConfigFromEnv(), routesDir: null })`. */
|
|
14
|
+
readonly routesDir: string | null;
|
|
9
15
|
/** OPTIONAL directory of deployment-bundled INTERNAL infra routes, merged
|
|
10
16
|
* INTO `routesDir`'s routes (union, not replacement) by createRig. The server
|
|
11
17
|
* passes its gateway-internal-routes/ here so run-judge@v1 /
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|