@owlmeans/llm 0.1.17 → 0.1.18-rc.1
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 +1 -0
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/llm/SKILL.md +29 -12
- package/build/consts.d.ts +7 -0
- package/build/consts.d.ts.map +1 -1
- package/build/consts.js +7 -0
- package/build/consts.js.map +1 -1
- package/build/model.d.ts.map +1 -1
- package/build/model.js +2 -1
- package/build/model.js.map +1 -1
- package/build/plugins/anthropic.d.ts.map +1 -1
- package/build/plugins/anthropic.js +12 -11
- package/build/plugins/anthropic.js.map +1 -1
- package/build/plugins/openai.d.ts +7 -5
- package/build/plugins/openai.d.ts.map +1 -1
- package/build/plugins/openai.js +9 -7
- package/build/plugins/openai.js.map +1 -1
- package/build/plugins/utils.d.ts +17 -0
- package/build/plugins/utils.d.ts.map +1 -1
- package/build/plugins/utils.js +30 -0
- package/build/plugins/utils.js.map +1 -1
- package/build/utils/prompt.d.ts +13 -0
- package/build/utils/prompt.d.ts.map +1 -1
- package/build/utils/prompt.js +50 -1
- package/build/utils/prompt.js.map +1 -1
- package/package.json +6 -6
- package/src/consts.ts +8 -0
- package/src/model.ts +2 -1
- package/src/plugins/anthropic.ts +12 -11
- package/src/plugins/openai.ts +9 -8
- package/src/plugins/utils.ts +30 -0
- package/src/utils/prompt.ts +51 -1
- package/tests/internals.spec.ts +67 -2
- package/tests/plugins.spec.ts +23 -0
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
|
|
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.
|
|
5
|
-
"generatedAt": "2026-08-
|
|
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.
|
|
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
|
-
##
|
|
105
|
+
## Classify a provider error by walking `cause`, never by `instanceof` or a surface read
|
|
106
106
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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
|
|
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
|
/**
|
package/build/consts.d.ts.map
CHANGED
|
@@ -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
|
/**
|
package/build/consts.js.map
CHANGED
|
@@ -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"}
|
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;AA8CnB;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,oFAStB,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;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);
|
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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"}
|
|
@@ -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,
|
|
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 —
|
|
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 `
|
|
192
|
-
* carries its OWN nested copy of
|
|
193
|
-
*
|
|
194
|
-
* `
|
|
195
|
-
*
|
|
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
|
|
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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGjF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;
|
|
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
|
|
23
|
-
* re-sends the same shape (and the escalator raises
|
|
24
|
-
* strictly worse), so eight attempts only bury the
|
|
25
|
-
* rather than an SDK class: aggregators and
|
|
26
|
-
* types, and
|
|
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
|
|
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"}
|
package/build/plugins/openai.js
CHANGED
|
@@ -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
|
|
29
|
-
* re-sends the same shape (and the escalator raises
|
|
30
|
-
* strictly worse), so eight attempts only bury the
|
|
31
|
-
* rather than an SDK class: aggregators and
|
|
32
|
-
* types, and
|
|
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
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGpE,OAAO,EAAE,iBAAiB,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/utils.d.ts
CHANGED
|
@@ -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"}
|
package/build/plugins/utils.js
CHANGED
|
@@ -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"}
|
package/build/utils/prompt.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/build/utils/prompt.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
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":"
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/utils/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEvF,MAAM,eAAe,GAAG,CAAC,GAAyB,EAAE,MAAc,EAAW,EAAE;IAC7E,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACtF,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CACrB,CAAC,IAAa,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAK,IAAgC;eACtG,OAAQ,IAA+B,CAAC,IAAI,KAAK,QAAQ;eACxD,IAA+B,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC1E,CAAA;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,qGAAqG;AACrG,MAAM,eAAe,GAAG,CAAC,IAA4B,EAAE,IAAY,EAAQ,EAAE;IAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClC,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAA;IAC3C,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAA4B,EAAQ,EAAE;IACtE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,SAAQ;QACV,CAAC;QACD,IAAI,KAAK,GAAG,KAAK,CAAA;QACjB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACpC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;gBACzE,KAAK,GAAG,IAAI,CAAA;gBACZ,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,IAA+B,CAAA;gBAC5E,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QACF,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,OAAO,GAAG,MAAuC,CAAA;QACvD,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAW,EAAE,CAClD,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;OACrC,IAAgC,CAAC,IAAI,KAAK,MAAM;OACjD,OAAQ,IAAgC,CAAC,IAAI,KAAK,QAAQ;OACzD,IAA+B,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAA4B,EAAQ,EAAE;IACrE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAA;YAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnC,GAAG,CAAC,OAAO,GAAG,IAAqC,CAAA;YACrD,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,SAAQ;YACV,CAAC;YACD,OAAO,GAAG,EAAE,CAAA;QACd,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,GAAG,YAAY,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;YACvE,MAAM,SAAS,GAAI,GAAkC,CAAC,UAAU,CAAA;YAChE,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,GAAG,CAAC,OAAO,GAAG,kBAAkB,CAAA;YAClC,CAAC;iBAAM,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,OAAO,GAAG,EAAE,CAAA;YAClB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAC1D,CAAC;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAA4B,EAAQ,EAAE;IACtE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAAE,OAAM;IAC1D,eAAe,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;AACzC,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAA4B,EAAE,eAAoC,EAAQ,EAAE;IACvG,IAAI,eAAe,KAAK,IAAI;QAAE,OAAM;IACpC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAAE,OAAM;IACzG,eAAe,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;AAC3C,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/llm",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.18-rc.1",
|
|
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.
|
|
50
|
+
"@owlmeans/test": "^0.1.18-rc.1",
|
|
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.
|
|
59
|
-
"@owlmeans/context": "^0.1.
|
|
60
|
-
"@owlmeans/error": "^0.1.
|
|
61
|
-
"@owlmeans/llm-common": "^0.1.
|
|
58
|
+
"@owlmeans/basic-ids": "^0.1.18-rc.1",
|
|
59
|
+
"@owlmeans/context": "^0.1.18-rc.1",
|
|
60
|
+
"@owlmeans/error": "^0.1.18-rc.1",
|
|
61
|
+
"@owlmeans/llm-common": "^0.1.18-rc.1",
|
|
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) {
|
package/src/plugins/anthropic.ts
CHANGED
|
@@ -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 —
|
|
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 `
|
|
228
|
-
* carries its OWN nested copy of
|
|
229
|
-
*
|
|
230
|
-
* `
|
|
231
|
-
*
|
|
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
|
|
234
|
-
? e as Error
|
|
235
|
-
: null,
|
|
236
|
+
isFatal: e => e instanceof BadRequestError || isBadRequest(e) ? e as Error : null,
|
|
236
237
|
}
|
package/src/plugins/openai.ts
CHANGED
|
@@ -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
|
|
39
|
-
* re-sends the same shape (and the escalator raises
|
|
40
|
-
* strictly worse), so eight attempts only bury the
|
|
41
|
-
* rather than an SDK class: aggregators and
|
|
42
|
-
* types, and
|
|
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
|
package/src/plugins/utils.ts
CHANGED
|
@@ -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
|
+
}
|
package/src/utils/prompt.ts
CHANGED
|
@@ -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
|
package/tests/internals.spec.ts
CHANGED
|
@@ -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')
|
package/tests/plugins.spec.ts
CHANGED
|
@@ -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', () => {
|