@owlmeans/llm 0.1.18-rc.41 → 0.1.18-rc.42

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/README.md CHANGED
@@ -20,7 +20,7 @@ abstraction that resolves models from an inheritable policy.
20
20
  ## Installation
21
21
 
22
22
  ```bash
23
- bun add @owlmeans/llm@^0.1.18-rc.41 @owlmeans/llm-common@^0.1.18-rc.37
23
+ bun add @owlmeans/llm@^0.1.18-rc.42 @owlmeans/llm-common@^0.1.18-rc.37
24
24
  bun add @langchain/core @langchain/openai @langchain/anthropic # peer dependencies
25
25
  ```
26
26
 
@@ -185,7 +185,7 @@ This package ships embedded agent skills under `agent-meta/`. After installing y
185
185
  your project's skill store (`.agents/skills/`):
186
186
 
187
187
  ```sh
188
- npx @owlmeans/agent-skills@^0.1.18-rc.43
188
+ npx @owlmeans/agent-skills@^0.1.18-rc.44
189
189
  ```
190
190
 
191
191
  The embedded files are version-matched to this package release. Do not edit them
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "@owlmeans/llm",
4
- "version": "0.1.18-rc.41",
5
- "generatedAt": "2026-09-29T08:27:56.737Z",
4
+ "version": "0.1.18-rc.42",
5
+ "generatedAt": "2026-09-29T10:19:14.676Z",
6
6
  "canonicalRepo": "https://github.com/owlmeans/common",
7
7
  "entries": [
8
8
  {
@@ -8,7 +8,7 @@ user-invocable: false
8
8
  # @owlmeans/llm
9
9
 
10
10
  **Layer:** Core
11
- **Install:** `"@owlmeans/llm": "^0.1.18-rc.41"` in `dependencies` (plus the `@langchain/*` peers)
11
+ **Install:** `"@owlmeans/llm": "^0.1.18-rc.42"` in `dependencies` (plus the `@langchain/*` peers)
12
12
 
13
13
  The inference runtime. Everything provider-specific is a **plugin**; the model itself only owns the
14
14
  provider-independent parts (streaming discipline, retries, validation, observability). Serializable
@@ -31,7 +31,7 @@ symbol "because a test needs it".
31
31
  | `plugins`, `registerLlmPlugin`, `resolvePlugin`, `pluginOf`, `pluginFor` | The provider-plugin registry. Also at `@owlmeans/llm/plugins`. |
32
32
  | `anthropicPlugin`, `openAiPlugin`, `compatiblePlugin`, `openAiFamily` | Built-in providers; `openAiFamily` is the shared OpenAI-client behaviour to spread into a new plugin. |
33
33
  | `NO_SAMPLING_PREFIXES` / `rejectsSampling(model)` · `RESPONSES_API_PREFIXES` / `usesResponsesApi(model)` | Which families reject which sampling parameters — see the table below. Consumers pin presets against them. |
34
- | `effortSupportOf(config)` · `OPENAI_EFFORT_SUPPORT`, `ANTHROPIC_MODEL_SUPPORT` / `anthropicSupportOf(model)` · `REASONING_MIN_MAX_TOKENS` | Which `ModelConfig.effort` levels a model accepts, and the per-family Anthropic facts beside them — see "Fallback chains and provider effort". |
34
+ | `effortSupportOf(config)` · `OPENAI_EFFORT_SUPPORT`, `OPENAI_HIDDEN_PROPERTY_NAMES`, `ANTHROPIC_MODEL_SUPPORT` / `anthropicSupportOf(model)` · `REASONING_MIN_MAX_TOKENS` | Which `ModelConfig.effort` levels a model accepts, and the per-family Anthropic facts beside them — see "Fallback chains and provider effort". |
35
35
  | `ThinkingOff`, `thinkingOffFor(config)` · `rejectsForcedTool(model)` | The Anthropic off switch a config sends (`disabled`, `between_tools`, or none), and whether a model refuses a pinned `tool_choice`. |
36
36
  | `withRetry`, `registerFatalError`, `isFatalError`, `spectate`, `normalizeInput`, `parseJsonContent`, `coerceToSchema`, `resolveFallbacks`, `PROVIDER_NEUTRAL_FIELDS` | Helpers usable alongside a model. Also at `@owlmeans/llm/helpers`. |
37
37
  | `LlmError`, `LlmModelError`, `LlmMissconfiguredError`, `LlmPluginError`, `LlmRetryExceededError` | `ResilientError` family. `LlmModelError` is the RETRYABLE one. |
@@ -51,6 +51,7 @@ symbol "because a test needs it".
51
51
  | `structuredMode` | native `response_format` vs a structured-output tool call |
52
52
  | `toolChoice(toolName, config)` / `responseFormat` | the provider-specific call shapes; `config` is the ACTIVE rung's, so a model that refuses a pinned tool gets the automatic choice |
53
53
  | `pinsTool(config)` / `strictTool(config, schema)` | whether `toolChoice` pins the tool (when not, `prepare` appends `toolCallInstruction`), and whether the tool goes `strict` |
54
+ | `schemaDefects(config, schema)` | what the provider would not show the model of a structured-output schema; non-empty is a fatal `LlmMissconfiguredError` before the rung's first request |
54
55
  | `patchSystem` | how the composed system blocks are rendered and where their cache breakpoints go |
55
56
  | `patchCache` | the message-prefix cache marker |
56
57
  | `cacheKey` (via `ModelConfig.cacheKey`) | provider cache-routing hints such as OpenAI's `prompt_cache_key` |
@@ -332,6 +333,36 @@ At `high` and above the OpenAI plugin floors the output budget at `REASONING_MIN
332
333
  OpenAI's reasoning-guide reservation for reasoning + answer), clamped to the cap, like
333
334
  `ADAPTIVE_MIN_MAX_TOKENS` below.
334
335
 
336
+ **OpenAI effort travels in `modelKwargs.reasoning`, never in the constructor's `reasoning` field.**
337
+ `@langchain/openai` (1.5.x) puts that field on the wire only for names it recognises as reasoning
338
+ models (`o*`, `gpt-5*`), so on `gpt-6-*` it was dropped from every request with no error — every
339
+ preset effort on an OpenAI rung was ignored. `modelKwargs` is spread verbatim into the Responses
340
+ body for every model, and langchain adds its own `reasoning` key only when the constructor field or a
341
+ call option is set, which the plugin never does, so the key goes out exactly once. `build` writes it
342
+ there and `refine` climbs it there (reading the declared level back from `modelKwargs`). Assert it on
343
+ the request body, `invocationParams()`, never on `lc_kwargs`. Verified live 2026-09-29 on
344
+ `gpt-6-luna`: `effort: low` → 179 reasoning tokens, `high` → 331, both echoed back in the response's
345
+ `reasoning`; `gpt-5.4-mini` still gets no effort.
346
+
347
+ **OpenAI hides property NAMES that look like keywords.** A non-strict `json_schema` response format
348
+ (the only one the plugin sends, `strict: false`) is rendered into the model's prompt with JSON-schema
349
+ keywords stripped by KEY, anywhere in the tree, a `properties` map included. A property named like one
350
+ of `OPENAI_HIDDEN_PROPERTY_NAMES` — `required`, `default`, `format`, `pattern`,
351
+ `additionalProperties`, `examples`, `deprecated`, `readOnly`, `writeOnly`, `minimum`, `maximum`,
352
+ `exclusiveMinimum`, `exclusiveMaximum`, `multipleOf`, `minLength`, `maxLength`, `minItems`,
353
+ `maxItems`, `uniqueItems`, `minProperties`, `maxProperties`, `allOf`, `not`, `if`, `then`, `else`,
354
+ `contains`, `propertyNames`, `patternProperties`, `dependentRequired`, `unevaluatedProperties`
355
+ (measured on `gpt-6-sol`/`gpt-6-luna`) — never reaches the model, is never answered, and fails
356
+ validation identically on every retry. `type`, `properties`, `items`, `enum`, `const`,
357
+ `description`, `title`, `nullable`, `anyOf`, `oneOf`, `$ref`, `$id`, `$defs`, `definitions`,
358
+ `prefixItems` and `discriminator` survive. The plugin's `schemaDefects` names each such property by
359
+ JSON pointer (only keys of a `properties` map — a keyword in keyword position is fine), and `invoke`
360
+ / `request` throw `LlmMissconfiguredError` before the rung's first request; a misconfiguration is
361
+ fatal to every retry loop. Function calling (`structuredOutput: false`) and Anthropic's tool mode
362
+ keep every name and are not refused. Rename the field (`mandatory` for `required`). `strict: true`
363
+ is not sent to OpenAI: its strict mode also demands every property in `required`, which
364
+ `isStrictSchema` (Anthropic's subset) does not check.
365
+
335
366
  ### Reasoning is off unless a preset asks for it — and it is billed against the same budget
336
367
 
337
368
  The models `NO_SAMPLING_PREFIXES` names think ADAPTIVELY unless the request says otherwise: an absent
@@ -422,7 +453,8 @@ suite is gated on `ANTHROPIC_SECRET` and self-skips with a printed reason withou
422
453
  suite is disabled unconditionally: an aggregator on a separate account serving models no deployment runs,
423
454
  whose `402 requires more credits` reads as a failure of the code under test. `anthropic-families.spec.ts`
424
455
  pins the per-family wire (thinking switch, effort ceiling, `tool_choice`, `strict`, cache minimum,
425
- the retry on a text-only reply) through `ChatAnthropic.invocationParams`. `plugins.spec.ts` covers the
456
+ the retry on a text-only reply) through `ChatAnthropic.invocationParams`; `structured-schema.spec.ts`
457
+ pins the refusal of a hidden property name before any request. `plugins.spec.ts` covers the
426
458
  `Compatible` provider offline.
427
459
 
428
460
  ## Depends On
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/helpers/retry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAInE;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,aAAc,kBAAkB,KAAG,IAEjE,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,MAAO,OAAO,UAAU,kBAAkB,KAAG,KAAK,GAAG,IACtD,CAAA;AAgBxB;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAU,CAAC,oCACW,YAAY,MAClD,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAClC,OAAO,CAAC,CAAC,CAiBX,CAAA"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/helpers/retry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAKnE;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,aAAc,kBAAkB,KAAG,IAEjE,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,MAAO,OAAO,UAAU,kBAAkB,KAAG,KAAK,GAAG,IACtD,CAAA;AAgBxB;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAU,CAAC,oCACW,YAAY,MAClD,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAClC,OAAO,CAAC,CAAC,CAiBX,CAAA"}
@@ -1,6 +1,7 @@
1
- import { LlmRetryExceededError } from '../errors.js';
1
+ import { LlmMissconfiguredError, LlmRetryExceededError } from '../errors.js';
2
2
  import { plugins } from '../plugins/index.js';
3
- const resolvers = [];
3
+ /** A misconfiguration is the same on every attempt: no retry, rung or climb can change it. */
4
+ const resolvers = [e => e instanceof LlmMissconfiguredError ? e : null];
4
5
  /**
5
6
  * Register a globally-applicable rule that turns a thrown error into an immediate
6
7
  * abort of every retry loop in this package. Use it for conditions no amount of
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/helpers/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAG7C,MAAM,SAAS,GAAyB,EAAE,CAAA;AAE1C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAA4B,EAAQ,EAAE;IACvE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC1B,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAU,EAAE,KAA0B,EAAgB,EAAE,CACnF,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAExB,MAAM,YAAY,GAAG,CAAC,CAAU,EAAE,KAA0B,EAAgB,EAAE;IAC5E,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;IACtB,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,GAAG,CAAA;IAC3B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACzB,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAA;IACjC,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAA;IACjC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,EAAE,OAAO,EAAE,YAAY,GAAG,KAAK,EAAE,KAAK,EAAgB,EACtD,EAAmC,EACvB,EAAE;IACd,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAA;IACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACpC,IAAI,KAAK,IAAI,IAAI;gBAAE,MAAM,KAAK,CAAA;YAC9B,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAA;YAClB,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAA;YACpB,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAA;gBAC1C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,CAAA;AAChB,CAAC,CAAA"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/helpers/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAG7C,8FAA8F;AAC9F,MAAM,SAAS,GAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAE7F;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAA4B,EAAQ,EAAE;IACvE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC1B,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAU,EAAE,KAA0B,EAAgB,EAAE,CACnF,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAExB,MAAM,YAAY,GAAG,CAAC,CAAU,EAAE,KAA0B,EAAgB,EAAE;IAC5E,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;IACtB,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,GAAG,CAAA;IAC3B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACzB,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAA;IACjC,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAA;IACjC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,EAAE,OAAO,EAAE,YAAY,GAAG,KAAK,EAAE,KAAK,EAAgB,EACtD,EAAmC,EACvB,EAAE;IACd,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAA;IACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACpC,IAAI,KAAK,IAAI,IAAI;gBAAE,MAAM,KAAK,CAAA;YAC9B,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAA;YAClB,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAA;YACpB,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAA;gBAC1C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,CAAA;AAChB,CAAC,CAAA"}
package/build/index.d.ts CHANGED
@@ -12,5 +12,5 @@ export { plugins, registerLlmPlugin, pluginOf, pluginFor, resolvePlugin, effortS
12
12
  export { anthropicPlugin, ANTHROPIC_FAMILY, ANTHROPIC_MODEL_SUPPORT, anthropicSupportOf, NO_SAMPLING_PREFIXES, rejectsForcedTool, rejectsSampling, ThinkingOff, thinkingOffFor, } from './plugins/anthropic.js';
13
13
  export type { AnthropicModelSupport } from './plugins/anthropic.js';
14
14
  export { compatiblePlugin } from './plugins/compatible.js';
15
- export { openAiPlugin, openAiFamily, OPENAI_FAMILY, OPENAI_EFFORT_SUPPORT, REASONING_MIN_MAX_TOKENS, RESPONSES_API_PREFIXES, usesResponsesApi, } from './plugins/openai.js';
15
+ export { openAiPlugin, openAiFamily, OPENAI_FAMILY, OPENAI_EFFORT_SUPPORT, OPENAI_HIDDEN_PROPERTY_NAMES, REASONING_MIN_MAX_TOKENS, RESPONSES_API_PREFIXES, usesResponsesApi, } from './plugins/openai.js';
16
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,mBAAmB,YAAY,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,mBAAmB,oBAAoB,CAAA;AACvC,OAAO,EACL,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,GAChF,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,oBAAoB,EACpG,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,GAChE,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EACL,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,wBAAwB,EAC1F,sBAAsB,EAAE,gBAAgB,GACzC,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,mBAAmB,YAAY,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,mBAAmB,oBAAoB,CAAA;AACvC,OAAO,EACL,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,GAChF,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,oBAAoB,EACpG,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,GAChE,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EACL,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,4BAA4B,EAC9F,wBAAwB,EAAE,sBAAsB,EAAE,gBAAgB,GACnE,MAAM,qBAAqB,CAAA"}
package/build/index.js CHANGED
@@ -9,5 +9,5 @@ export * from './prompt/index.js';
9
9
  export { plugins, registerLlmPlugin, pluginOf, pluginFor, resolvePlugin, effortSupportOf, } from './plugins/index.js';
10
10
  export { anthropicPlugin, ANTHROPIC_FAMILY, ANTHROPIC_MODEL_SUPPORT, anthropicSupportOf, NO_SAMPLING_PREFIXES, rejectsForcedTool, rejectsSampling, ThinkingOff, thinkingOffFor, } from './plugins/anthropic.js';
11
11
  export { compatiblePlugin } from './plugins/compatible.js';
12
- export { openAiPlugin, openAiFamily, OPENAI_FAMILY, OPENAI_EFFORT_SUPPORT, REASONING_MIN_MAX_TOKENS, RESPONSES_API_PREFIXES, usesResponsesApi, } from './plugins/openai.js';
12
+ export { openAiPlugin, openAiFamily, OPENAI_FAMILY, OPENAI_EFFORT_SUPPORT, OPENAI_HIDDEN_PROPERTY_NAMES, REASONING_MIN_MAX_TOKENS, RESPONSES_API_PREFIXES, usesResponsesApi, } from './plugins/openai.js';
13
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAE3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AAEjC,OAAO,EACL,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,GAChF,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,oBAAoB,EACpG,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,GAChE,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EACL,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,wBAAwB,EAC1F,sBAAsB,EAAE,gBAAgB,GACzC,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAE3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AAEjC,OAAO,EACL,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,GAChF,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,oBAAoB,EACpG,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,GAChE,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EACL,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,4BAA4B,EAC9F,wBAAwB,EAAE,sBAAsB,EAAE,gBAAgB,GACnE,MAAM,qBAAqB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACuB,QAAQ,EAAE,eAAe,EAC1D,YAAY,EACb,MAAM,YAAY,CAAA;AAmDnB;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,sGAWtB,eAAe,aAAa,YAAY,KAAG,QAkgB7C,CAAA"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACuB,QAAQ,EAAE,eAAe,EAC1D,YAAY,EACb,MAAM,YAAY,CAAA;AAmDnB;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,sGAWtB,eAAe,aAAa,YAAY,KAAG,QAghB7C,CAAA"}
package/build/model.js CHANGED
@@ -2,7 +2,7 @@ import { Ajv } from 'ajv';
2
2
  import { AIMessage, BaseMessage } from '@langchain/core/messages';
3
3
  import { StructuredMode } from '@owlmeans/llm-common';
4
4
  import { DEFAULT_MODEL_RETRIES, MAX_CACHE_BREAKPOINTS } from './consts.js';
5
- import { LlmModelError } from './errors.js';
5
+ import { LlmMissconfiguredError, LlmModelError } from './errors.js';
6
6
  import { coerceToSchema, parseJsonContent } from './helpers/json.js';
7
7
  import { normalizeInput } from './helpers/messages.js';
8
8
  import { withRetry } from './helpers/retry.js';
@@ -212,6 +212,17 @@ export const makeLlmModel = ({ model, outputErrors = false, captureNull = false,
212
212
  }
213
213
  return { ...rung, refined };
214
214
  };
215
+ /**
216
+ * Refuse a schema this rung's provider would not show the model as written — before the rung's
217
+ * request, and fatally: the model cannot answer a property it is never shown, and each retry
218
+ * would fail validation the same way.
219
+ */
220
+ const assertSchemaShown = ({ plugin, config }, schema) => {
221
+ const defects = plugin?.schemaDefects?.(config, schema) ?? [];
222
+ if (defects.length > 0) {
223
+ throw new LlmMissconfiguredError(`schema-hidden:${config.model ?? config.alias}: ${defects.join('; ')}`);
224
+ }
225
+ };
215
226
  /** How this rung should be asked for schema-conforming output. */
216
227
  const structuredMode = ({ plugin, config }) => plugin != null
217
228
  ? plugin.structuredMode(config)
@@ -377,6 +388,7 @@ export const makeLlmModel = ({ model, outputErrors = false, captureNull = false,
377
388
  await prepared(rungAt(rungs, seed).rung);
378
389
  return await withRetry({ retries, outputErrors, fatal }, async (i) => {
379
390
  const active = refineModel(seed + i, temperature);
391
+ assertSchemaShown(active, innerSchema);
380
392
  const { refined } = active;
381
393
  const msgs = await prepared(active);
382
394
  console.log('Use model invoke: ', refined.getName(), refined.lc_kwargs.model);
@@ -421,6 +433,7 @@ export const makeLlmModel = ({ model, outputErrors = false, captureNull = false,
421
433
  await prepared(rungAt(rungs, seed).rung);
422
434
  return await withRetry({ retries, outputErrors, fatal }, async (i) => {
423
435
  const active = refineModel(seed + i);
436
+ assertSchemaShown(active, innerSchema);
424
437
  const { refined } = active;
425
438
  const msgs = await prepared(active);
426
439
  console.log('Use model request: ', refined.getName(), refined.lc_kwargs.model);
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,17 @@ export declare const OPENAI_EFFORT_SUPPORT: ReadonlyArray<EffortSupport & {
31
31
  */
32
32
  export declare const REASONING_MIN_MAX_TOKENS = 25000;
33
33
  export declare const OPENAI_FAMILY = "openai";
34
+ /**
35
+ * Property NAMES OpenAI never shows the model in a NON-strict `json_schema` response format — the
36
+ * one this plugin sends (`strict: false`). The Responses API renders that schema into the prompt
37
+ * with JSON-schema keywords stripped by KEY, anywhere in the tree, a `properties` map included: a
38
+ * property named like one of these is removed from what the model sees, never answered, and a
39
+ * schema that requires it fails validation on every retry. Measured on `gpt-6-sol` / `gpt-6-luna`
40
+ * (2026-09-29); `type`, `properties`, `items`, `enum`, `const`, `description`, `title`,
41
+ * `nullable`, `anyOf`, `oneOf`, `$ref`, `$id`, `$defs`, `definitions`, `prefixItems` and
42
+ * `discriminator` survive. Function calling (`structuredOutput: false`) keeps every name.
43
+ */
44
+ export declare const OPENAI_HIDDEN_PROPERTY_NAMES: ReadonlySet<string>;
34
45
  /** Every plugin that constructs a `ChatOpenAI` shares these instance-level behaviours. */
35
46
  export declare const openAiFamily: {
36
47
  family: string;
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/plugins/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAA;AAEhF,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAM3E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,UAA+B,CAAA;AAElE,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,UAAW,MAAM,GAAG,SAAS,KAAG,OACqB,CAAA;AAElF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAcnF,CAAA;AAOD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,QAAS,CAAA;AAK9C,eAAO,MAAM,aAAa,WAAW,CAAA;AAErC,0FAA0F;AAC1F,eAAO,MAAM,YAAY;;kBAGT,aAAa,KAAG,OAAO;IAErC;;;OAGG;2BACoB,MAAM,KAAG,OAAO;IAEvC;;;;;OAKG;+BACwB,MAAM,UAAU,OAAO,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAK5E;;;;;;;;;OASG;iBACU,OAAO,KAAG,KAAK,GAAG,IAAI;wEAEiC,eAAe,KAAG,aAAa;CAyDpG,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SAwD1B,CAAA"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/plugins/openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAA;AAEhF,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAO3E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,UAA+B,CAAA;AAElE,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,UAAW,MAAM,GAAG,SAAS,KAAG,OACqB,CAAA;AAElF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAcnF,CAAA;AAwBD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,QAAS,CAAA;AAK9C,eAAO,MAAM,aAAa,WAAW,CAAA;AAErC;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,EAAE,WAAW,CAAC,MAAM,CAM3D,CAAA;AAEF,0FAA0F;AAC1F,eAAO,MAAM,YAAY;;kBAGT,aAAa,KAAG,OAAO;IAErC;;;OAGG;2BACoB,MAAM,KAAG,OAAO;IAEvC;;;;;OAKG;+BACwB,MAAM,UAAU,OAAO,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAK5E;;;;;;;;;OASG;iBACU,OAAO,KAAG,KAAK,GAAG,IAAI;wEAEiC,eAAe,KAAG,aAAa;CAyDpG,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SA0D1B,CAAA"}
@@ -3,6 +3,7 @@ import { ModelEffort, ModelProvider, StructuredMode } from '@owlmeans/llm-common
3
3
  import { resolveOutputCap } from '../utils/config.js';
4
4
  import { effortAtLeast, effortFor } from '../utils/effort.js';
5
5
  import { escalateMaxTokens, isBadRequest, makeConfiguration } from './utils.js';
6
+ import { hiddenPropertyNames } from '../utils/schema.js';
6
7
  /**
7
8
  * Model families served through OpenAI's Responses API rather than chat completions. That
8
9
  * endpoint REJECTS `temperature`/`top_p` — a 400 naming the parameter, not a silently
@@ -42,6 +43,7 @@ const openAiEffort = (model) => {
42
43
  const entry = model != null ? OPENAI_EFFORT_SUPPORT.find(e => model.startsWith(e.prefix)) : undefined;
43
44
  return entry != null ? { levels: entry.levels, default: entry.default } : undefined;
44
45
  };
46
+ const withEffort = (modelKwargs, effort) => effort != null ? { ...modelKwargs, reasoning: { ...modelKwargs?.reasoning, effort } } : modelKwargs;
45
47
  /**
46
48
  * The smallest output budget a request at `high` effort or above is given. Reasoning tokens
47
49
  * are billed against `max_output_tokens` together with the answer, and OpenAI's reasoning
@@ -51,6 +53,23 @@ const openAiEffort = (model) => {
51
53
  export const REASONING_MIN_MAX_TOKENS = 25_000;
52
54
  const reasoningFloor = (maxTokens, effort, cap) => effortAtLeast(effort, ModelEffort.High) ? Math.max(maxTokens, Math.min(REASONING_MIN_MAX_TOKENS, cap)) : maxTokens;
53
55
  export const OPENAI_FAMILY = 'openai';
56
+ /**
57
+ * Property NAMES OpenAI never shows the model in a NON-strict `json_schema` response format — the
58
+ * one this plugin sends (`strict: false`). The Responses API renders that schema into the prompt
59
+ * with JSON-schema keywords stripped by KEY, anywhere in the tree, a `properties` map included: a
60
+ * property named like one of these is removed from what the model sees, never answered, and a
61
+ * schema that requires it fails validation on every retry. Measured on `gpt-6-sol` / `gpt-6-luna`
62
+ * (2026-09-29); `type`, `properties`, `items`, `enum`, `const`, `description`, `title`,
63
+ * `nullable`, `anyOf`, `oneOf`, `$ref`, `$id`, `$defs`, `definitions`, `prefixItems` and
64
+ * `discriminator` survive. Function calling (`structuredOutput: false`) keeps every name.
65
+ */
66
+ export const OPENAI_HIDDEN_PROPERTY_NAMES = new Set([
67
+ 'required', 'default', 'format', 'pattern', 'additionalProperties', 'examples', 'deprecated',
68
+ 'readOnly', 'writeOnly', 'minimum', 'maximum', 'exclusiveMinimum', 'exclusiveMaximum',
69
+ 'multipleOf', 'minLength', 'maxLength', 'minItems', 'maxItems', 'uniqueItems', 'minProperties',
70
+ 'maxProperties', 'allOf', 'not', 'if', 'then', 'else', 'contains', 'propertyNames',
71
+ 'patternProperties', 'dependentRequired', 'unevaluatedProperties',
72
+ ]);
54
73
  /** Every plugin that constructs a `ChatOpenAI` shares these instance-level behaviours. */
55
74
  export const openAiFamily = {
56
75
  family: OPENAI_FAMILY,
@@ -90,7 +109,7 @@ export const openAiFamily = {
90
109
  // Effort only where `build` chose the Responses API itself — the `compatible` plugin
91
110
  // shares this hook and speaks an aggregator's `reasoning` dialect instead.
92
111
  const effort = baseKwargs.useResponsesApi === true
93
- ? effortFor(openAiEffort(model.model ?? baseKwargs.model), baseKwargs.reasoning?.effort, rungAttempt ?? attempt)
112
+ ? effortFor(openAiEffort(model.model ?? baseKwargs.model), baseKwargs.modelKwargs?.reasoning?.effort, rungAttempt ?? attempt)
94
113
  : undefined;
95
114
  const maxTokens = reasoningFloor(escalateMaxTokens(model.maxTokens, attempt, maxOutputCap), effort, maxOutputCap);
96
115
  // The dominant cause of an empty response is a reasoning model spending the whole
@@ -110,14 +129,16 @@ export const openAiFamily = {
110
129
  // temperature here puts it on the wire for every single request, not just a retry.
111
130
  // Suppressing it in one hook and restoring it in the other ships the parameter anyway.
112
131
  if (responsesApi) {
132
+ const kwargs = withEffort(modelKwargs, effort);
113
133
  const cfg = {
114
134
  ...baseKwargs,
115
135
  maxTokens,
116
- ...(modelKwargs != null ? { modelKwargs } : {}),
117
- ...(effort != null ? { reasoning: { ...baseKwargs.reasoning, effort } } : {}),
136
+ ...(kwargs != null ? { modelKwargs: kwargs } : {}),
118
137
  };
119
138
  delete cfg.temperature;
120
139
  delete cfg.topP;
140
+ // The constructor field is the one langchain drops on `gpt-6-*` — never set it.
141
+ delete cfg.reasoning;
121
142
  return new ChatOpenAI(cfg);
122
143
  }
123
144
  return new ChatOpenAI({
@@ -138,6 +159,7 @@ export const openAiPlugin = {
138
159
  type: ModelProvider.OpenAI,
139
160
  structuredMode: (config) => config.structuredOutput === false ? StructuredMode.Tool : StructuredMode.Native,
140
161
  effort: config => openAiEffort(config.model),
162
+ schemaDefects: (config, schema) => config.structuredOutput === false ? [] : hiddenPropertyNames(schema, OPENAI_HIDDEN_PROPERTY_NAMES),
141
163
  build: ({ alias, config, secret, callbacks }) => {
142
164
  const model = config.model ??= 'gpt-5.4-mini';
143
165
  const configuration = makeConfiguration({ baseURL: undefined, headers: config.headers });
@@ -163,8 +185,7 @@ export const openAiPlugin = {
163
185
  useResponsesApi: true,
164
186
  metadata: { config },
165
187
  callbacks,
166
- modelKwargs,
167
- ...(effort != null ? { reasoning: { effort } } : {}),
188
+ modelKwargs: withEffort(modelKwargs, effort),
168
189
  ...configuration,
169
190
  });
170
191
  }
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/plugins/openai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/plugins/openai.ts"],"names":[],"mappings":"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"}
@@ -122,6 +122,13 @@ export interface LlmPlugin {
122
122
  * model and schema. Omitted: never.
123
123
  */
124
124
  strictTool?: (config: Partial<ModelConfig>, schema: unknown) => boolean;
125
+ /**
126
+ * What stops this provider from SHOWING the model a structured-output schema as written — one
127
+ * line per defect, each naming its JSON pointer. A non-empty answer fails the call before the
128
+ * rung's first request with a fatal `LlmMissconfiguredError`: a model cannot answer what it is
129
+ * never shown, and every retry would fail validation the same way. Omitted: nothing is hidden.
130
+ */
131
+ schemaDefects?: (config: Partial<ModelConfig>, schema: unknown) => string[];
125
132
  /** Provider-specific `response_format` for {@link StructuredMode.Native}. */
126
133
  responseFormat?: (toolName: string, schema: unknown) => Record<string, unknown>;
127
134
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"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"}
@@ -29,4 +29,10 @@ export declare const unwrapNamed: <T>(result: T, name: string | undefined) => T;
29
29
  * unconstrained, and the caller's validator still checks what comes back.
30
30
  */
31
31
  export declare const isStrictSchema: (schema: unknown) => boolean;
32
+ /**
33
+ * One line per object PROPERTY whose name is in `hidden`, naming its JSON pointer. Only a key of a
34
+ * `properties` map counts — a keyword in keyword position (`required: […]`) is what the schema is
35
+ * made of, not a field the model has to answer.
36
+ */
37
+ export declare const hiddenPropertyNames: (schema: unknown, hidden: ReadonlySet<string>, at?: string) => string[];
32
38
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAGhE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,CAAC,OAAO,GAAG,UAAU,cAAc,CAAC,CAAC,CAAC,KAAG;IAC9E,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;IAC9B,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;CAK9B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAS,MAAM,GAAG,SAAS,KAAG,MAGpD,CAAA;AAED,0EAA0E;AAC1E,eAAO,MAAM,WAAW,GAAI,CAAC,UAAU,CAAC,QAAQ,MAAM,GAAG,SAAS,KAAG,CAKpE,CAAA;AAiBD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,WAAY,OAAO,KAAG,OAsEhD,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAA;AAGhE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,CAAC,OAAO,GAAG,UAAU,cAAc,CAAC,CAAC,CAAC,KAAG;IAC9E,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;IAC9B,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;CAK9B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAS,MAAM,GAAG,SAAS,KAAG,MAGpD,CAAA;AAED,0EAA0E;AAC1E,eAAO,MAAM,WAAW,GAAI,CAAC,UAAU,CAAC,QAAQ,MAAM,GAAG,SAAS,KAAG,CAKpE,CAAA;AAiBD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,WAAY,OAAO,KAAG,OAsEhD,CAAA;AAwBD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,WAAY,OAAO,UAAU,WAAW,CAAC,MAAM,CAAC,kBAAa,MAAM,EAiBlG,CAAA"}
@@ -116,4 +116,48 @@ export const isStrictSchema = (schema) => {
116
116
  }
117
117
  return true;
118
118
  };
119
+ /** Every sub-schema of a node, with the JSON-pointer segment that reaches it. */
120
+ const subSchemas = (node) => {
121
+ const children = [];
122
+ for (const key of ['properties', '$defs', 'definitions']) {
123
+ const map = node[key];
124
+ if (isPlainObject(map)) {
125
+ for (const [name, child] of Object.entries(map))
126
+ children.push([`${key}/${name}`, child]);
127
+ }
128
+ }
129
+ for (const key of ['items', 'additionalProperties']) {
130
+ if (isPlainObject(node[key]))
131
+ children.push([key, node[key]]);
132
+ }
133
+ for (const key of ['items', 'prefixItems', 'anyOf', 'oneOf', 'allOf']) {
134
+ const list = node[key];
135
+ if (Array.isArray(list))
136
+ list.forEach((child, index) => children.push([`${key}/${index}`, child]));
137
+ }
138
+ return children;
139
+ };
140
+ const pointerSegment = (name) => name.replace(/~/g, '~0').replace(/\//g, '~1');
141
+ /**
142
+ * One line per object PROPERTY whose name is in `hidden`, naming its JSON pointer. Only a key of a
143
+ * `properties` map counts — a keyword in keyword position (`required: […]`) is what the schema is
144
+ * made of, not a field the model has to answer.
145
+ */
146
+ export const hiddenPropertyNames = (schema, hidden, at = '#') => {
147
+ if (!isPlainObject(schema)) {
148
+ return [];
149
+ }
150
+ const defects = [];
151
+ if (isPlainObject(schema.properties)) {
152
+ for (const name of Object.keys(schema.properties)) {
153
+ if (hidden.has(name)) {
154
+ defects.push(`${at}/properties/${pointerSegment(name)}: a property named "${name}" is not shown to the model`);
155
+ }
156
+ }
157
+ }
158
+ for (const [segment, child] of subSchemas(schema)) {
159
+ defects.push(...hiddenPropertyNames(child, hidden, `${at}/${segment}`));
160
+ }
161
+ return defects;
162
+ };
119
163
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/llm",
3
- "version": "0.1.18-rc.41",
3
+ "version": "0.1.18-rc.42",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,8 +1,9 @@
1
- import { LlmRetryExceededError } from '../errors.js'
1
+ import { LlmMissconfiguredError, LlmRetryExceededError } from '../errors.js'
2
2
  import { plugins } from '../plugins/index.js'
3
3
  import type { FatalErrorResolver, RetryOptions } from '../types.js'
4
4
 
5
- const resolvers: FatalErrorResolver[] = []
5
+ /** A misconfiguration is the same on every attempt: no retry, rung or climb can change it. */
6
+ const resolvers: FatalErrorResolver[] = [e => e instanceof LlmMissconfiguredError ? e : null]
6
7
 
7
8
  /**
8
9
  * Register a globally-applicable rule that turns a thrown error into an immediate
package/src/index.ts CHANGED
@@ -19,6 +19,6 @@ export {
19
19
  export type { AnthropicModelSupport } from './plugins/anthropic.js'
20
20
  export { compatiblePlugin } from './plugins/compatible.js'
21
21
  export {
22
- openAiPlugin, openAiFamily, OPENAI_FAMILY, OPENAI_EFFORT_SUPPORT, REASONING_MIN_MAX_TOKENS,
23
- RESPONSES_API_PREFIXES, usesResponsesApi,
22
+ openAiPlugin, openAiFamily, OPENAI_FAMILY, OPENAI_EFFORT_SUPPORT, OPENAI_HIDDEN_PROPERTY_NAMES,
23
+ REASONING_MIN_MAX_TOKENS, RESPONSES_API_PREFIXES, usesResponsesApi,
24
24
  } from './plugins/openai.js'
package/src/model.ts CHANGED
@@ -6,7 +6,7 @@ import type { BaseChatModel } from '@langchain/core/language_models/chat_models'
6
6
  import { StructuredMode } from '@owlmeans/llm-common'
7
7
  import type { NullKind } from '@owlmeans/llm-common'
8
8
  import { DEFAULT_MODEL_RETRIES, MAX_CACHE_BREAKPOINTS } from './consts.js'
9
- import { LlmModelError } from './errors.js'
9
+ import { LlmMissconfiguredError, LlmModelError } from './errors.js'
10
10
  import type { LlmPlugin } from './plugins/types.js'
11
11
  import { coerceToSchema, parseJsonContent } from './helpers/json.js'
12
12
  import { normalizeInput } from './helpers/messages.js'
@@ -291,6 +291,18 @@ export const makeLlmModel = ({
291
291
  return { ...rung, refined }
292
292
  }
293
293
 
294
+ /**
295
+ * Refuse a schema this rung's provider would not show the model as written — before the rung's
296
+ * request, and fatally: the model cannot answer a property it is never shown, and each retry
297
+ * would fail validation the same way.
298
+ */
299
+ const assertSchemaShown = ({ plugin, config }: Rung, schema: unknown): void => {
300
+ const defects = plugin?.schemaDefects?.(config, schema) ?? []
301
+ if (defects.length > 0) {
302
+ throw new LlmMissconfiguredError(`schema-hidden:${config.model ?? config.alias}: ${defects.join('; ')}`)
303
+ }
304
+ }
305
+
294
306
  /** How this rung should be asked for schema-conforming output. */
295
307
  const structuredMode = ({ plugin, config }: Rung): StructuredMode => plugin != null
296
308
  ? plugin.structuredMode(config as Parameters<LlmPlugin['structuredMode']>[0])
@@ -507,6 +519,7 @@ export const makeLlmModel = ({
507
519
  await prepared(rungAt(rungs, seed).rung)
508
520
  return await withRetry({ retries, outputErrors, fatal }, async i => {
509
521
  const active = refineModel(seed + i, temperature)
522
+ assertSchemaShown(active, innerSchema)
510
523
  const { refined } = active
511
524
  const msgs = await prepared(active)
512
525
  console.log('Use model invoke: ', refined.getName(), refined.lc_kwargs.model)
@@ -564,6 +577,7 @@ export const makeLlmModel = ({
564
577
  await prepared(rungAt(rungs, seed).rung)
565
578
  return await withRetry({ retries, outputErrors, fatal }, async i => {
566
579
  const active = refineModel(seed + i)
580
+ assertSchemaShown(active, innerSchema)
567
581
  const { refined } = active
568
582
  const msgs = await prepared(active)
569
583
  console.log('Use model request: ', refined.getName(), refined.lc_kwargs.model)
@@ -6,6 +6,7 @@ import type { ModelConfig } from '../types.js'
6
6
  import { resolveOutputCap } from '../utils/config.js'
7
7
  import { effortAtLeast, effortFor } from '../utils/effort.js'
8
8
  import { escalateMaxTokens, isBadRequest, makeConfiguration } from './utils.js'
9
+ import { hiddenPropertyNames } from '../utils/schema.js'
9
10
 
10
11
  /**
11
12
  * Model families served through OpenAI's Responses API rather than chat completions. That
@@ -51,6 +52,23 @@ const openAiEffort = (model: string | undefined): EffortSupport | undefined => {
51
52
  return entry != null ? { levels: entry.levels, default: entry.default } : undefined
52
53
  }
53
54
 
55
+ /**
56
+ * The request's `reasoning` object travels in `modelKwargs`, never in the constructor's
57
+ * `reasoning` field. `@langchain/openai` puts that field on the wire only for model names it
58
+ * recognises as reasoning models (`o*`, `gpt-5*`), so on `gpt-6-*` a configured effort was
59
+ * silently dropped from every request. `modelKwargs` is spread verbatim into the Responses body
60
+ * for every model, and langchain adds its own `reasoning` key only when the constructor field (or
61
+ * a call option) is set — which this plugin never does — so the key goes out exactly once.
62
+ */
63
+ type OpenAiKwargs = ConstructorParameters<typeof ChatOpenAI>[0] & {
64
+ modelKwargs?: { reasoning?: { max_tokens?: number, effort?: string } & Record<string, unknown> } & Record<string, unknown>
65
+ }
66
+
67
+ const withEffort = (
68
+ modelKwargs: OpenAiKwargs['modelKwargs'], effort: ModelEffort | undefined,
69
+ ): OpenAiKwargs['modelKwargs'] =>
70
+ effort != null ? { ...modelKwargs, reasoning: { ...modelKwargs?.reasoning, effort } } : modelKwargs
71
+
54
72
  /**
55
73
  * The smallest output budget a request at `high` effort or above is given. Reasoning tokens
56
74
  * are billed against `max_output_tokens` together with the answer, and OpenAI's reasoning
@@ -64,6 +82,24 @@ const reasoningFloor = (maxTokens: number, effort: ModelEffort | undefined, cap:
64
82
 
65
83
  export const OPENAI_FAMILY = 'openai'
66
84
 
85
+ /**
86
+ * Property NAMES OpenAI never shows the model in a NON-strict `json_schema` response format — the
87
+ * one this plugin sends (`strict: false`). The Responses API renders that schema into the prompt
88
+ * with JSON-schema keywords stripped by KEY, anywhere in the tree, a `properties` map included: a
89
+ * property named like one of these is removed from what the model sees, never answered, and a
90
+ * schema that requires it fails validation on every retry. Measured on `gpt-6-sol` / `gpt-6-luna`
91
+ * (2026-09-29); `type`, `properties`, `items`, `enum`, `const`, `description`, `title`,
92
+ * `nullable`, `anyOf`, `oneOf`, `$ref`, `$id`, `$defs`, `definitions`, `prefixItems` and
93
+ * `discriminator` survive. Function calling (`structuredOutput: false`) keeps every name.
94
+ */
95
+ export const OPENAI_HIDDEN_PROPERTY_NAMES: ReadonlySet<string> = new Set([
96
+ 'required', 'default', 'format', 'pattern', 'additionalProperties', 'examples', 'deprecated',
97
+ 'readOnly', 'writeOnly', 'minimum', 'maximum', 'exclusiveMinimum', 'exclusiveMaximum',
98
+ 'multipleOf', 'minLength', 'maxLength', 'minItems', 'maxItems', 'uniqueItems', 'minProperties',
99
+ 'maxProperties', 'allOf', 'not', 'if', 'then', 'else', 'contains', 'propertyNames',
100
+ 'patternProperties', 'dependentRequired', 'unevaluatedProperties',
101
+ ])
102
+
67
103
  /** Every plugin that constructs a `ChatOpenAI` shares these instance-level behaviours. */
68
104
  export const openAiFamily = {
69
105
  family: OPENAI_FAMILY,
@@ -102,9 +138,7 @@ export const openAiFamily = {
102
138
  refine: ({ base, attempt, rungAttempt, temperature, maxOutputCap }: LlmRefineParams): BaseChatModel => {
103
139
  const model = base as ChatOpenAI
104
140
  const currentTemperature = temperature ?? model.temperature ?? 0
105
- const baseKwargs = model.lc_kwargs as ConstructorParameters<typeof ChatOpenAI>[0] & {
106
- modelKwargs?: { reasoning?: { max_tokens?: number } } & Record<string, unknown>
107
- }
141
+ const baseKwargs = model.lc_kwargs as OpenAiKwargs
108
142
  const responsesApi = usesResponsesApi(model.model ?? baseKwargs.model)
109
143
  || baseKwargs.useResponsesApi === true
110
144
  // Effort only where `build` chose the Responses API itself — the `compatible` plugin
@@ -112,7 +146,7 @@ export const openAiFamily = {
112
146
  const effort = baseKwargs.useResponsesApi === true
113
147
  ? effortFor(
114
148
  openAiEffort(model.model ?? baseKwargs.model),
115
- baseKwargs.reasoning?.effort as ModelEffort | undefined,
149
+ baseKwargs.modelKwargs?.reasoning?.effort as ModelEffort | undefined,
116
150
  rungAttempt ?? attempt,
117
151
  )
118
152
  : undefined
@@ -137,14 +171,16 @@ export const openAiFamily = {
137
171
  // temperature here puts it on the wire for every single request, not just a retry.
138
172
  // Suppressing it in one hook and restoring it in the other ships the parameter anyway.
139
173
  if (responsesApi) {
174
+ const kwargs = withEffort(modelKwargs, effort)
140
175
  const cfg = {
141
176
  ...baseKwargs,
142
177
  maxTokens,
143
- ...(modelKwargs != null ? { modelKwargs } : {}),
144
- ...(effort != null ? { reasoning: { ...baseKwargs.reasoning, effort } } : {}),
178
+ ...(kwargs != null ? { modelKwargs: kwargs } : {}),
145
179
  }
146
180
  delete cfg.temperature
147
181
  delete cfg.topP
182
+ // The constructor field is the one langchain drops on `gpt-6-*` — never set it.
183
+ delete cfg.reasoning
148
184
 
149
185
  return new ChatOpenAI(cfg)
150
186
  }
@@ -173,6 +209,9 @@ export const openAiPlugin: LlmPlugin = {
173
209
 
174
210
  effort: config => openAiEffort(config.model),
175
211
 
212
+ schemaDefects: (config, schema) =>
213
+ config.structuredOutput === false ? [] : hiddenPropertyNames(schema, OPENAI_HIDDEN_PROPERTY_NAMES),
214
+
176
215
  build: ({ alias, config, secret, callbacks }) => {
177
216
  const model = config.model ??= 'gpt-5.4-mini'
178
217
  const configuration = makeConfiguration({ baseURL: undefined, headers: config.headers })
@@ -200,8 +239,7 @@ export const openAiPlugin: LlmPlugin = {
200
239
  useResponsesApi: true,
201
240
  metadata: { config },
202
241
  callbacks,
203
- modelKwargs,
204
- ...(effort != null ? { reasoning: { effort } } : {}),
242
+ modelKwargs: withEffort(modelKwargs, effort),
205
243
  ...configuration,
206
244
  })
207
245
  }
@@ -141,6 +141,14 @@ export interface LlmPlugin {
141
141
  */
142
142
  strictTool?: (config: Partial<ModelConfig>, schema: unknown) => boolean
143
143
 
144
+ /**
145
+ * What stops this provider from SHOWING the model a structured-output schema as written — one
146
+ * line per defect, each naming its JSON pointer. A non-empty answer fails the call before the
147
+ * rung's first request with a fatal `LlmMissconfiguredError`: a model cannot answer what it is
148
+ * never shown, and every retry would fail validation the same way. Omitted: nothing is hidden.
149
+ */
150
+ schemaDefects?: (config: Partial<ModelConfig>, schema: unknown) => string[]
151
+
144
152
  /** Provider-specific `response_format` for {@link StructuredMode.Native}. */
145
153
  responseFormat?: (toolName: string, schema: unknown) => Record<string, unknown>
146
154
 
@@ -131,3 +131,49 @@ export const isStrictSchema = (schema: unknown): boolean => {
131
131
 
132
132
  return true
133
133
  }
134
+
135
+ /** Every sub-schema of a node, with the JSON-pointer segment that reaches it. */
136
+ const subSchemas = (node: Record<string, unknown>): Array<[string, unknown]> => {
137
+ const children: Array<[string, unknown]> = []
138
+ for (const key of ['properties', '$defs', 'definitions'] as const) {
139
+ const map = node[key]
140
+ if (isPlainObject(map)) {
141
+ for (const [name, child] of Object.entries(map)) children.push([`${key}/${name}`, child])
142
+ }
143
+ }
144
+ for (const key of ['items', 'additionalProperties'] as const) {
145
+ if (isPlainObject(node[key])) children.push([key, node[key]])
146
+ }
147
+ for (const key of ['items', 'prefixItems', 'anyOf', 'oneOf', 'allOf'] as const) {
148
+ const list = node[key]
149
+ if (Array.isArray(list)) list.forEach((child, index) => children.push([`${key}/${index}`, child]))
150
+ }
151
+
152
+ return children
153
+ }
154
+
155
+ const pointerSegment = (name: string): string => name.replace(/~/g, '~0').replace(/\//g, '~1')
156
+
157
+ /**
158
+ * One line per object PROPERTY whose name is in `hidden`, naming its JSON pointer. Only a key of a
159
+ * `properties` map counts — a keyword in keyword position (`required: […]`) is what the schema is
160
+ * made of, not a field the model has to answer.
161
+ */
162
+ export const hiddenPropertyNames = (schema: unknown, hidden: ReadonlySet<string>, at = '#'): string[] => {
163
+ if (!isPlainObject(schema)) {
164
+ return []
165
+ }
166
+ const defects: string[] = []
167
+ if (isPlainObject(schema.properties)) {
168
+ for (const name of Object.keys(schema.properties)) {
169
+ if (hidden.has(name)) {
170
+ defects.push(`${at}/properties/${pointerSegment(name)}: a property named "${name}" is not shown to the model`)
171
+ }
172
+ }
173
+ }
174
+ for (const [segment, child] of subSchemas(schema)) {
175
+ defects.push(...hiddenPropertyNames(child, hidden, `${at}/${segment}`))
176
+ }
177
+
178
+ return defects
179
+ }
@@ -395,8 +395,10 @@ describe('@owlmeans/llm — a temperature refinement climbs effort', () => {
395
395
  models: () => llm, policy: { effort: DEFAULT_EFFORT }, purpose: { type: 'spec' },
396
396
  }), { role })
397
397
  }
398
+ /** Read off the request body — the constructor's `reasoning` field is not what ships on gpt-6. */
398
399
  const effortOf = (model: BaseChatModel): string | undefined =>
399
- (model.lc_kwargs as { reasoning?: { effort?: string } }).reasoning?.effort
400
+ ((model as unknown as { invocationParams: (options: unknown) => { reasoning?: { effort?: string } } })
401
+ .invocationParams({})).reasoning?.effort
400
402
 
401
403
  test('each 0.3 of temperature is one level above the declared effort', () => {
402
404
  const helper = helperFor('declared')
@@ -197,8 +197,9 @@ describe('@owlmeans/llm — retry escalation behaviour', () => {
197
197
  })
198
198
 
199
199
  describe('@owlmeans/llm — provider effort', () => {
200
+ /** Read off the request body langchain builds — the constructor field is not what ships. */
200
201
  const openAiEffort = (model: BaseChatModel): string | undefined =>
201
- ((model as ChatOpenAI).lc_kwargs as { reasoning?: { effort?: string } }).reasoning?.effort
202
+ ((model as ChatOpenAI).invocationParams({} as never) as { reasoning?: { effort?: string } }).reasoning?.effort
202
203
  const anthropicEffort = (model: BaseChatModel): string | undefined =>
203
204
  ((model as ChatAnthropic).lc_kwargs as { outputConfig?: { effort?: string } }).outputConfig?.effort
204
205
 
@@ -217,6 +218,29 @@ describe('@owlmeans/llm — provider effort', () => {
217
218
  expect(openAiEffort(build(openAiPlugin, { model: 'gpt-4.1-mini', effort: ModelEffort.High }))).toBeUndefined()
218
219
  })
219
220
 
221
+ // `@langchain/openai` puts its constructor `reasoning` field on the wire only for `o*`/`gpt-5*`
222
+ // names: on `gpt-6-*` every configured effort was silently dropped. It travels in `modelKwargs`.
223
+ test('the gpt-6 request body carries reasoning.effort exactly as configured, once', () => {
224
+ for (const model of ['gpt-6-luna', 'gpt-6-sol']) {
225
+ for (const effort of [ModelEffort.Low, ModelEffort.High]) {
226
+ const built = build(openAiPlugin, { model, effort }) as ChatOpenAI
227
+ const params = built.invocationParams({} as never) as unknown as Record<string, unknown>
228
+ expect([model, params.reasoning]).toEqual([model, { effort }])
229
+ expect((built.lc_kwargs as { reasoning?: unknown }).reasoning).toBeUndefined()
230
+ expect(params.prompt_cache_key).toBe('spec')
231
+ }
232
+ const none = build(openAiPlugin, { model }) as ChatOpenAI
233
+ expect('reasoning' in (none.invocationParams({} as never) as object)).toBe(false)
234
+ }
235
+ })
236
+
237
+ test('a gpt-5 model is unchanged: no effort is guessed for it', () => {
238
+ const terra = build(openAiPlugin, { model: 'gpt-5.6-terra', effort: ModelEffort.High }) as ChatOpenAI
239
+ expect((terra.invocationParams({} as never) as { reasoning?: unknown }).reasoning).toBeUndefined()
240
+ const refined = openAiPlugin.refine({ base: terra, attempt: 2, rungAttempt: 2, maxOutputCap: 32000 }) as ChatOpenAI
241
+ expect((refined.invocationParams({} as never) as { reasoning?: unknown }).reasoning).toBeUndefined()
242
+ })
243
+
220
244
  test('a level the model does not accept is clamped to one it does, never sent as is', () => {
221
245
  expect(openAiEffort(build(openAiPlugin, { model: 'gpt-6-astra', effort: ModelEffort.None }))).toBe('low')
222
246
  expect(anthropicEffort(build(anthropicPlugin, {
@@ -0,0 +1,137 @@
1
+ import { describe, expect, test } from 'bun:test'
2
+ import { AIMessageChunk } from '@langchain/core/messages'
3
+ import type { BaseChatModel } from '@langchain/core/language_models/chat_models'
4
+ import type { JSONSchemaType } from 'ajv'
5
+ import {
6
+ anthropicPlugin, isFatalError, LlmMissconfiguredError, makeLlmModel, OPENAI_HIDDEN_PROPERTY_NAMES,
7
+ openAiPlugin, registerLlmPlugin,
8
+ } from '@owlmeans/llm'
9
+ import type { LlmPlugin, LlmSpectator } from '@owlmeans/llm'
10
+ import { hiddenPropertyNames } from '../src/utils/schema.js'
11
+
12
+ /**
13
+ * OpenAI's non-strict `json_schema` rendering strips JSON-schema keywords by KEY NAME, a
14
+ * `properties` map included, so a property named `required` never reaches the model and fails
15
+ * validation identically on every retry. A schema like that is refused before the first request.
16
+ */
17
+
18
+ const field = (name: string) => ({
19
+ title: 'shelf',
20
+ type: 'object',
21
+ properties: { label: { type: 'string' }, [name]: { type: 'boolean' } },
22
+ required: ['label', name],
23
+ additionalProperties: false,
24
+ })
25
+
26
+ describe('@owlmeans/llm — property names a provider does not show', () => {
27
+ test('a property named like a keyword is found, with its JSON pointer, at any depth', () => {
28
+ expect(hiddenPropertyNames(field('required'), OPENAI_HIDDEN_PROPERTY_NAMES))
29
+ .toEqual(['#/properties/required: a property named "required" is not shown to the model'])
30
+ const nested = {
31
+ type: 'object',
32
+ properties: {
33
+ tools: { type: 'array', items: { type: 'object', properties: { default: { type: 'string' } } } },
34
+ spare: { anyOf: [{ type: 'object', properties: { format: { type: 'string' } } }, { type: 'null' }] },
35
+ },
36
+ $defs: { bin: { type: 'object', properties: { pattern: { type: 'string' } } } },
37
+ }
38
+ expect(hiddenPropertyNames(nested, OPENAI_HIDDEN_PROPERTY_NAMES).map(line => line.split(':')[0])).toEqual([
39
+ '#/properties/tools/items/properties/default',
40
+ '#/properties/spare/anyOf/0/properties/format',
41
+ '#/$defs/bin/properties/pattern',
42
+ ])
43
+ })
44
+
45
+ test('the same schema with another name, and keywords in keyword position, pass', () => {
46
+ expect(hiddenPropertyNames(field('mandatory'), OPENAI_HIDDEN_PROPERTY_NAMES)).toEqual([])
47
+ for (const shown of ['type', 'properties', 'items', 'enum', 'const', 'description', 'title', 'nullable', 'anyOf', 'oneOf']) {
48
+ expect([shown, hiddenPropertyNames(field(shown), OPENAI_HIDDEN_PROPERTY_NAMES)]).toEqual([shown, []])
49
+ }
50
+ })
51
+
52
+ test('only the OpenAI json_schema path declares the defect', () => {
53
+ expect(openAiPlugin.schemaDefects?.({ model: 'gpt-6-sol' }, field('required'))).toHaveLength(1)
54
+ // Function calling keeps every property name.
55
+ expect(openAiPlugin.schemaDefects?.({ model: 'gpt-6-sol', structuredOutput: false }, field('required'))).toEqual([])
56
+ expect(anthropicPlugin.schemaDefects).toBeUndefined()
57
+ })
58
+
59
+ test('a misconfiguration is fatal to every retry loop', () => {
60
+ const error = new LlmMissconfiguredError('x')
61
+ expect(isFatalError(error)).toBe(error)
62
+ })
63
+ })
64
+
65
+ describe('@owlmeans/llm — a hidden property fails the call before any request', () => {
66
+ let seq = 0
67
+ interface Shelf { label: string }
68
+ const spectator = { log: async () => undefined } as unknown as LlmSpectator
69
+
70
+ /** A stand-in for the provider boundary, resolved through a copy of a real plugin. */
71
+ const scripted = (base: LlmPlugin, model: string, reply: string, extra: Record<string, unknown> = {}) => {
72
+ const calls: unknown[] = []
73
+ const provider = `spec-schema-${seq++}`
74
+ const answer = async (msgs: unknown) => {
75
+ calls.push(msgs)
76
+ return (async function* () { yield new AIMessageChunk({ content: reply }) })()
77
+ }
78
+ const fake = {
79
+ getName: () => 'fake',
80
+ lc_kwargs: { model },
81
+ metadata: { config: { alias: 'spec', provider, model, ...extra } },
82
+ stream: answer,
83
+ bindTools: () => ({ stream: answer }),
84
+ } as unknown as BaseChatModel
85
+ registerLlmPlugin({
86
+ ...base, type: provider, family: provider, owns: candidate => candidate === fake,
87
+ refine: ({ base: same }) => same, patchCache: undefined, patchSystem: undefined, isFatal: undefined,
88
+ })
89
+
90
+ return { fake, calls }
91
+ }
92
+
93
+ const quiet = async <T>(run: () => Promise<T>): Promise<T> => {
94
+ const error = console.error
95
+ console.error = () => {}
96
+ try {
97
+ return await run()
98
+ } finally {
99
+ console.error = error
100
+ }
101
+ }
102
+
103
+ test('OpenAI json_schema: `properties.required` is refused with the pointer, on attempt 0, fatally', async () => {
104
+ const { fake, calls } = scripted(openAiPlugin, 'gpt-6-sol', '{"label":"a","required":true}')
105
+ const llm = makeLlmModel({ model: fake, retries: 8 }, spectator)
106
+
107
+ const failure = await quiet(() => llm.invoke('Label the shelf.', field('required') as unknown as JSONSchemaType<Shelf>, { action: 'spec' })
108
+ .catch((error: unknown) => error))
109
+
110
+ expect(failure).toBeInstanceOf(LlmMissconfiguredError)
111
+ expect(String((failure as Error).message)).toContain('#/properties/required')
112
+ expect(calls).toHaveLength(0)
113
+ })
114
+
115
+ test('the same schema with `mandatory` is asked and answered', async () => {
116
+ const { fake, calls } = scripted(openAiPlugin, 'gpt-6-sol', '{"label":"top","mandatory":true}')
117
+ const llm = makeLlmModel({ model: fake, retries: 2 }, spectator)
118
+
119
+ expect(await llm.invoke('Label the shelf.', field('mandatory') as unknown as JSONSchemaType<Shelf>, { action: 'spec' }))
120
+ .toEqual({ label: 'top', mandatory: true })
121
+ expect(calls).toHaveLength(1)
122
+ })
123
+
124
+ test('request() refuses the same way; a tool-calling rung is not refused', async () => {
125
+ const openAi = scripted(openAiPlugin, 'gpt-6-sol', '{}')
126
+ const failure = await quiet(() => makeLlmModel({ model: openAi.fake, retries: 8 }, spectator)
127
+ .request('Label the shelf.', field('required') as unknown as JSONSchemaType<Shelf>, { action: 'spec' })
128
+ .catch((error: unknown) => error))
129
+ expect(failure).toBeInstanceOf(LlmMissconfiguredError)
130
+ expect(openAi.calls).toHaveLength(0)
131
+
132
+ const viaTools = scripted(openAiPlugin, 'gpt-6-sol', '{"label":"low","required":false}', { structuredOutput: false })
133
+ expect(await makeLlmModel({ model: viaTools.fake, retries: 2 }, spectator)
134
+ .invoke('Label the shelf.', field('required') as unknown as JSONSchemaType<Shelf>, { action: 'spec' }))
135
+ .toEqual({ label: 'low', required: false })
136
+ })
137
+ })