@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 +2 -2
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/llm/SKILL.md +35 -3
- package/build/helpers/retry.d.ts.map +1 -1
- package/build/helpers/retry.js +3 -2
- package/build/helpers/retry.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/model.d.ts.map +1 -1
- package/build/model.js +14 -1
- package/build/model.js.map +1 -1
- package/build/plugins/openai.d.ts +11 -0
- package/build/plugins/openai.d.ts.map +1 -1
- package/build/plugins/openai.js +26 -5
- package/build/plugins/openai.js.map +1 -1
- package/build/plugins/types.d.ts +7 -0
- package/build/plugins/types.d.ts.map +1 -1
- package/build/utils/schema.d.ts +6 -0
- package/build/utils/schema.d.ts.map +1 -1
- package/build/utils/schema.js +44 -0
- package/build/utils/schema.js.map +1 -1
- package/package.json +1 -1
- package/src/helpers/retry.ts +3 -2
- package/src/index.ts +2 -2
- package/src/model.ts +15 -1
- package/src/plugins/openai.ts +46 -8
- package/src/plugins/types.ts +8 -0
- package/src/utils/schema.ts +46 -0
- package/tests/execution.spec.ts +3 -1
- package/tests/plugins.spec.ts +25 -1
- package/tests/structured-schema.spec.ts +137 -0
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.
|
|
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.
|
|
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
|
package/agent-meta/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@owlmeans/llm",
|
|
4
|
-
"version": "0.1.18-rc.
|
|
5
|
-
"generatedAt": "2026-09-
|
|
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.
|
|
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
|
|
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;
|
|
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"}
|
package/build/helpers/retry.js
CHANGED
|
@@ -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
|
-
|
|
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;
|
|
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
|
package/build/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
package/build/index.js.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/build/model.d.ts.map
CHANGED
|
@@ -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,
|
|
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);
|
package/build/model.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/build/plugins/openai.js
CHANGED
|
@@ -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
|
-
...(
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/plugins/openai.ts"],"names":[],"mappings":"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"}
|
package/build/plugins/types.d.ts
CHANGED
|
@@ -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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"}
|
package/build/utils/schema.d.ts
CHANGED
|
@@ -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"}
|
package/build/utils/schema.js
CHANGED
|
@@ -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
package/src/helpers/retry.ts
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
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)
|
package/src/plugins/openai.ts
CHANGED
|
@@ -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
|
|
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
|
-
...(
|
|
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
|
}
|
package/src/plugins/types.ts
CHANGED
|
@@ -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
|
|
package/src/utils/schema.ts
CHANGED
|
@@ -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
|
+
}
|
package/tests/execution.spec.ts
CHANGED
|
@@ -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
|
|
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')
|
package/tests/plugins.spec.ts
CHANGED
|
@@ -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).
|
|
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
|
+
})
|