modelrig 0.2.0 → 0.3.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 CHANGED
@@ -10,6 +10,70 @@ published package diverge.
10
10
  This project adheres to [Semantic Versioning](https://semver.org/). Dates are
11
11
  UTC.
12
12
 
13
+ ## [0.3.0] — 2026-08-21
14
+
15
+ The `modelrig-oracle` MCP server ships to npm alongside this release (its own
16
+ package, 0.1.0) — `npx modelrig-oracle` now works as the docs describe.
17
+
18
+ CE-2 raw-lane parity — three new provider knobs on `rig.runRaw` /
19
+ `rig.runRawStream` (and the OpenAI-compatible `/v1/chat/completions` raw lane),
20
+ so the Lane-B report-pipeline seam (`callProvider` → `rig.runRaw`) can swap
21
+ behaviour-identically. Every knob is ADDITIVE: absent ⇒ byte-identical to the
22
+ 0.2.0 request shape.
23
+
24
+ ### Added — `RawRunInput` (all additive, absent ⇒ byte-identical)
25
+
26
+ - **`grounding?: { mode: "native" }`** — native provider web grounding on the
27
+ raw lane (F1). Maps to the adapter's native-grounding directive (gemini →
28
+ the `googleSearch` tool). GEMINI-ONLY in v1: declared on any other provider
29
+ throws `RigFailureError` with class `invariant_violation` PRE-DISPATCH (no
30
+ meter, no provider call, no telemetry row). Interplay with `cache.key` needs
31
+ no code — the gemini `cachedContent` path excludes tools by design (the
32
+ `googleSearch` tool is expected to be baked into the customer's cache resource
33
+ at creation).
34
+ - **`serviceTier?: "standard" | "flex" | "priority"`** — service tier on the raw
35
+ lane (F2). Forwarded to the adapter's tier path; `RunMeta.requestedTier` now
36
+ reports the DECLARED tier (previously hardcoded `"standard"` — an honesty fix).
37
+ ModelRig does NOT degrade flex→standard on the raw lane; a capacity rejection
38
+ surfaces classified (`capacity_shed`) for the customer's own retry ladder.
39
+ - **`reasoning?: { level: "minimal" | "low" | "medium" | "high" }`** —
40
+ provider-neutral reasoning/thinking effort (F3). Gemini maps `level` to
41
+ `thinkingConfig.thinkingLevel` (replacing the hardcoded `"high"`). GEMINI-ONLY
42
+ in v1: declared on another provider throws `invariant_violation` pre-dispatch;
43
+ declared on a non-thinking-capable gemini model is rejected classified by the
44
+ adapter (never a silent drop, never an unguarded provider 400).
45
+
46
+ ### Added — `AdapterRequest`
47
+
48
+ - **`reasoning?: ReasoningParams`** (+ exported `ReasoningParams` /
49
+ `ReasoningLevel` types) — the provider-neutral reasoning shape adapters map to
50
+ their native field.
51
+
52
+ ### Added — HTTP gateway (`/v1/chat/completions`, raw lane only)
53
+
54
+ - Top-level OpenAI-standard `temperature` / `top_p` / `max_tokens` /
55
+ `service_tier` are now forwarded onto the raw lane (the open CE-6 co-item);
56
+ `modelrig.grounding` / `modelrig.reasoning` ride in the `modelrig` body object.
57
+ A malformed `grounding.mode` / `reasoning.level` is a teaching 4xx. The SLUG
58
+ lane still ignores all generation params (the verified route owns them).
59
+
60
+ ### Added — route loader
61
+
62
+ - Load-time WARN when a route's output schema has an ARRAY root — OpenAI strict
63
+ structured output requires a top-level object, so an array-root schema cannot
64
+ use strict enforcement on OpenAI candidates (the A5 co-item). The route still
65
+ loads and serves as declared.
66
+
67
+ ### Confirmed (already true on 0.2.0, now pinned by regression tests)
68
+
69
+ - **F5** — an invalid/evicted customer `cache.key` on the raw lane surfaces as a
70
+ thrown `RigFailureError` with `.failure.class === "cache_invalid"`; the raw
71
+ lane is single-dispatch, so a silent un-cached retry is structurally
72
+ impossible.
73
+ - **F6** — success `RunMeta` carries `servedTier` / `tokensCached` / `latencyMs`
74
+ (and provider/model/cost); a per-attempt failure's class + provider/model
75
+ travel on the thrown error's `.failure`.
76
+
13
77
  ## [0.2.0] — unreleased (staged for the R-A ceremony)
14
78
 
15
79
  - Ships the probed capability registry and leaderboard (`registry/registry.json`, `registry/leaderboard.json`) so a clean install routes on the probed profile instead of the static fallback (R-1 F2 ruling). The `modelrig-oracle` MCP server remains unreleased and is flagged as such in the docs.
package/README.md CHANGED
@@ -102,6 +102,18 @@ refreshes, or deletes the resource, so a long job needs your own TTL heartbeat
102
102
  The Lane-B `rig.runRaw({ provider, model, …, cache: { key } })` seam takes the
103
103
  same field.
104
104
 
105
+ `rig.runRaw` also accepts
106
+ three provider knobs, each additive — absent ⇒ byte-identical dispatch:
107
+ `grounding: { mode: "native" }` (native provider web grounding, gemini-only in
108
+ v1), `serviceTier: "standard" | "flex" | "priority"`, and
109
+ `reasoning: { level: "minimal" | "low" | "medium" | "high" }` (gemini-only in
110
+ v1, mapped to the thinking level). A declared directive a provider cannot honor
111
+ FAILS CLOSED — a thrown `RigFailureError` with class `invariant_violation`,
112
+ pre-dispatch (no meter, no provider call) — never a silent drop. A grounded step
113
+ that also passes a `cache.key` keeps its cached-token ratio: bake the
114
+ `googleSearch` tool into the cache resource at creation (ModelRig sends
115
+ `cachedContent` without tools, which the provider requires).
116
+
105
117
  Every attempt is recorded in a local SQLite file (`.modelrig/telemetry.db`)
106
118
  tagged with your `tags`. Failures are typed —
107
119
  `RigFailureError.failure.class` is one of `content_invalid`, `capacity_shed`,
@@ -33,6 +33,16 @@ export declare function classifyGeminiFailure(message: string): ClassifiedFailur
33
33
  /** The candidate-independent part of an AdapterRequest (also what the pure
34
34
  * shaping helpers take, so unit tests never need a branded CandidateRef). */
35
35
  export type ShapingInput = Omit<AdapterRequest, "candidate">;
36
+ /**
37
+ * CE-2 F3 fail-closed guard: `reasoning` declared on a Gemini model that is NOT
38
+ * thinking-capable would 400 at the provider (thinkingConfig on a 2.x model is
39
+ * rejected). Pre-empt with a classified TERMINAL failure so the declaration is
40
+ * never silently dropped and never turns into an unguarded provider 400 — the
41
+ * same fail-closed discipline as the raw-lane provider guard (spec §3 F1/F3).
42
+ * Returns the failure class + fixHint, or null when the request is fine (no
43
+ * reasoning declared, or a thinking-capable model). Pure — unit-tested directly.
44
+ */
45
+ export declare function geminiReasoningUnsupported(model: string, req: ShapingInput): ClassifiedFailure | null;
36
46
  export interface GeminiShapedRequest {
37
47
  readonly model: string;
38
48
  readonly contents: string;
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/adapters/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EACV,cAAc,EAGd,cAAc,EACd,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,mBAAmB,CAAC;AAKlE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAkCD,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAG9E;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAyCxE;AAED;6EAC6E;AAC7E,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,mBAAmB,CA2CxF;AA0BD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,eAAe,CAmJhF"}
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/adapters/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EACV,cAAc,EAGd,cAAc,EACd,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,mBAAmB,CAAC;AAKlE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAkCD,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAG9E;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAyCxE;AAED;6EAC6E;AAC7E,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AAE7D;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,iBAAiB,GAAG,IAAI,CAQrG;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,mBAAmB,CAgDxF;AA0BD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,eAAe,CA+JhF"}
@@ -17,6 +17,7 @@
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.geminiSupports = geminiSupports;
19
19
  exports.classifyGeminiFailure = classifyGeminiFailure;
20
+ exports.geminiReasoningUnsupported = geminiReasoningUnsupported;
20
21
  exports.buildGeminiRequest = buildGeminiRequest;
21
22
  exports.createGeminiAdapter = createGeminiAdapter;
22
23
  const genai_1 = require("@google/genai");
@@ -99,18 +100,41 @@ function classifyGeminiFailure(message) {
99
100
  }
100
101
  return { cls: "network" };
101
102
  }
103
+ /**
104
+ * CE-2 F3 fail-closed guard: `reasoning` declared on a Gemini model that is NOT
105
+ * thinking-capable would 400 at the provider (thinkingConfig on a 2.x model is
106
+ * rejected). Pre-empt with a classified TERMINAL failure so the declaration is
107
+ * never silently dropped and never turns into an unguarded provider 400 — the
108
+ * same fail-closed discipline as the raw-lane provider guard (spec §3 F1/F3).
109
+ * Returns the failure class + fixHint, or null when the request is fine (no
110
+ * reasoning declared, or a thinking-capable model). Pure — unit-tested directly.
111
+ */
112
+ function geminiReasoningUnsupported(model, req) {
113
+ if (req.reasoning !== undefined && !THINKING_CAPABLE_MODELS.has(model)) {
114
+ return {
115
+ cls: "invariant_violation",
116
+ fixHint: `reasoning control requires a thinking-capable Gemini model; "${model}" is not one — remove reasoning or choose a thinking-capable model`,
117
+ };
118
+ }
119
+ return null;
120
+ }
102
121
  /** Pure request shaping — everything except the abort signal. */
103
122
  function buildGeminiRequest(model, req) {
104
123
  const usingCache = req.cache?.key !== undefined && req.cache.key !== "";
105
124
  // CE-6: a declared sampling field OVERRIDES the ported constant; absent, the
106
125
  // constant stands (byte-identical to pre-CE-6). topK stays internal (gemini-only,
107
126
  // not on the customer surface — spec §1 non-goals).
127
+ // CE-2 F3: a declared reasoning level replaces the hardcoded `"high"` for the
128
+ // thinking-capable models; absent, `"high"` stands (byte-identical to
129
+ // pre-CE-2). A declared level on a NON-capable model is rejected fail-closed in
130
+ // call() (geminiReasoningUnsupported) — it never reaches this shaping.
131
+ const thinkingLevel = req.reasoning?.level ?? "high";
108
132
  const config = {
109
133
  temperature: req.sampling?.temperature ?? GEMINI_TEMPERATURE,
110
134
  maxOutputTokens: (0, sampling_1.effectiveMaxOutputTokens)(req, DEFAULT_MAX_OUTPUT_TOKENS),
111
135
  topP: req.sampling?.topP ?? TOP_P,
112
136
  topK: TOP_K,
113
- ...(THINKING_CAPABLE_MODELS.has(model) ? { thinkingConfig: { thinkingLevel: "high" } } : {}),
137
+ ...(THINKING_CAPABLE_MODELS.has(model) ? { thinkingConfig: { thinkingLevel } } : {}),
114
138
  };
115
139
  if (req.outputSchema !== null) {
116
140
  config.responseMimeType = "application/json";
@@ -179,6 +203,13 @@ function createGeminiAdapter(config) {
179
203
  },
180
204
  ...(usage !== undefined ? { usage } : {}),
181
205
  });
206
+ // CE-2 F3: reject reasoning on a non-thinking model BEFORE any dispatch —
207
+ // classified, terminal, never a silent drop (spec §3 F3).
208
+ const reasoningUnsupported = geminiReasoningUnsupported(model, req);
209
+ if (reasoningUnsupported !== null) {
210
+ clearTimeout(timeoutId);
211
+ return fail(reasoningUnsupported.cls, `reasoning control declared on the non-thinking Gemini model "${model}"`, reasoningUnsupported.fixHint);
212
+ }
182
213
  try {
183
214
  const shaped = buildGeminiRequest(model, req);
184
215
  const dispatchedAt = Date.now();
package/dist/index.d.ts CHANGED
@@ -189,7 +189,7 @@ export { getCachePolicy, seededCachePolicyProviders } from "./registry/cache-pol
189
189
  export type { CachePolicy } from "./registry/cache-policy";
190
190
  export { synthesizeFromFlat, tierRates, describePricingV2, SNAPSHOT_BASIS } from "./registry/pricing-shape";
191
191
  export type { ModelPricingV2, ServingTierName, PricingV2Display, } from "./registry/pricing-shape";
192
- export type { CandidateRef, CapabilityFlag, ProviderId, ServiceTier, AdapterUsage } from "./types/provider";
192
+ export type { CandidateRef, CapabilityFlag, ProviderId, ServiceTier, ReasoningParams, ReasoningLevel, AdapterUsage } from "./types/provider";
193
193
  export { loadManifest } from "./routes/manifest";
194
194
  export type { RigManifest, DimensionSpec } from "./routes/manifest";
195
195
  export { fingerprintSchema } from "./registry/fingerprint";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,17 @@
4
4
  * resolves schema/prompt paths relative to the bundle file, freezes.
5
5
  */
6
6
  import type { RouteBundle } from "../types/route";
7
+ /**
8
+ * CE-2 A5 co-item: warn (non-fatal) when a route's output schema has an ARRAY
9
+ * root. OpenAI strict structured output (`response_format: json_schema`, strict)
10
+ * requires a top-level OBJECT — an array-root schema cannot use strict
11
+ * enforcement on OpenAI candidates and silently falls back to non-strict there
12
+ * (the walkthrough §10 provider-matrix gap). The route still LOADS and serves as
13
+ * declared; the fix is to wrap the array in an object property so strict
14
+ * enforcement holds across every provider. Returns the warning line, or null.
15
+ * Pure — unit-tested directly.
16
+ */
17
+ export declare function arrayRootSchemaWarning(route: string, outputSchema: object | null): string | null;
7
18
  /**
8
19
  * Structured config error thrown for any invalid bundle (never a raw Error).
9
20
  * Load-time problems are deliberately NOT RigFailures — the failure taxonomy
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/routes/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAKV,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AAMxB;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;gBAEzB,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAO;CAOxF;AAiCD,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IAChC,IAAI,IAAI,SAAS,WAAW,EAAE,CAAC;CAChC;AAqZD;;;;;;;GAOG;AACH;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,CAItF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,YAAY,CAyB1F;AAED;;yBAEyB;AACzB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,CA6CtE;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CA2C1D"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/routes/loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAKV,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AAMxB;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAWhG;AAED;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;gBAEzB,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAO;CAOxF;AAiCD,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;IAChC,IAAI,IAAI,SAAS,WAAW,EAAE,CAAC;CAChC;AA4ZD;;;;;;;GAOG;AACH;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,CAItF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,YAAY,CAyB1F;AAED;;yBAEyB;AACzB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,CA6CtE;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CA2C1D"}
@@ -6,6 +6,7 @@
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
8
  exports.RouteConfigError = void 0;
9
+ exports.arrayRootSchemaWarning = arrayRootSchemaWarning;
9
10
  exports.loadRoutesWithExtra = loadRoutesWithExtra;
10
11
  exports.mergeLoadedRoutes = mergeLoadedRoutes;
11
12
  exports.validateRoutesDir = validateRoutesDir;
@@ -18,6 +19,28 @@ const fingerprint_1 = require("../registry/fingerprint");
18
19
  const template_1 = require("./template");
19
20
  const cache_lint_1 = require("./cache-lint");
20
21
  const sampling_config_1 = require("./sampling-config");
22
+ /**
23
+ * CE-2 A5 co-item: warn (non-fatal) when a route's output schema has an ARRAY
24
+ * root. OpenAI strict structured output (`response_format: json_schema`, strict)
25
+ * requires a top-level OBJECT — an array-root schema cannot use strict
26
+ * enforcement on OpenAI candidates and silently falls back to non-strict there
27
+ * (the walkthrough §10 provider-matrix gap). The route still LOADS and serves as
28
+ * declared; the fix is to wrap the array in an object property so strict
29
+ * enforcement holds across every provider. Returns the warning line, or null.
30
+ * Pure — unit-tested directly.
31
+ */
32
+ function arrayRootSchemaWarning(route, outputSchema) {
33
+ if (outputSchema === null)
34
+ return null;
35
+ const rootType = outputSchema.type;
36
+ if (rootType !== "array")
37
+ return null;
38
+ return (`route "${route}" declares an output schema whose ROOT is type: "array". OpenAI strict ` +
39
+ `structured output requires a top-level object, so strict enforcement cannot apply on OpenAI ` +
40
+ `candidates (they fall back to non-strict there). Wrap the array in an object property ` +
41
+ `(e.g. { "type": "object", "properties": { "items": <your array> } }) to keep strict ` +
42
+ `enforcement across providers. The route loads and serves as declared.`);
43
+ }
21
44
  /**
22
45
  * Structured config error thrown for any invalid bundle (never a raw Error).
23
46
  * Load-time problems are deliberately NOT RigFailures — the failure taxonomy
@@ -415,6 +438,12 @@ function loadBundleFile(filePath) {
415
438
  if (geminiTempWarning !== null) {
416
439
  console.warn(`modelrig: ${geminiTempWarning}`);
417
440
  }
441
+ // CE-2 A5 co-item: an array-root schema cannot use OpenAI strict enforcement —
442
+ // warn once at load so the incompatibility is deliberate, never silent.
443
+ const arrayRootWarning = arrayRootSchemaWarning(route, outputSchema);
444
+ if (arrayRootWarning !== null) {
445
+ console.warn(`modelrig: ${arrayRootWarning}`);
446
+ }
418
447
  return Object.freeze({
419
448
  route: route,
420
449
  version: version,
package/dist/run/raw.d.ts CHANGED
@@ -23,8 +23,17 @@
23
23
  * `AdapterRequest.sampling`) when the caller supplies them; absent, they are
24
24
  * still dropped and the dispatch is byte-identical to pre-CE-6. `max_tokens`
25
25
  * maps to `maxOutputTokens` (unchanged).
26
+ * - CE-2: the raw lane exposes three more provider knobs — `grounding`
27
+ * (native web grounding), `serviceTier`, and `reasoning` (thinking effort).
28
+ * Each is ADDITIVE: absent ⇒ byte-identical dispatch. A DECLARED directive is
29
+ * never silently dropped — `grounding`/`reasoning` on a provider that cannot
30
+ * honor it are rejected fail-closed PRE-DISPATCH (`assertRawKnobsSupported`),
31
+ * with no meter, no provider call, and no telemetry row. v1 support set for
32
+ * both = { gemini }. `serviceTier` forwards to every adapter's tier path and
33
+ * `meta.requestedTier` now reports the DECLARED tier (an honesty fix — it
34
+ * previously hardcoded `"standard"`).
26
35
  */
27
- import type { AdapterRequest, CandidateRef, ProviderId, ToolChoice, ToolDefinition } from "../types/provider";
36
+ import type { AdapterRequest, CandidateRef, ProviderId, ReasoningParams, ServiceTier, ToolChoice, ToolDefinition } from "../types/provider";
28
37
  import type { RunResult, RunTags } from "../types/route";
29
38
  import type { RunStreamHandle } from "./stream";
30
39
  import type { TelemetryStore } from "../types/telemetry";
@@ -63,6 +72,29 @@ export interface RawRunInput {
63
72
  readonly key: string;
64
73
  readonly ttlSeconds?: number;
65
74
  };
75
+ /** CE-2 F1 — native provider grounding on the raw lane (spec §3 F1). Object
76
+ * form so `"inject"` can join later without reshaping; v1 accepts ONLY
77
+ * `"native"`, which maps to `AdapterRequest.grounding = true`. GEMINI-ONLY in
78
+ * v1: declared on any other provider throws `RigFailureError`
79
+ * `invariant_violation` pre-dispatch (`assertRawKnobsSupported`). Interplay
80
+ * with `cache.key`: no code needed here — the gemini adapter's `cachedContent`
81
+ * path excludes tools (the googleSearch tool is expected to be baked into the
82
+ * customer's cache resource at creation). */
83
+ readonly grounding?: {
84
+ readonly mode: "native";
85
+ };
86
+ /** CE-2 F2 — service tier on the raw lane (spec §3 F2). Forwarded to
87
+ * `AdapterRequest.requestedTier` (default `"standard"`). ModelRig does NOT
88
+ * perform flex→standard degrade on the raw lane — a capacity rejection
89
+ * surfaces CLASSIFIED (`capacity_shed`) and the customer's own ladder retries
90
+ * at `"standard"`. `meta.servedTier`/`meta.requestedTier` report the truth. */
91
+ readonly serviceTier?: ServiceTier;
92
+ /** CE-2 F3 — reasoning/thinking effort on the raw lane (spec §3 F3). Absent ⇒
93
+ * byte-identical (gemini keeps its hardcoded `"high"`). GEMINI-ONLY in v1 (and
94
+ * only on a thinking-capable model): declared on any other provider throws
95
+ * pre-dispatch (`assertRawKnobsSupported`); declared on a non-thinking gemini
96
+ * model is rejected classified by the adapter (`geminiReasoningUnsupported`). */
97
+ readonly reasoning?: ReasoningParams;
66
98
  }
67
99
  export interface RawRunDeps {
68
100
  readonly telemetry: TelemetryStore;
@@ -71,6 +103,16 @@ export interface RawRunDeps {
71
103
  * it never charges the unpriced fallback; a missing price records `$0`. */
72
104
  readonly unpricedRateUsdPerMTok?: number;
73
105
  }
106
+ /**
107
+ * CE-2 fail-closed guard (spec §3 F1/F3). A DECLARED directive is NEVER silently
108
+ * dropped: `grounding`/`reasoning` on a provider that cannot honor it — or a
109
+ * `grounding.mode` other than the v1-supported `"native"` — throws
110
+ * `RigFailureError` `invariant_violation` (the existing TERMINAL class; no new
111
+ * FailureClass member, spec §3 rationale) BEFORE any adapter is built, any
112
+ * provider call is made, or any telemetry row is written. Exported so the guard
113
+ * is unit-testable without a network. Idempotent and side-effect-free.
114
+ */
115
+ export declare function assertRawKnobsSupported(input: RawRunInput): void;
74
116
  /** Pure raw-lane request shaping — exported for unit tests (no network). */
75
117
  export declare function buildRawRequest(candidate: CandidateRef, input: RawRunInput): AdapterRequest;
76
118
  /** Buffered raw dispatch (spec §4.2). Records telemetry, returns the RunResult,
@@ -1 +1 @@
1
- {"version":3,"file":"raw.d.ts","sourceRoot":"","sources":["../../src/run/raw.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAYH,OAAO,KAAK,EACV,cAAc,EAGd,YAAY,EAGZ,UAAU,EACV,UAAU,EACV,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAW,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;sCAGsC;AACtC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;iFAC6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;6EAGyE;IACzE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC;;;;;;;0BAOsB;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzE;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC;;+EAE2E;IAC3E,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAC1C;AA0CD,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,GAAG,cAAc,CAyB3F;AA+ID;wDACwD;AACxD,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAMrF;AAcD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,eAAe,CAyClF"}
1
+ {"version":3,"file":"raw.d.ts","sourceRoot":"","sources":["../../src/run/raw.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAYH,OAAO,KAAK,EACV,cAAc,EAGd,YAAY,EAGZ,UAAU,EACV,eAAe,EACf,WAAW,EACX,UAAU,EACV,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAW,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;sCAGsC;AACtC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;iFAC6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;6EAGyE;IACzE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC;;;;;;;0BAOsB;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE;;;;;;;iDAO6C;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;IACjD;;;;mFAI+E;IAC/E,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC;;;;qFAIiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC;;+EAE2E;IAC3E,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAC1C;AAkDD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAiChE;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,GAAG,cAAc,CAiC3F;AAsJD;wDACwD;AACxD,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CASrF;AAcD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,eAAe,CA6ClF"}
package/dist/run/raw.js CHANGED
@@ -24,8 +24,18 @@
24
24
  * `AdapterRequest.sampling`) when the caller supplies them; absent, they are
25
25
  * still dropped and the dispatch is byte-identical to pre-CE-6. `max_tokens`
26
26
  * maps to `maxOutputTokens` (unchanged).
27
+ * - CE-2: the raw lane exposes three more provider knobs — `grounding`
28
+ * (native web grounding), `serviceTier`, and `reasoning` (thinking effort).
29
+ * Each is ADDITIVE: absent ⇒ byte-identical dispatch. A DECLARED directive is
30
+ * never silently dropped — `grounding`/`reasoning` on a provider that cannot
31
+ * honor it are rejected fail-closed PRE-DISPATCH (`assertRawKnobsSupported`),
32
+ * with no meter, no provider call, and no telemetry row. v1 support set for
33
+ * both = { gemini }. `serviceTier` forwards to every adapter's tier path and
34
+ * `meta.requestedTier` now reports the DECLARED tier (an honesty fix — it
35
+ * previously hardcoded `"standard"`).
27
36
  */
28
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.assertRawKnobsSupported = assertRawKnobsSupported;
29
39
  exports.buildRawRequest = buildRawRequest;
30
40
  exports.runRaw = runRaw;
31
41
  exports.runRawStream = runRawStream;
@@ -76,6 +86,54 @@ function buildRawAdapter(provider, apiKey) {
76
86
  }
77
87
  }
78
88
  }
89
+ /** Providers that can honor a DECLARED raw-lane directive in v1 (spec §3
90
+ * fail-closed matrix). Native grounding and reasoning are both gemini-only
91
+ * today; the other adapters would silently ignore the field — exactly the bug
92
+ * class CE-2 makes impossible. A new-provider entry here is a deliberate,
93
+ * spec-gated widening, never an accident. */
94
+ const NATIVE_GROUNDING_PROVIDERS = new Set(["gemini"]);
95
+ const REASONING_PROVIDERS = new Set(["gemini"]);
96
+ /**
97
+ * CE-2 fail-closed guard (spec §3 F1/F3). A DECLARED directive is NEVER silently
98
+ * dropped: `grounding`/`reasoning` on a provider that cannot honor it — or a
99
+ * `grounding.mode` other than the v1-supported `"native"` — throws
100
+ * `RigFailureError` `invariant_violation` (the existing TERMINAL class; no new
101
+ * FailureClass member, spec §3 rationale) BEFORE any adapter is built, any
102
+ * provider call is made, or any telemetry row is written. Exported so the guard
103
+ * is unit-testable without a network. Idempotent and side-effect-free.
104
+ */
105
+ function assertRawKnobsSupported(input) {
106
+ const groundingMode = input.grounding?.mode;
107
+ if (groundingMode !== undefined) {
108
+ if (groundingMode !== "native") {
109
+ throw new failures_1.RigFailureError({
110
+ class: "invariant_violation",
111
+ message: `unsupported raw-lane grounding mode "${groundingMode}"`,
112
+ provider: input.provider,
113
+ model: input.model,
114
+ fixHint: 'only { mode: "native" } grounding is supported on the raw lane in v1',
115
+ });
116
+ }
117
+ if (!NATIVE_GROUNDING_PROVIDERS.has(input.provider)) {
118
+ throw new failures_1.RigFailureError({
119
+ class: "invariant_violation",
120
+ message: `native grounding on the raw lane is not supported for provider "${input.provider}"`,
121
+ provider: input.provider,
122
+ model: input.model,
123
+ fixHint: "native grounding on the raw lane is gemini-only in v1; remove grounding or switch provider",
124
+ });
125
+ }
126
+ }
127
+ if (input.reasoning !== undefined && !REASONING_PROVIDERS.has(input.provider)) {
128
+ throw new failures_1.RigFailureError({
129
+ class: "invariant_violation",
130
+ message: `reasoning control on the raw lane is not supported for provider "${input.provider}"`,
131
+ provider: input.provider,
132
+ model: input.model,
133
+ fixHint: "reasoning control on the raw lane is gemini-only in v1; remove reasoning or switch provider",
134
+ });
135
+ }
136
+ }
79
137
  /** Pure raw-lane request shaping — exported for unit tests (no network). */
80
138
  function buildRawRequest(candidate, input) {
81
139
  // CE-6: forward temperature/topP through AdapterRequest.sampling ONLY when the
@@ -93,10 +151,18 @@ function buildRawRequest(candidate, input) {
93
151
  systemPrompt: input.systemPrompt,
94
152
  userPrompt: input.userPrompt,
95
153
  outputSchema: null, // raw lane never validates — the product distinction
96
- requestedTier: "standard",
154
+ // CE-2 F2: forward the DECLARED tier (default "standard"); the meta/row
155
+ // honesty fix in finalizeRaw reports this same value, never a hardcode.
156
+ requestedTier: input.serviceTier ?? "standard",
97
157
  timeoutMs: input.timeoutMs ?? DEFAULT_RAW_TIMEOUT_MS,
98
158
  ...(input.maxOutputTokens !== undefined ? { maxOutputTokens: input.maxOutputTokens } : {}),
99
159
  ...(sampling !== undefined ? { sampling } : {}),
160
+ // CE-2 F1: `{ mode: "native" }` → the adapter's native-grounding directive.
161
+ // Any other mode / unsupported provider never reaches here — the guard
162
+ // (assertRawKnobsSupported) rejects it pre-dispatch. Absent ⇒ no key added.
163
+ ...(input.grounding?.mode === "native" ? { grounding: true } : {}),
164
+ // CE-2 F3: forward reasoning verbatim; absent ⇒ no key added (byte-identical).
165
+ ...(input.reasoning !== undefined ? { reasoning: input.reasoning } : {}),
100
166
  ...(input.tools !== undefined ? { tools: input.tools } : {}),
101
167
  ...(input.toolChoice !== undefined ? { toolChoice: input.toolChoice } : {}),
102
168
  ...(input.cache !== undefined ? { cache: input.cache } : {}),
@@ -115,7 +181,7 @@ function recordRawRow(telemetry, p) {
115
181
  routeVersion: 0,
116
182
  provider: p.provider,
117
183
  model: p.model,
118
- requestedTier: "standard",
184
+ requestedTier: p.requestedTier,
119
185
  servedTier: p.usage?.servedTier ?? "standard",
120
186
  tokensIn: p.usage?.tokensIn ?? 0,
121
187
  tokensOut: p.usage?.tokensOut ?? 0,
@@ -149,6 +215,8 @@ function recordRawRow(telemetry, p) {
149
215
  function finalizeRaw(deps, input, result, latencyMs) {
150
216
  const unpricedRatePerTok = (deps.unpricedRateUsdPerMTok ?? cost_1.DEFAULT_UNPRICED_RATE_USD_PER_MTOK) / 1000000;
151
217
  const rawModelId = `${input.provider}/${input.model}`;
218
+ // CE-2 F2: the declared tier is reported truthfully on the row AND the meta.
219
+ const requestedTier = input.serviceTier ?? "standard";
152
220
  // lane is SDK-owned and cannot be overridden by a caller-supplied tag.
153
221
  const tags = { ...(input.tags ?? {}), lane: "raw" };
154
222
  if (!result.ok) {
@@ -167,6 +235,7 @@ function finalizeRaw(deps, input, result, latencyMs) {
167
235
  ...(result.usage !== undefined ? { usage: result.usage } : {}),
168
236
  costUsd,
169
237
  latencyMs,
238
+ requestedTier,
170
239
  failureClass: result.failure.class,
171
240
  tags,
172
241
  pricingMissing,
@@ -184,6 +253,7 @@ function finalizeRaw(deps, input, result, latencyMs) {
184
253
  usage: result.usage,
185
254
  costUsd,
186
255
  latencyMs,
256
+ requestedTier,
187
257
  failureClass: null,
188
258
  tags,
189
259
  pricingMissing,
@@ -197,7 +267,7 @@ function finalizeRaw(deps, input, result, latencyMs) {
197
267
  routeVersion: 0,
198
268
  provider: input.provider,
199
269
  model: input.model,
200
- requestedTier: "standard",
270
+ requestedTier,
201
271
  servedTier: result.usage.servedTier,
202
272
  tokensIn: result.usage.tokensIn,
203
273
  tokensOut: result.usage.tokensOut,
@@ -215,6 +285,9 @@ function finalizeRaw(deps, input, result, latencyMs) {
215
285
  /** Buffered raw dispatch (spec §4.2). Records telemetry, returns the RunResult,
216
286
  * or throws `RigFailureError` on an adapter failure. */
217
287
  async function runRaw(deps, input) {
288
+ // CE-2 F1/F3: fail closed on an unsupported declared directive BEFORE building
289
+ // an adapter — no meter, no provider call, no telemetry row.
290
+ assertRawKnobsSupported(input);
218
291
  const adapter = buildRawAdapter(input.provider, input.apiKey);
219
292
  const candidate = (0, resolve_1.mintRawCandidate)(input.provider, input.model);
220
293
  const started = Date.now();
@@ -251,11 +324,15 @@ function runRawStream(deps, input) {
251
324
  // the events iterator surfaces the same error to whoever drains it.
252
325
  result.catch(() => { });
253
326
  async function* events() {
254
- const adapter = buildRawAdapter(input.provider, input.apiKey);
255
- const candidate = (0, resolve_1.mintRawCandidate)(input.provider, input.model);
256
- const req = buildRawRequest(candidate, input);
257
- const started = Date.now();
258
327
  try {
328
+ // CE-2 F1/F3: fail closed on an unsupported declared directive BEFORE any
329
+ // adapter/dispatch — surfaced through the handle (result rejects, the
330
+ // events iterator throws), so no meter, no provider call, no telemetry row.
331
+ assertRawKnobsSupported(input);
332
+ const adapter = buildRawAdapter(input.provider, input.apiKey);
333
+ const candidate = (0, resolve_1.mintRawCandidate)(input.provider, input.model);
334
+ const req = buildRawRequest(candidate, input);
335
+ const started = Date.now();
259
336
  let adapterResult;
260
337
  if (adapter.stream !== undefined) {
261
338
  let final = null;
@@ -48,6 +48,20 @@ export interface SamplingParams {
48
48
  * previously settable only on the raw lane. Loader checks integer ≥ 1. */
49
49
  readonly maxOutputTokens?: number;
50
50
  }
51
+ /** Provider-neutral reasoning/thinking effort (CE-2, spec §3 F3). The name is
52
+ * DELIBERATELY not any single provider's field (`thinkingLevel`,
53
+ * `reasoning_effort`): one declared vocabulary maps to each provider's native
54
+ * shape (gemini `thinkingConfig.thinkingLevel` today; OpenAI `reasoning_effort`
55
+ * the natural follow-up). ADDITIVE and declared-only, exactly like sampling:
56
+ * - ABSENT ⇒ byte-identical dispatch — gemini keeps its hardcoded `"high"` for
57
+ * the thinking-capable models, every other adapter keeps sending nothing.
58
+ * - PRESENT ⇒ honored on a supporting provider/model, or FAIL-CLOSED
59
+ * (classified, never silently dropped) on one that cannot serve it. v1
60
+ * support set = { gemini + thinking-capable model }. */
61
+ export type ReasoningLevel = "minimal" | "low" | "medium" | "high";
62
+ export interface ReasoningParams {
63
+ readonly level: ReasoningLevel;
64
+ }
51
65
  /** A single callable tool the model may invoke. `parameters` is a JSON Schema
52
66
  * describing the arguments (OpenAI `function` shape). */
53
67
  export interface ToolDefinition {
@@ -111,6 +125,17 @@ export interface AdapterRequest {
111
125
  * lane the top-level field), but the precedence keeps resolution deterministic
112
126
  * (adapters/sampling.ts). */
113
127
  readonly sampling?: SamplingParams;
128
+ /**
129
+ * Declared reasoning/thinking effort (CE-2, spec §3 F3). Threaded from the raw
130
+ * lane's `RawRunInput.reasoning` (run/raw.ts); the routed lane does not carry
131
+ * it in v1 (`policy.reasoning` can join `policy.sampling` later). Adapters map
132
+ * the neutral `level` to their native field and keep their current default
133
+ * when it is absent (gemini's hardcoded `"high"`). Declared on a provider or
134
+ * model that cannot serve reasoning is FAIL-CLOSED, never silently dropped —
135
+ * the raw-lane guard rejects the wrong provider pre-dispatch (run/raw.ts) and
136
+ * the gemini adapter rejects a non-thinking model (adapters/gemini.ts).
137
+ */
138
+ readonly reasoning?: ReasoningParams;
114
139
  /** Unified tool-calling (spec §4.4) — tools the model may call. Adapters map
115
140
  * to native tool shapes; absent => no tool surface (identical to today). */
116
141
  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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "modelrig",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "description": "ModelRig — capability-aware AI gateway: routes-as-code, provider adapters, typed failures, budget envelopes, and local-first telemetry.",
6
6
  "license": "Apache-2.0",