@owlmeans/llm 0.1.17 → 0.1.18-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -140,6 +140,7 @@ spectator entry), `filter` (reject a result and force a retry), `useCache` / `ca
140
140
  | A weak cheap model keeps failing | Escalates to `ModelConfig.fallback` after `FALLBACK_AFTER_ATTEMPTS`, within one plugin family |
141
141
  | Model stringifies arrays / over-wraps scalars | `coerceToSchema` reconciles the answer with the schema before validation |
142
142
  | Model ignores the tool and answers in prose | `parseJsonContent` salvages JSON from fences and surrounding text |
143
+ | A blank message poisons the request (Anthropic 400 `text content blocks must contain non-whitespace text`, typically an empty file read pasted into a prompt) | Whitespace-only text blocks are dropped before every call; blank tool results are stubbed to keep their `tool_use` pairing, and an all-blank input becomes one stub user message |
143
144
  | Nothing usable came back | `NullCapture` — request, response, token accounting and finish reason, to the spectator |
144
145
  | An error no retry can fix | `registerFatalError` / `LlmPlugin.isFatal` abort the loop immediately |
145
146
 
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "@owlmeans/llm",
4
- "version": "0.1.17",
5
- "generatedAt": "2026-08-15T13:01:19.932Z",
4
+ "version": "0.1.18-rc.0",
5
+ "generatedAt": "2026-08-16T22:20:50.505Z",
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.17"` in `dependencies` (plus the `@langchain/*` peers)
11
+ **Install:** `"@owlmeans/llm": "^0.1.18-rc.0"` in `dependencies` (plus the `@langchain/*` peers)
12
12
 
13
13
  The inference runtime. Everything provider-specific is a **plugin**; the model itself only
14
14
  owns the provider-independent parts (streaming discipline, retries, validation,
@@ -102,18 +102,32 @@ inherited method signatures**, which would be a contravariance error.
102
102
  `snapshot` excludes `state` itself; without that, every `derive`/`escalate`/`withPurpose`
103
103
  on a task would nest another copy of the previous state.
104
104
 
105
- ## Never `instanceof` an error from a provider SDK
105
+ ## Classify a provider error by walking `cause`, never by `instanceof` or a surface read
106
106
 
107
- `@langchain/anthropic` and `@langchain/openai` bundle their OWN nested copies of the
108
- provider SDKs, so an error they throw is an instance of a DIFFERENT class than the one this
109
- package imports — `e instanceof BadRequestError` silently returns `false`. `isFatal` used
110
- that check, so every fatal `400` was classified retryable and burned all eight attempts,
111
- turning one malformed request into minutes of thrash with the real message buried under the
112
- retries.
107
+ Two independent layers hide the wire shape of a provider failure, and each one alone is
108
+ enough to make a fatal error look retryable — which costs all eight attempts with the real
109
+ message buried under the repeats.
113
110
 
114
- Match on the wire shape instead — `(e as { status?: unknown })?.status === 400`. The same
115
- trap applies to any cross-copy `instanceof`; it is the runtime face of the peer-dependency
116
- identity rule below.
111
+ 1. **Nested SDK copies.** `@langchain/anthropic` and `@langchain/openai` bundle their OWN
112
+ copies of the provider SDKs, so an error they throw is an instance of a DIFFERENT class
113
+ than the one this package imports — `e instanceof BadRequestError` silently returns
114
+ `false`.
115
+ 2. **Langchain's own error wrappers.** A failure is re-wrapped in a typed langchain error
116
+ (`ContextOverflowError` for an input past the context window, and its siblings) that
117
+ carries the original **only under `cause`** and has no `status` of its own — so
118
+ `e.status === 400` misses it too.
119
+
120
+ Use `isBadRequest` from `plugins/utils.ts`: it walks the `cause` chain looking for
121
+ `status === 400`, bounded in depth so a self-referential chain terminates. Both built-in
122
+ `isFatal` implementations go through it.
123
+
124
+ A context overflow is the case that makes this urgent rather than merely untidy: `refine`
125
+ escalates the **output** budget on each retry, so an over-limit **input** can never improve —
126
+ every attempt re-sends the identical oversized request. Consumers hold their locks for the
127
+ whole loop, so a single unfixable call becomes minutes of thrash on the caller's side.
128
+
129
+ The same trap applies to any cross-copy `instanceof`; it is the runtime face of the
130
+ peer-dependency identity rule below.
117
131
 
118
132
  ## Peer-dependency rule (langchain identity)
119
133
 
@@ -152,7 +166,10 @@ see the `instanceof` trap above.
152
166
 
153
167
  Idle stream deadline · duplicate-final-chunk dedup · output-budget escalation · reasoning-cap
154
168
  shrink · same-family fallback model · schema coercion · JSON salvage from prose · `NullCapture`
155
- diagnostics · fatal-error short-circuit. Details: package `README.md`.
169
+ diagnostics · fatal-error short-circuit · blank-content sanitization (whitespace-only text
170
+ blocks are dropped before every call — a blank block, e.g. an empty file read pasted into a
171
+ prompt, is otherwise a fatal Anthropic 400; blank tool results are stubbed to keep their
172
+ `tool_use` pairing). Details: package `README.md`.
156
173
 
157
174
  ## Tests
158
175
 
package/build/consts.d.ts CHANGED
@@ -80,6 +80,13 @@ export declare const JSON_INSTRUCTION: string;
80
80
  export declare const NO_THINK_DIRECTIVE = "/no_think";
81
81
  /** Tool name used for structured output when a schema carries no usable title/name. */
82
82
  export declare const DEFAULT_TOOL_NAME = "extract";
83
+ /**
84
+ * Placeholder content for a message that must survive blank-content sanitization —
85
+ * a tool result whose `tool_use` pairing may not be broken, or an input whose every
86
+ * message was blank. Providers reject whitespace-only text outright, so the stub is
87
+ * the smallest honest signal that the caller supplied nothing.
88
+ */
89
+ export declare const EMPTY_CONTENT_STUB = "(empty)";
83
90
  /** Default effort tier when a policy does not specify one. */
84
91
  export declare const DEFAULT_EFFORT = ExecutionEffort.Standard;
85
92
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEtE,mFAAmF;AACnF,eAAO,MAAM,WAAW,yBAAyB,CAAA;AAEjD,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,mCAAmC,CAAA;AAEjE,0FAA0F;AAC1F,eAAO,MAAM,cAAc,gCAAgC,CAAA;AAE3D,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB,IAAI,CAAA;AAEtC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,QAAgB,CAAA;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAAY,CAAA;AAE/C,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,IAAI,CAAA;AAEtC;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAA;AAEvC,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,EAAE,QAAe,CAAA;AAE/C;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAA;AAExC;;;;GAIG;AACH,eAAO,MAAM,eAAe,IAAI,CAAA;AAEhC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAGkD,CAAA;AAE/E;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,cAAc,CAAA;AAE7C,uFAAuF;AACvF,eAAO,MAAM,iBAAiB,YAAY,CAAA;AAE1C,8DAA8D;AAC9D,eAAO,MAAM,cAAc,2BAA2B,CAAA;AAEtD;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAKlE,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAErC,CAAA"}
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEtE,mFAAmF;AACnF,eAAO,MAAM,WAAW,yBAAyB,CAAA;AAEjD,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,mCAAmC,CAAA;AAEjE,0FAA0F;AAC1F,eAAO,MAAM,cAAc,gCAAgC,CAAA;AAE3D,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB,IAAI,CAAA;AAEtC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,QAAgB,CAAA;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAAY,CAAA;AAE/C,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,IAAI,CAAA;AAEtC;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAA;AAEvC,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,EAAE,QAAe,CAAA;AAE/C;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAA;AAExC;;;;GAIG;AACH,eAAO,MAAM,eAAe,IAAI,CAAA;AAEhC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAGkD,CAAA;AAE/E;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,cAAc,CAAA;AAE7C,uFAAuF;AACvF,eAAO,MAAM,iBAAiB,YAAY,CAAA;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,YAAY,CAAA;AAE3C,8DAA8D;AAC9D,eAAO,MAAM,cAAc,2BAA2B,CAAA;AAEtD;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAKlE,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAErC,CAAA"}
package/build/consts.js CHANGED
@@ -82,6 +82,13 @@ export const JSON_INSTRUCTION = 'Respond with a single complete and valid JSON o
82
82
  export const NO_THINK_DIRECTIVE = '/no_think';
83
83
  /** Tool name used for structured output when a schema carries no usable title/name. */
84
84
  export const DEFAULT_TOOL_NAME = 'extract';
85
+ /**
86
+ * Placeholder content for a message that must survive blank-content sanitization —
87
+ * a tool result whose `tool_use` pairing may not be broken, or an input whose every
88
+ * message was blank. Providers reject whitespace-only text outright, so the stub is
89
+ * the smallest honest signal that the caller supplied nothing.
90
+ */
91
+ export const EMPTY_CONTENT_STUB = '(empty)';
85
92
  /** Default effort tier when a policy does not specify one. */
86
93
  export const DEFAULT_EFFORT = ExecutionEffort.Standard;
87
94
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAGtD,mFAAmF;AACnF,MAAM,CAAC,MAAM,WAAW,GAAG,sBAAsB,CAAA;AAEjD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,gCAAgC,CAAA;AAEjE,0FAA0F;AAC1F,MAAM,CAAC,MAAM,cAAc,GAAG,6BAA6B,CAAA;AAE3D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAEtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAA;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAG,KAAK,CAAA;AAE/C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAEtC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAA;AAEvC,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAa,IAAI,CAAA;AAE/C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAA;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAA;AAEhC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,6DAA6D;MACzF,gHAAgH;MAChH,iGAAiG;MACjG,2EAA2E,CAAA;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAA;AAE7C,uFAAuF;AACvF,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAA;AAE1C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAA;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAA8C;IACrE,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;IAClD,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE;IAC9B,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;IACjE,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;CACjE,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAa;IACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS;CACrF,CAAA"}
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAGtD,mFAAmF;AACnF,MAAM,CAAC,MAAM,WAAW,GAAG,sBAAsB,CAAA;AAEjD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,gCAAgC,CAAA;AAEjE,0FAA0F;AAC1F,MAAM,CAAC,MAAM,cAAc,GAAG,6BAA6B,CAAA;AAE3D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAEtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAA;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAG,KAAK,CAAA;AAE/C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAEtC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAA;AAEvC,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAa,IAAI,CAAA;AAE/C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAA;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAA;AAEhC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,6DAA6D;MACzF,gHAAgH;MAChH,iGAAiG;MACjG,2EAA2E,CAAA;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAA;AAE7C,uFAAuF;AACvF,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAA;AAE1C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAE3C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAA;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAA8C;IACrE,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;IAClD,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE;IAC9B,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;IACjE,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;CACjE,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAa;IACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS;CACrF,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;AA8CnB;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,oFAStB,eAAe,aAAa,YAAY,KAAG,QAuY7C,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;AA8CnB;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,oFAStB,eAAe,aAAa,YAAY,KAAG,QAwY7C,CAAA"}
package/build/model.js CHANGED
@@ -10,7 +10,7 @@ import { withRetry } from './helpers/retry.js';
10
10
  import { spectate } from './helpers/spectate.js';
11
11
  import { idleTimeout, readConfig } from './utils/config.js';
12
12
  import { reportNull } from './utils/null-report.js';
13
- import { applyNoThink, ensureJsonMention, stripCacheMarkers } from './utils/prompt.js';
13
+ import { applyNoThink, dropBlankContent, ensureJsonMention, stripCacheMarkers } from './utils/prompt.js';
14
14
  import { resolveSchemaValidator, toToolName, unwrapNamed } from './utils/schema.js';
15
15
  import { streamWithDeadline } from './utils/stream.js';
16
16
  const isSystem = (msg) => msg instanceof BaseMessage ? msg.getType() === 'system' : `${msg.role}` === 'system';
@@ -82,6 +82,7 @@ export const makeLlmModel = ({ model, outputErrors = false, captureNull = false,
82
82
  // markers live on its own objects. The budget is per request, so clear them and
83
83
  // re-place our own below; otherwise they accumulate until the provider 400s.
84
84
  stripCacheMarkers(msgs);
85
+ dropBlankContent(msgs);
85
86
  let reserved = 0;
86
87
  if (prompts != null) {
87
88
  const carried = takeLeadingSystem(msgs);
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/plugins/anthropic.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAQ3C,eAAO,MAAM,gBAAgB,cAAc,CAAA;AA4D3C,eAAO,MAAM,eAAe,EAAE,SAiK7B,CAAA"}
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/plugins/anthropic.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAQ3C,eAAO,MAAM,gBAAgB,cAAc,CAAA;AA4D3C,eAAO,MAAM,eAAe,EAAE,SAkK7B,CAAA"}
@@ -3,7 +3,7 @@ import { BadRequestError } from '@anthropic-ai/sdk';
3
3
  import { ModelProvider, PromptBlock, StructuredMode } from '@owlmeans/llm-common';
4
4
  import { CHARS_PER_TOKEN, MAX_CACHE_BREAKPOINTS, MIN_CACHEABLE_TOKENS } from '../consts.js';
5
5
  import { readConfig } from '../utils/config.js';
6
- import { escalateMaxTokens, makeClientOptions } from './utils.js';
6
+ import { escalateMaxTokens, isBadRequest, makeClientOptions } from './utils.js';
7
7
  /** Model-name prefix that supports prompt caching through `cache_control` markers. */
8
8
  const CACHEABLE_PREFIX = 'claude-';
9
9
  export const ANTHROPIC_FAMILY = 'anthropic';
@@ -185,17 +185,18 @@ export const anthropicPlugin = {
185
185
  },
186
186
  /**
187
187
  * A malformed request (bad schema, unsupported parameter, oversized `max_tokens`, too
188
- * many cache breakpoints) cannot be fixed by retrying — surface it immediately instead
189
- * of burning the budget.
188
+ * many cache breakpoints, an input past the context window) cannot be fixed by retrying —
189
+ * surface it immediately instead of burning the budget.
190
190
  *
191
- * The `status` check is not redundant with the `instanceof`: `@langchain/anthropic`
192
- * carries its OWN nested copy of `@anthropic-ai/sdk`, so the error it throws is an
193
- * instance of a DIFFERENT `BadRequestError` class than the one imported here and the
194
- * `instanceof` silently fails. That turned every fatal 400 into eight full retries —
195
- * a single malformed request became minutes of thrash with the real cause buried.
191
+ * The `isBadRequest` walk is not redundant with the `instanceof`, and neither is a plain
192
+ * `e.status === 400`. `@langchain/anthropic` carries its OWN nested copy of
193
+ * `@anthropic-ai/sdk`, so the error it throws is an instance of a DIFFERENT
194
+ * `BadRequestError` class than the one imported here; and langchain additionally re-wraps
195
+ * the failure in its own typed error (`ContextOverflowError` for an oversized prompt),
196
+ * which holds the 400 only under `cause`. Each layer alone turned a fatal 400 into eight
197
+ * full retries — a single unfixable request became minutes of thrash with the real cause
198
+ * buried under the repeats.
196
199
  */
197
- isFatal: e => e instanceof BadRequestError || e?.status === 400
198
- ? e
199
- : null,
200
+ isFatal: e => e instanceof BadRequestError || isBadRequest(e) ? e : null,
200
201
  };
201
202
  //# sourceMappingURL=anthropic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/plugins/anthropic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/plugins/anthropic.ts"],"names":[],"mappings":"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"}
@@ -19,11 +19,13 @@ export declare const openAiFamily: {
19
19
  responseFormat: (toolName: string, schema: unknown) => Record<string, unknown>;
20
20
  /**
21
21
  * A 400 means the request itself is malformed — a schema the endpoint rejects, an
22
- * unsupported parameter, a `max_tokens` above the model's per-request limit. Retrying
23
- * re-sends the same shape (and the escalator raises `max_tokens`, making the last case
24
- * strictly worse), so eight attempts only bury the real message. Matched on `status`
25
- * rather than an SDK class: aggregators and nested SDK copies throw their own error
26
- * types, and an `instanceof` against one of them silently never matches.
22
+ * unsupported parameter, a `max_tokens` above the model's per-request limit, an input
23
+ * past the context window. Retrying re-sends the same shape (and the escalator raises
24
+ * `max_tokens`, making some of those strictly worse), so eight attempts only bury the
25
+ * real message. Matched through `isBadRequest` rather than an SDK class: aggregators and
26
+ * nested SDK copies throw their own error types, and langchain re-wraps the failure in a
27
+ * typed error that keeps the 400 only under `cause` — so both an `instanceof` and a
28
+ * surface `status` read silently miss it.
27
29
  */
28
30
  isFatal: (e: unknown) => Error | null;
29
31
  refine: ({ base, attempt, temperature, maxOutputCap }: LlmRefineParams) => BaseChatModel;
@@ -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,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAO5D,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;;;;;;;OAOG;iBACU,OAAO,KAAG,KAAK,GAAG,IAAI;2DAGoB,eAAe,KAAG,aAAa;CA2BvF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SAoD1B,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,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAO5D,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;2DAEoB,eAAe,KAAG,aAAa;CA2BvF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SAoD1B,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { ChatOpenAI } from '@langchain/openai';
2
2
  import { ModelProvider, StructuredMode } from '@owlmeans/llm-common';
3
- import { escalateMaxTokens, makeConfiguration } from './utils.js';
3
+ import { escalateMaxTokens, isBadRequest, makeConfiguration } from './utils.js';
4
4
  /** Model families served through OpenAI's Responses API rather than chat completions. */
5
5
  const RESPONSES_API_PREFIXES = ['gpt-5', 'codex-'];
6
6
  export const OPENAI_FAMILY = 'openai';
@@ -25,13 +25,15 @@ export const openAiFamily = {
25
25
  }),
26
26
  /**
27
27
  * A 400 means the request itself is malformed — a schema the endpoint rejects, an
28
- * unsupported parameter, a `max_tokens` above the model's per-request limit. Retrying
29
- * re-sends the same shape (and the escalator raises `max_tokens`, making the last case
30
- * strictly worse), so eight attempts only bury the real message. Matched on `status`
31
- * rather than an SDK class: aggregators and nested SDK copies throw their own error
32
- * types, and an `instanceof` against one of them silently never matches.
28
+ * unsupported parameter, a `max_tokens` above the model's per-request limit, an input
29
+ * past the context window. Retrying re-sends the same shape (and the escalator raises
30
+ * `max_tokens`, making some of those strictly worse), so eight attempts only bury the
31
+ * real message. Matched through `isBadRequest` rather than an SDK class: aggregators and
32
+ * nested SDK copies throw their own error types, and langchain re-wraps the failure in a
33
+ * typed error that keeps the 400 only under `cause` — so both an `instanceof` and a
34
+ * surface `status` read silently miss it.
33
35
  */
34
- isFatal: (e) => e?.status === 400 ? e : null,
36
+ isFatal: (e) => isBadRequest(e) ? e : null,
35
37
  refine: ({ base, attempt, temperature, maxOutputCap }) => {
36
38
  const model = base;
37
39
  const currentTemperature = temperature ?? model.temperature ?? 0;
@@ -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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"}
@@ -24,4 +24,21 @@ export declare const makeClientOptions: ({ headers }: {
24
24
  * the model's hard ceiling.
25
25
  */
26
26
  export declare const escalateMaxTokens: (base: number | undefined, attempt: number, cap: number) => number;
27
+ /**
28
+ * Whether the error is — or wraps — an HTTP 400 from a provider.
29
+ *
30
+ * A 400 means the request itself is malformed: a schema the endpoint rejects, an
31
+ * unsupported parameter, a `max_tokens` above the per-request limit, or an input past the
32
+ * context window. Retrying re-sends the same shape and the retry escalator only raises the
33
+ * OUTPUT budget, so none of those can improve with another attempt.
34
+ *
35
+ * The check walks the `cause` chain and never uses `instanceof`. Two independent reasons:
36
+ * `@langchain/anthropic` and `@langchain/openai` bundle their own nested copies of the
37
+ * provider SDKs, so their errors are instances of a DIFFERENT class than the one this
38
+ * package imports; and langchain re-wraps provider failures in its own typed errors
39
+ * (`ContextOverflowError` and friends) that carry the original only as `cause`, with no
40
+ * `status` of their own. Either one silently defeats a surface-level check — an oversized
41
+ * prompt then burns all eight attempts on a request that cannot succeed.
42
+ */
43
+ export declare const isBadRequest: (e: unknown) => boolean;
27
44
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/plugins/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,yBACN;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAAE,KACjG;IAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAUnE,CAAA;AAED,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,gBACf;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAAE,KAC3D;IAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAGnE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,SAAU,MAAM,GAAG,SAAS,WAAW,MAAM,OAAO,MAAM,KAAG,MACrC,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/plugins/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,yBACN;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAAE,KACjG;IAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAUnE,CAAA;AAED,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,gBACf;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAAE,KAC3D;IAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAGnE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,SAAU,MAAM,GAAG,SAAS,WAAW,MAAM,OAAO,MAAM,KAAG,MACrC,CAAA;AAKtD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,YAAY,MAAO,OAAO,KAAG,OASzC,CAAA"}
@@ -30,4 +30,34 @@ export const makeClientOptions = ({ headers }) => {
30
30
  * the model's hard ceiling.
31
31
  */
32
32
  export const escalateMaxTokens = (base, attempt, cap) => Math.min((base ?? 2048) * Math.pow(2, attempt), cap);
33
+ /** How deep to follow `cause` before giving up — guards a self-referential chain. */
34
+ const MAX_CAUSE_DEPTH = 8;
35
+ /**
36
+ * Whether the error is — or wraps — an HTTP 400 from a provider.
37
+ *
38
+ * A 400 means the request itself is malformed: a schema the endpoint rejects, an
39
+ * unsupported parameter, a `max_tokens` above the per-request limit, or an input past the
40
+ * context window. Retrying re-sends the same shape and the retry escalator only raises the
41
+ * OUTPUT budget, so none of those can improve with another attempt.
42
+ *
43
+ * The check walks the `cause` chain and never uses `instanceof`. Two independent reasons:
44
+ * `@langchain/anthropic` and `@langchain/openai` bundle their own nested copies of the
45
+ * provider SDKs, so their errors are instances of a DIFFERENT class than the one this
46
+ * package imports; and langchain re-wraps provider failures in its own typed errors
47
+ * (`ContextOverflowError` and friends) that carry the original only as `cause`, with no
48
+ * `status` of their own. Either one silently defeats a surface-level check — an oversized
49
+ * prompt then burns all eight attempts on a request that cannot succeed.
50
+ */
51
+ export const isBadRequest = (e) => {
52
+ let current = e;
53
+ for (let depth = 0; current != null && depth < MAX_CAUSE_DEPTH; ++depth) {
54
+ if (current.status === 400)
55
+ return true;
56
+ const cause = current.cause;
57
+ if (cause === current)
58
+ return false;
59
+ current = cause;
60
+ }
61
+ return false;
62
+ };
33
63
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/plugins/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,EAAE,OAAO,EAAE,OAAO,EAAgF,EAC9B,EAAE;IACtE,MAAM,UAAU,GAAG,OAAO,IAAI,IAAI,CAAA;IAClC,MAAM,UAAU,GAAG,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IACrE,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAA;IACzC,OAAO;QACL,aAAa,EAAE;YACb,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD;KACF,CAAA;AACH,CAAC,CAAA;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,EAAE,OAAO,EAAmD,EACQ,EAAE;IACtE,IAAI,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACnE,OAAO,EAAE,aAAa,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,CAAA;AACvD,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAwB,EAAE,OAAe,EAAE,GAAW,EAAU,EAAE,CAClG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/plugins/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,EAAE,OAAO,EAAE,OAAO,EAAgF,EAC9B,EAAE;IACtE,MAAM,UAAU,GAAG,OAAO,IAAI,IAAI,CAAA;IAClC,MAAM,UAAU,GAAG,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IACrE,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAA;IACzC,OAAO;QACL,aAAa,EAAE;YACb,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD;KACF,CAAA;AACH,CAAC,CAAA;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,EAAE,OAAO,EAAmD,EACQ,EAAE;IACtE,IAAI,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACnE,OAAO,EAAE,aAAa,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,CAAA;AACvD,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAwB,EAAE,OAAe,EAAE,GAAW,EAAU,EAAE,CAClG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;AAEtD,qFAAqF;AACrF,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAU,EAAW,EAAE;IAClD,IAAI,OAAO,GAAY,CAAC,CAAA;IACxB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,IAAI,KAAK,GAAG,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC;QACxE,IAAK,OAAgC,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QACjE,MAAM,KAAK,GAAI,OAA+B,CAAC,KAAK,CAAA;QACpD,IAAI,KAAK,KAAK,OAAO;YAAE,OAAO,KAAK,CAAA;QACnC,OAAO,GAAG,KAAK,CAAA;IACjB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -13,6 +13,19 @@ import type { MessageFieldWithRole } from '@langchain/core/messages';
13
13
  * makes the per-request count a function of THIS call alone.
14
14
  */
15
15
  export declare const stripCacheMarkers: (msgs: MessageFieldWithRole[]) => void;
16
+ /**
17
+ * Remove whitespace-only text content so no request carries a blank text block.
18
+ *
19
+ * Anthropic rejects one outright (`400 messages: text content blocks must contain
20
+ * non-whitespace text`), and a 400 is fatal — a single blank block, typically a file
21
+ * read that returned nothing, kills the whole call with no retry. Blank text blocks
22
+ * are dropped from block arrays; a message left without content is removed, with two
23
+ * exceptions: a tool result keeps its `tool_use` pairing by carrying a stub instead,
24
+ * and an AI message that still holds tool calls keeps an empty string, which
25
+ * serializes without a text block. An input that loses every message gets one stub
26
+ * user message so the request stays valid.
27
+ */
28
+ export declare const dropBlankContent: (msgs: MessageFieldWithRole[]) => void;
16
29
  /**
17
30
  * Ensure the word "json" appears somewhere in the prompt. Several providers refuse or
18
31
  * silently ignore a JSON mode unless it does; when it is missing the JSON instruction is
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAyBpE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,SAAU,oBAAoB,EAAE,KAAG,IAkBhE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,SAAU,oBAAoB,EAAE,KAAG,IAGhE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,SAAU,oBAAoB,EAAE,mBAAmB,OAAO,GAAG,SAAS,KAAG,IAIjG,CAAA"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAyBpE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,SAAU,oBAAoB,EAAE,KAAG,IAkBhE,CAAA;AAQD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,SAAU,oBAAoB,EAAE,KAAG,IA6B/D,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,SAAU,oBAAoB,EAAE,KAAG,IAGhE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,SAAU,oBAAoB,EAAE,mBAAmB,OAAO,GAAG,SAAS,KAAG,IAIjG,CAAA"}
@@ -1,4 +1,5 @@
1
- import { JSON_INSTRUCTION, NO_THINK_DIRECTIVE } from '../consts.js';
1
+ import { BaseMessage } from '@langchain/core/messages';
2
+ import { EMPTY_CONTENT_STUB, JSON_INSTRUCTION, NO_THINK_DIRECTIVE } from '../consts.js';
2
3
  const messageMentions = (msg, needle) => {
3
4
  if (typeof msg.content === 'string')
4
5
  return msg.content.toLowerCase().includes(needle);
@@ -51,6 +52,54 @@ export const stripCacheMarkers = (msgs) => {
51
52
  }
52
53
  }
53
54
  };
55
+ const isBlankTextBlock = (part) => typeof part === 'object' && part !== null
56
+ && part.type === 'text'
57
+ && typeof part.text === 'string'
58
+ && part.text.trim() === '';
59
+ /**
60
+ * Remove whitespace-only text content so no request carries a blank text block.
61
+ *
62
+ * Anthropic rejects one outright (`400 messages: text content blocks must contain
63
+ * non-whitespace text`), and a 400 is fatal — a single blank block, typically a file
64
+ * read that returned nothing, kills the whole call with no retry. Blank text blocks
65
+ * are dropped from block arrays; a message left without content is removed, with two
66
+ * exceptions: a tool result keeps its `tool_use` pairing by carrying a stub instead,
67
+ * and an AI message that still holds tool calls keeps an empty string, which
68
+ * serializes without a text block. An input that loses every message gets one stub
69
+ * user message so the request stays valid.
70
+ */
71
+ export const dropBlankContent = (msgs) => {
72
+ for (let i = msgs.length - 1; i >= 0; i--) {
73
+ const msg = msgs[i];
74
+ let content = msg.content;
75
+ if (Array.isArray(content)) {
76
+ const kept = content.filter(part => !isBlankTextBlock(part));
77
+ if (kept.length !== content.length) {
78
+ msg.content = kept;
79
+ }
80
+ if (kept.length > 0) {
81
+ continue;
82
+ }
83
+ content = '';
84
+ }
85
+ if (typeof content === 'string' && content.trim() === '') {
86
+ const role = msg instanceof BaseMessage ? msg.getType() : `${msg.role}`;
87
+ const toolCalls = msg.tool_calls;
88
+ if (role === 'tool') {
89
+ msg.content = EMPTY_CONTENT_STUB;
90
+ }
91
+ else if (toolCalls != null && toolCalls.length > 0) {
92
+ msg.content = '';
93
+ }
94
+ else {
95
+ msgs.splice(i, 1);
96
+ }
97
+ }
98
+ }
99
+ if (msgs.length === 0) {
100
+ msgs.push({ role: 'user', content: EMPTY_CONTENT_STUB });
101
+ }
102
+ };
54
103
  /**
55
104
  * Ensure the word "json" appears somewhere in the prompt. Several providers refuse or
56
105
  * silently ignore a JSON mode unless it does; when it is missing the JSON instruction is
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.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.17",
3
+ "version": "0.1.18-rc.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -47,7 +47,7 @@
47
47
  "@langchain/core": "^1.1.39",
48
48
  "@langchain/openai": "^1.4.4",
49
49
  "@owlmeans/dep-config": "workspace:*",
50
- "@owlmeans/test": "^0.1.17",
50
+ "@owlmeans/test": "^0.1.18-rc.0",
51
51
  "@types/bun": "^1.3.14",
52
52
  "@types/node": "^26.1.0",
53
53
  "nodemon": "^3.1.14",
@@ -55,10 +55,10 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "@anthropic-ai/sdk": "^0.78.0",
58
- "@owlmeans/basic-ids": "^0.1.17",
59
- "@owlmeans/context": "^0.1.17",
60
- "@owlmeans/error": "^0.1.17",
61
- "@owlmeans/llm-common": "^0.1.17",
58
+ "@owlmeans/basic-ids": "^0.1.18-rc.0",
59
+ "@owlmeans/context": "^0.1.18-rc.0",
60
+ "@owlmeans/error": "^0.1.18-rc.0",
61
+ "@owlmeans/llm-common": "^0.1.18-rc.0",
62
62
  "ajv": "^8.17.1"
63
63
  },
64
64
  "publishConfig": {
package/src/consts.ts CHANGED
@@ -99,6 +99,14 @@ export const NO_THINK_DIRECTIVE = '/no_think'
99
99
  /** Tool name used for structured output when a schema carries no usable title/name. */
100
100
  export const DEFAULT_TOOL_NAME = 'extract'
101
101
 
102
+ /**
103
+ * Placeholder content for a message that must survive blank-content sanitization —
104
+ * a tool result whose `tool_use` pairing may not be broken, or an input whose every
105
+ * message was blank. Providers reject whitespace-only text outright, so the stub is
106
+ * the smallest honest signal that the caller supplied nothing.
107
+ */
108
+ export const EMPTY_CONTENT_STUB = '(empty)'
109
+
102
110
  /** Default effort tier when a policy does not specify one. */
103
111
  export const DEFAULT_EFFORT = ExecutionEffort.Standard
104
112
 
package/src/model.ts CHANGED
@@ -18,7 +18,7 @@ import { spectate } from './helpers/spectate.js'
18
18
  import { idleTimeout, readConfig } from './utils/config.js'
19
19
  import { reportNull } from './utils/null-report.js'
20
20
  import type { NullReportParams } from './utils/null-report.js'
21
- import { applyNoThink, ensureJsonMention, stripCacheMarkers } from './utils/prompt.js'
21
+ import { applyNoThink, dropBlankContent, ensureJsonMention, stripCacheMarkers } from './utils/prompt.js'
22
22
  import { resolveSchemaValidator, toToolName, unwrapNamed } from './utils/schema.js'
23
23
  import { streamWithDeadline } from './utils/stream.js'
24
24
  import type {
@@ -121,6 +121,7 @@ export const makeLlmModel = ({
121
121
  // markers live on its own objects. The budget is per request, so clear them and
122
122
  // re-place our own below; otherwise they accumulate until the provider 400s.
123
123
  stripCacheMarkers(msgs)
124
+ dropBlankContent(msgs)
124
125
  let reserved = 0
125
126
 
126
127
  if (prompts != null) {
@@ -7,7 +7,7 @@ import type { CacheTtl } from '@owlmeans/llm-common'
7
7
  import type { LlmPlugin } from './types.js'
8
8
  import { CHARS_PER_TOKEN, MAX_CACHE_BREAKPOINTS, MIN_CACHEABLE_TOKENS } from '../consts.js'
9
9
  import { readConfig } from '../utils/config.js'
10
- import { escalateMaxTokens, makeClientOptions } from './utils.js'
10
+ import { escalateMaxTokens, isBadRequest, makeClientOptions } from './utils.js'
11
11
 
12
12
  /** Model-name prefix that supports prompt caching through `cache_control` markers. */
13
13
  const CACHEABLE_PREFIX = 'claude-'
@@ -221,16 +221,17 @@ export const anthropicPlugin: LlmPlugin = {
221
221
 
222
222
  /**
223
223
  * A malformed request (bad schema, unsupported parameter, oversized `max_tokens`, too
224
- * many cache breakpoints) cannot be fixed by retrying — surface it immediately instead
225
- * of burning the budget.
224
+ * many cache breakpoints, an input past the context window) cannot be fixed by retrying —
225
+ * surface it immediately instead of burning the budget.
226
226
  *
227
- * The `status` check is not redundant with the `instanceof`: `@langchain/anthropic`
228
- * carries its OWN nested copy of `@anthropic-ai/sdk`, so the error it throws is an
229
- * instance of a DIFFERENT `BadRequestError` class than the one imported here and the
230
- * `instanceof` silently fails. That turned every fatal 400 into eight full retries —
231
- * a single malformed request became minutes of thrash with the real cause buried.
227
+ * The `isBadRequest` walk is not redundant with the `instanceof`, and neither is a plain
228
+ * `e.status === 400`. `@langchain/anthropic` carries its OWN nested copy of
229
+ * `@anthropic-ai/sdk`, so the error it throws is an instance of a DIFFERENT
230
+ * `BadRequestError` class than the one imported here; and langchain additionally re-wraps
231
+ * the failure in its own typed error (`ContextOverflowError` for an oversized prompt),
232
+ * which holds the 400 only under `cause`. Each layer alone turned a fatal 400 into eight
233
+ * full retries — a single unfixable request became minutes of thrash with the real cause
234
+ * buried under the repeats.
232
235
  */
233
- isFatal: e => e instanceof BadRequestError || (e as { status?: unknown })?.status === 400
234
- ? e as Error
235
- : null,
236
+ isFatal: e => e instanceof BadRequestError || isBadRequest(e) ? e as Error : null,
236
237
  }
@@ -3,7 +3,7 @@ import type { BaseChatModel } from '@langchain/core/language_models/chat_models'
3
3
  import { ModelProvider, StructuredMode } from '@owlmeans/llm-common'
4
4
  import type { LlmPlugin, LlmRefineParams } from './types.js'
5
5
  import type { ModelConfig } from '../types.js'
6
- import { escalateMaxTokens, makeConfiguration } from './utils.js'
6
+ import { escalateMaxTokens, isBadRequest, makeConfiguration } from './utils.js'
7
7
 
8
8
  /** Model families served through OpenAI's Responses API rather than chat completions. */
9
9
  const RESPONSES_API_PREFIXES = ['gpt-5', 'codex-']
@@ -35,14 +35,15 @@ export const openAiFamily = {
35
35
 
36
36
  /**
37
37
  * A 400 means the request itself is malformed — a schema the endpoint rejects, an
38
- * unsupported parameter, a `max_tokens` above the model's per-request limit. Retrying
39
- * re-sends the same shape (and the escalator raises `max_tokens`, making the last case
40
- * strictly worse), so eight attempts only bury the real message. Matched on `status`
41
- * rather than an SDK class: aggregators and nested SDK copies throw their own error
42
- * types, and an `instanceof` against one of them silently never matches.
38
+ * unsupported parameter, a `max_tokens` above the model's per-request limit, an input
39
+ * past the context window. Retrying re-sends the same shape (and the escalator raises
40
+ * `max_tokens`, making some of those strictly worse), so eight attempts only bury the
41
+ * real message. Matched through `isBadRequest` rather than an SDK class: aggregators and
42
+ * nested SDK copies throw their own error types, and langchain re-wraps the failure in a
43
+ * typed error that keeps the 400 only under `cause` — so both an `instanceof` and a
44
+ * surface `status` read silently miss it.
43
45
  */
44
- isFatal: (e: unknown): Error | null =>
45
- (e as { status?: unknown })?.status === 400 ? e as Error : null,
46
+ isFatal: (e: unknown): Error | null => isBadRequest(e) ? e as Error : null,
46
47
 
47
48
  refine: ({ base, attempt, temperature, maxOutputCap }: LlmRefineParams): BaseChatModel => {
48
49
  const model = base as ChatOpenAI
@@ -36,3 +36,33 @@ export const makeClientOptions = (
36
36
  */
37
37
  export const escalateMaxTokens = (base: number | undefined, attempt: number, cap: number): number =>
38
38
  Math.min((base ?? 2048) * Math.pow(2, attempt), cap)
39
+
40
+ /** How deep to follow `cause` before giving up — guards a self-referential chain. */
41
+ const MAX_CAUSE_DEPTH = 8
42
+
43
+ /**
44
+ * Whether the error is — or wraps — an HTTP 400 from a provider.
45
+ *
46
+ * A 400 means the request itself is malformed: a schema the endpoint rejects, an
47
+ * unsupported parameter, a `max_tokens` above the per-request limit, or an input past the
48
+ * context window. Retrying re-sends the same shape and the retry escalator only raises the
49
+ * OUTPUT budget, so none of those can improve with another attempt.
50
+ *
51
+ * The check walks the `cause` chain and never uses `instanceof`. Two independent reasons:
52
+ * `@langchain/anthropic` and `@langchain/openai` bundle their own nested copies of the
53
+ * provider SDKs, so their errors are instances of a DIFFERENT class than the one this
54
+ * package imports; and langchain re-wraps provider failures in its own typed errors
55
+ * (`ContextOverflowError` and friends) that carry the original only as `cause`, with no
56
+ * `status` of their own. Either one silently defeats a surface-level check — an oversized
57
+ * prompt then burns all eight attempts on a request that cannot succeed.
58
+ */
59
+ export const isBadRequest = (e: unknown): boolean => {
60
+ let current: unknown = e
61
+ for (let depth = 0; current != null && depth < MAX_CAUSE_DEPTH; ++depth) {
62
+ if ((current as { status?: unknown }).status === 400) return true
63
+ const cause = (current as { cause?: unknown }).cause
64
+ if (cause === current) return false
65
+ current = cause
66
+ }
67
+ return false
68
+ }
@@ -1,5 +1,6 @@
1
+ import { BaseMessage } from '@langchain/core/messages'
1
2
  import type { MessageFieldWithRole } from '@langchain/core/messages'
2
- import { JSON_INSTRUCTION, NO_THINK_DIRECTIVE } from '../consts.js'
3
+ import { EMPTY_CONTENT_STUB, JSON_INSTRUCTION, NO_THINK_DIRECTIVE } from '../consts.js'
3
4
 
4
5
  const messageMentions = (msg: MessageFieldWithRole, needle: string): boolean => {
5
6
  if (typeof msg.content === 'string') return msg.content.toLowerCase().includes(needle)
@@ -56,6 +57,55 @@ export const stripCacheMarkers = (msgs: MessageFieldWithRole[]): void => {
56
57
  }
57
58
  }
58
59
 
60
+ const isBlankTextBlock = (part: unknown): boolean =>
61
+ typeof part === 'object' && part !== null
62
+ && (part as Record<string, unknown>).type === 'text'
63
+ && typeof (part as Record<string, unknown>).text === 'string'
64
+ && (part as Record<string, string>).text.trim() === ''
65
+
66
+ /**
67
+ * Remove whitespace-only text content so no request carries a blank text block.
68
+ *
69
+ * Anthropic rejects one outright (`400 messages: text content blocks must contain
70
+ * non-whitespace text`), and a 400 is fatal — a single blank block, typically a file
71
+ * read that returned nothing, kills the whole call with no retry. Blank text blocks
72
+ * are dropped from block arrays; a message left without content is removed, with two
73
+ * exceptions: a tool result keeps its `tool_use` pairing by carrying a stub instead,
74
+ * and an AI message that still holds tool calls keeps an empty string, which
75
+ * serializes without a text block. An input that loses every message gets one stub
76
+ * user message so the request stays valid.
77
+ */
78
+ export const dropBlankContent = (msgs: MessageFieldWithRole[]): void => {
79
+ for (let i = msgs.length - 1; i >= 0; i--) {
80
+ const msg = msgs[i]
81
+ let content = msg.content
82
+ if (Array.isArray(content)) {
83
+ const kept = content.filter(part => !isBlankTextBlock(part))
84
+ if (kept.length !== content.length) {
85
+ msg.content = kept as unknown as typeof msg.content
86
+ }
87
+ if (kept.length > 0) {
88
+ continue
89
+ }
90
+ content = ''
91
+ }
92
+ if (typeof content === 'string' && content.trim() === '') {
93
+ const role = msg instanceof BaseMessage ? msg.getType() : `${msg.role}`
94
+ const toolCalls = (msg as { tool_calls?: unknown[] }).tool_calls
95
+ if (role === 'tool') {
96
+ msg.content = EMPTY_CONTENT_STUB
97
+ } else if (toolCalls != null && toolCalls.length > 0) {
98
+ msg.content = ''
99
+ } else {
100
+ msgs.splice(i, 1)
101
+ }
102
+ }
103
+ }
104
+ if (msgs.length === 0) {
105
+ msgs.push({ role: 'user', content: EMPTY_CONTENT_STUB })
106
+ }
107
+ }
108
+
59
109
  /**
60
110
  * Ensure the word "json" appears somewhere in the prompt. Several providers refuse or
61
111
  * silently ignore a JSON mode unless it does; when it is missing the JSON instruction is
@@ -1,7 +1,8 @@
1
1
  import { describe, expect, test } from 'bun:test'
2
+ import { AIMessage, ToolMessage } from '@langchain/core/messages'
2
3
  import type { MessageFieldWithRole } from '@langchain/core/messages'
3
- import { JSON_INSTRUCTION, NO_THINK_DIRECTIVE } from '../src/consts.js'
4
- import { applyNoThink, ensureJsonMention } from '../src/utils/prompt.js'
4
+ import { EMPTY_CONTENT_STUB, JSON_INSTRUCTION, NO_THINK_DIRECTIVE } from '../src/consts.js'
5
+ import { applyNoThink, dropBlankContent, ensureJsonMention } from '../src/utils/prompt.js'
5
6
  import { toToolName, unwrapNamed } from '../src/utils/schema.js'
6
7
  import { getChunkFinishReason, streamWithDeadline } from '../src/utils/stream.js'
7
8
 
@@ -58,6 +59,70 @@ describe('utils/prompt — thinking suppression', () => {
58
59
  })
59
60
  })
60
61
 
62
+ describe('utils/prompt — blank content sanitization', () => {
63
+ test('drops a whitespace-only user message and keeps the rest', () => {
64
+ const msgs: MessageFieldWithRole[] = [
65
+ { role: 'user', content: 'the task' },
66
+ { role: 'user', content: '\n\n ' },
67
+ { role: 'user', content: 'the file' },
68
+ ]
69
+ dropBlankContent(msgs)
70
+ expect(msgs.map(m => m.content)).toEqual(['the task', 'the file'])
71
+ })
72
+
73
+ test('filters blank text blocks out of block arrays, keeping non-text blocks', () => {
74
+ const msgs: MessageFieldWithRole[] = [{
75
+ role: 'user',
76
+ content: [
77
+ { type: 'text', text: ' \n' },
78
+ { type: 'text', text: 'kept' },
79
+ { type: 'image_url', image_url: { url: 'data:,x' } },
80
+ ],
81
+ }]
82
+ dropBlankContent(msgs)
83
+ expect(msgs).toHaveLength(1)
84
+ expect(msgs[0]!.content).toEqual([
85
+ { type: 'text', text: 'kept' },
86
+ { type: 'image_url', image_url: { url: 'data:,x' } },
87
+ ])
88
+ })
89
+
90
+ test('removes a message whose block array becomes empty', () => {
91
+ const msgs: MessageFieldWithRole[] = [
92
+ { role: 'user', content: 'the task' },
93
+ { role: 'user', content: [{ type: 'text', text: ' ' }] },
94
+ ]
95
+ dropBlankContent(msgs)
96
+ expect(msgs.map(m => m.content)).toEqual(['the task'])
97
+ })
98
+
99
+ test('stubs a blank tool result instead of dropping it', () => {
100
+ const msgs = [
101
+ { role: 'user', content: 'run it' },
102
+ new ToolMessage({ tool_call_id: 'call_1', content: ' ' }),
103
+ ] as MessageFieldWithRole[]
104
+ dropBlankContent(msgs)
105
+ expect(msgs).toHaveLength(2)
106
+ expect((msgs[1] as ToolMessage).content).toBe(EMPTY_CONTENT_STUB)
107
+ })
108
+
109
+ test('keeps a blank AI message that carries tool calls, with empty string content', () => {
110
+ const msgs = [
111
+ { role: 'user', content: 'run it' },
112
+ new AIMessage({ content: '\n', tool_calls: [{ id: 'call_1', name: 'run', args: {} }] }),
113
+ ] as MessageFieldWithRole[]
114
+ dropBlankContent(msgs)
115
+ expect(msgs).toHaveLength(2)
116
+ expect((msgs[1] as AIMessage).content).toBe('')
117
+ })
118
+
119
+ test('replaces an all-blank input with a single stub user message', () => {
120
+ const msgs: MessageFieldWithRole[] = [{ role: 'user', content: ' ' }]
121
+ dropBlankContent(msgs)
122
+ expect(msgs).toEqual([{ role: 'user', content: EMPTY_CONTENT_STUB }])
123
+ })
124
+ })
125
+
61
126
  describe('utils/schema — tool naming and unwrapping', () => {
62
127
  test('sanitises a schema title into a provider-acceptable tool name', () => {
63
128
  expect(toToolName('User Story')).toBe('User_Story')
@@ -2,6 +2,7 @@ import { describe, expect, test } from 'bun:test'
2
2
  import { ChatAnthropic } from '@langchain/anthropic'
3
3
  import { ChatOpenAI } from '@langchain/openai'
4
4
  import { BadRequestError } from '@anthropic-ai/sdk'
5
+ import { ContextOverflowError } from '@langchain/core/errors'
5
6
  import { ModelProvider, PromptBlock, StructuredMode } from '@owlmeans/llm-common'
6
7
  import {
7
8
  anthropicPlugin, compatiblePlugin, makeLlmService, openAiPlugin, pluginFor, pluginOf,
@@ -430,11 +431,33 @@ describe('@owlmeans/llm — fatal error classification', () => {
430
431
  expect(compatiblePlugin.isFatal?.(foreign)).toBe(foreign)
431
432
  })
432
433
 
434
+ // langchain re-wraps a provider failure in its own typed error and keeps the original
435
+ // only under `cause`, so the wrapper carries no `status` of its own. An oversized prompt
436
+ // arrives this way — and since the retry escalator raises only the OUTPUT budget, every
437
+ // one of the eight attempts re-sent the same over-limit input and failed identically.
438
+ test('a 400 wrapped in a langchain error is still fatal', () => {
439
+ const raw = Object.assign(new Error('prompt is too long: 323182 tokens > 200000 maximum'), { status: 400 })
440
+ const wrapped = ContextOverflowError.fromError(raw)
441
+ expect(anthropicPlugin.isFatal?.(wrapped)).toBe(wrapped)
442
+ expect(openAiPlugin.isFatal?.(wrapped)).toBe(wrapped)
443
+ expect(compatiblePlugin.isFatal?.(wrapped)).toBe(wrapped)
444
+
445
+ const nested = Object.assign(new Error('outer'), { cause: wrapped })
446
+ expect(anthropicPlugin.isFatal?.(nested)).toBe(nested)
447
+ })
448
+
433
449
  test('a retryable status is not treated as fatal', () => {
434
450
  const overloaded = Object.assign(new Error('529'), { status: 529 })
435
451
  expect(anthropicPlugin.isFatal?.(overloaded)).toBeNull()
436
452
  expect(openAiPlugin.isFatal?.(overloaded)).toBeNull()
437
453
  })
454
+
455
+ // The cause walk must terminate on a chain that points back at itself.
456
+ test('a self-referential cause chain does not hang', () => {
457
+ const looped: Error & { cause?: unknown } = new Error('loop')
458
+ looped.cause = looped
459
+ expect(anthropicPlugin.isFatal?.(looped)).toBeNull()
460
+ })
438
461
  })
439
462
 
440
463
  describe('@owlmeans/llm — service', () => {