@providerkit/core 0.5.0 → 0.6.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 +15 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/anthropic.d.ts +9 -0
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +19 -3
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/openai.d.ts +18 -10
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +37 -14
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/zai.d.ts +18 -0
- package/dist/providers/zai.d.ts.map +1 -0
- package/dist/providers/zai.js +27 -0
- package/dist/providers/zai.js.map +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +7 -1
- package/dist/schema.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/providers/anthropic.ts +36 -10
- package/src/providers/openai.ts +41 -14
- package/src/providers/zai.ts +31 -0
- package/src/schema.ts +7 -1
package/README.md
CHANGED
|
@@ -60,6 +60,21 @@ try {
|
|
|
60
60
|
}
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
+
### Z.ai Coding Plan
|
|
64
|
+
|
|
65
|
+
`createZaiCodingProvider` uses the Coding Plan endpoint with Bearer authentication.
|
|
66
|
+
Pass your plan's key and a model it supports:
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import { createZaiCodingProvider } from "@providerkit/core";
|
|
70
|
+
|
|
71
|
+
const provider = createZaiCodingProvider({ apiKey, model: "glm-5.2" });
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
It returns the same provider interface as the adapters above. The API root is
|
|
75
|
+
`https://api.z.ai/api/anthropic`; the adapter adds `/v1/messages`.
|
|
76
|
+
Usage reports tokens consumed, not the price of your subscription.
|
|
77
|
+
|
|
63
78
|
**Full documentation lives at [providerkit.dev](https://providerkit.dev)** — it is the single
|
|
64
79
|
source of truth for usage, and this README deliberately stays a front door so the two cannot
|
|
65
80
|
drift.
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
|
|
@@ -21,6 +21,15 @@ export interface AnthropicConfig {
|
|
|
21
21
|
/** Send the key as a Bearer instead of `x-api-key` — what a subscription
|
|
22
22
|
* access token needs. */
|
|
23
23
|
bearer?: boolean;
|
|
24
|
+
/** Say "no thinking" with an explicit `thinking: { type: "disabled" }` when
|
|
25
|
+
* effort resolves to none, instead of omitting the field. For endpoints
|
|
26
|
+
* where an absent field means the MODEL's default, not off — Z.ai's coding
|
|
27
|
+
* endpoint reads silence as thinking ON for reasoning-mandatory models like
|
|
28
|
+
* GLM 5.3 Flash (measured 2026-09-13: omit → thinking block; disabled →
|
|
29
|
+
* none), and it accepts the marker natively. Native Anthropic has no such
|
|
30
|
+
* marker and defaults to off when the field is absent, so leave this unset
|
|
31
|
+
* there. */
|
|
32
|
+
explicitNone?: boolean;
|
|
24
33
|
}
|
|
25
34
|
export declare function toAnthropicMessages(messages: readonly ChatMessage[]): {
|
|
26
35
|
system?: unknown[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,WAAW,EAEX,MAAM,EAEN,QAAQ,EAIT,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd;wCACoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;uEAEmE;IACnE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;wEACoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;8BAC0B;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,WAAW,EAEX,MAAM,EAEN,QAAQ,EAIT,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd;wCACoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;uEAEmE;IACnE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;wEACoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;8BAC0B;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;iBAOa;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAsFD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG;IACrE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,CAqDA;AA2BD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,QAAQ,CAuKzE"}
|
|
@@ -184,11 +184,16 @@ export function createAnthropicProvider(config) {
|
|
|
184
184
|
delete request.temperature;
|
|
185
185
|
delete request.top_p;
|
|
186
186
|
}
|
|
187
|
+
else if (config.explicitNone) {
|
|
188
|
+
// The one dialect where silence means the model default — which is ON
|
|
189
|
+
// for a reasoning-mandatory model — so "none" has to be said out loud.
|
|
190
|
+
request.thinking = { type: "disabled" };
|
|
191
|
+
}
|
|
187
192
|
// Anthropic reports cache reads and writes as fields of their OWN,
|
|
188
193
|
// EXCLUDED from `input_tokens` — where the OpenAI shapes report a cached
|
|
189
194
|
// subset already inside the prompt count. Reconciling here is what keeps
|
|
190
195
|
// one usage record meaningful across both, and a cost figure honest.
|
|
191
|
-
let
|
|
196
|
+
let freshInputTokens = 0;
|
|
192
197
|
let cachedInputTokens = 0;
|
|
193
198
|
let cacheWriteTokens = 0;
|
|
194
199
|
let outputTokens = 0;
|
|
@@ -226,7 +231,7 @@ export function createAnthropicProvider(config) {
|
|
|
226
231
|
const usage = event.message?.usage;
|
|
227
232
|
cachedInputTokens = usage?.cache_read_input_tokens ?? 0;
|
|
228
233
|
cacheWriteTokens = usage?.cache_creation_input_tokens ?? 0;
|
|
229
|
-
|
|
234
|
+
freshInputTokens = usage?.input_tokens ?? 0;
|
|
230
235
|
break;
|
|
231
236
|
}
|
|
232
237
|
case "content_block_start": {
|
|
@@ -264,6 +269,12 @@ export function createAnthropicProvider(config) {
|
|
|
264
269
|
toolCall = null;
|
|
265
270
|
break;
|
|
266
271
|
case "message_delta": {
|
|
272
|
+
// Z.ai starts with zero input usage and reports the real totals here.
|
|
273
|
+
// These are cumulative counters, not increments. Native Anthropic
|
|
274
|
+
// usually sends only output_tokens here, so absent fields retain theirs.
|
|
275
|
+
freshInputTokens = event.usage?.input_tokens ?? freshInputTokens;
|
|
276
|
+
cachedInputTokens = event.usage?.cache_read_input_tokens ?? cachedInputTokens;
|
|
277
|
+
cacheWriteTokens = event.usage?.cache_creation_input_tokens ?? cacheWriteTokens;
|
|
267
278
|
outputTokens = event.usage?.output_tokens ?? outputTokens;
|
|
268
279
|
const finishReason = mapStopReason(event.delta?.stop_reason);
|
|
269
280
|
if (finishReason)
|
|
@@ -273,7 +284,12 @@ export function createAnthropicProvider(config) {
|
|
|
273
284
|
case "message_stop":
|
|
274
285
|
yield {
|
|
275
286
|
type: "usage",
|
|
276
|
-
usage: {
|
|
287
|
+
usage: {
|
|
288
|
+
inputTokens: freshInputTokens + cachedInputTokens + cacheWriteTokens,
|
|
289
|
+
cachedInputTokens,
|
|
290
|
+
cacheWriteTokens,
|
|
291
|
+
outputTokens,
|
|
292
|
+
},
|
|
277
293
|
};
|
|
278
294
|
break;
|
|
279
295
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA8CpD,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AACrD,MAAM,eAAe,GAAG,YAAY,CAAC;AACrC,6EAA6E;AAC7E,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC;;;;GAIG;AACH,MAAM,eAAe,GAA4C;IAC/D,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;CACZ,CAAC;AAEF,SAAS,aAAa,CAAC,MAA0B;IAC/C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,eAAe;YAClB,OAAO,MAAM,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,YAAY,CAAC;QACtB,KAAK,YAAY;YACf,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,gBAAgB,CAAC;QAC1B;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA+B;IACvD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1E,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1B,IAAI,CAAC,IAAI,KAAK,MAAM;QAClB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QACnC,CAAC,CAAC;YACE,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;SACvE,CACN,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH;;;;;;;;;;;;GAYG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3F,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,SAAS,CAAC,IAAgB;IACjC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgC;IAIlE,MAAM,MAAM,GAAG,QAAQ;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;SACrB,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,MAAM,GAAG,GAA2C,EAAE,CAAC;IACvD,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAiB,EAAE,EAAE;QACrD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI;YAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;;YACjD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACxC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,UAAU,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,UAAU,CAAC,MAAM,EAAE;gBACjB;oBACE,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,OAAO,CAAC,UAAU;oBAC/B,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;wBACvC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;4BACxC,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;yBACzE,CAAC,CAAC;qBACJ;iBACF;aACF,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,0EAA0E;QAC1E,qEAAqE;QACrE,yBAAyB;QACzB,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;aACrC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAClE,CAAC;AA2BD,MAAM,UAAU,uBAAuB,CAAC,MAAuB;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC;IACnD,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,WAAW,CAAC;IAEpC,OAAO;QACL,EAAE;QACF,KAAK,EAAE,MAAM,CAAC,KAAK;QAEnB,KAAK,CAAC,CAAC,YAAY,CACjB,QAAuB,EACvB,KAAuB,EACvB,OAAsB,EAAE;YAExB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAC;YAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;YACtD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAEjE,MAAM,OAAO,GAA4B;gBACvC,KAAK;gBACL,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,IAAI;aACb,CAAC;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAClF,IAAI,UAAU,EAAE,MAAM;gBAAE,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;YACpD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC3E,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;YACvD,IAAI,IAAI,CAAC,aAAa,EAAE,MAAM;gBAAE,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;YAC5E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACnC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,YAAY,EAAE,IAAI,CAAC,WAAW;iBAC/B,CAAC,CAAC,CAAC;YACN,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;gBAClD,OAAO,CAAC,WAAW;oBACjB,IAAI,CAAC,UAAU,KAAK,MAAM;wBACxB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;wBAClB,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU;4BAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;4BACjB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACvD,CAAC;YACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC9E,OAAO,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;gBAC9D,8DAA8D;gBAC9D,OAAO,OAAO,CAAC,WAAW,CAAC;gBAC3B,OAAO,OAAO,CAAC,KAAK,CAAC;YACvB,CAAC;iBAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC/B,sEAAsE;gBACtE,uEAAuE;gBACvE,OAAO,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;YAC1C,CAAC;YAED,mEAAmE;YACnE,yEAAyE;YACzE,yEAAyE;YACzE,qEAAqE;YACrE,IAAI,gBAAgB,GAAG,CAAC,CAAC;YACzB,IAAI,iBAAiB,GAAG,CAAC,CAAC;YAC1B,IAAI,gBAAgB,GAAG,CAAC,CAAC;YACzB,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,QAAQ,GAAuD,IAAI,CAAC;YACxE,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;YAEpB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,SAAS,CAAC;gBACjC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC;gBACpC,OAAO,EAAE;oBACP,mBAAmB,EAAE,MAAM,CAAC,OAAO,IAAI,eAAe;oBACtD,GAAG,CAAC,MAAM,CAAC,MAAM;wBACf,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE;wBAC9C,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;oBACnC,GAAG,MAAM,CAAC,OAAO;iBAClB;gBACD,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,EAAE;gBACZ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D,CAAC,EAAE,CAAC;gBACH,IAAI,KAAqB,CAAC;gBAC1B,IAAI,CAAC;oBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;gBAC7C,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS,CAAC,0CAA0C;gBACtD,CAAC;gBAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,uEAAuE;oBACvE,uEAAuE;oBACvE,uEAAuE;oBACvE,mEAAmE;oBACnE,KAAK,OAAO;wBACV,MAAM,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;oBAErC,KAAK,eAAe,CAAC,CAAC,CAAC;wBACrB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;wBACnC,iBAAiB,GAAG,KAAK,EAAE,uBAAuB,IAAI,CAAC,CAAC;wBACxD,gBAAgB,GAAG,KAAK,EAAE,2BAA2B,IAAI,CAAC,CAAC;wBAC3D,gBAAgB,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;wBAC5C,MAAM;oBACR,CAAC;oBAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;wBAC3B,UAAU,IAAI,CAAC,CAAC;wBAChB,IAAI,KAAK,CAAC,aAAa,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;4BAC7C,QAAQ,GAAG;gCACT,KAAK,EAAE,UAAU;gCACjB,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE;gCAChC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE;6BACrC,CAAC;4BACF,MAAM;gCACJ,IAAI,EAAE,OAAO;gCACb,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;6BAC7E,CAAC;wBACJ,CAAC;wBACD,MAAM;oBACR,CAAC;oBAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;wBAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;wBAC1B,IAAI,KAAK,EAAE,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;4BAC/C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;wBAC/C,CAAC;6BAAM,IAAI,KAAK,EAAE,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;4BAC9D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACrD,CAAC;6BAAM,IAAI,KAAK,EAAE,IAAI,KAAK,kBAAkB,IAAI,QAAQ,EAAE,CAAC;4BAC1D,MAAM;gCACJ,IAAI,EAAE,OAAO;gCACb,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;6BAC5E,CAAC;wBACJ,CAAC;wBACD,MAAM;oBACR,CAAC;oBAED,KAAK,oBAAoB;wBACvB,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM;oBAER,KAAK,eAAe,CAAC,CAAC,CAAC;wBACrB,sEAAsE;wBACtE,kEAAkE;wBAClE,yEAAyE;wBACzE,gBAAgB,GAAG,KAAK,CAAC,KAAK,EAAE,YAAY,IAAI,gBAAgB,CAAC;wBACjE,iBAAiB,GAAG,KAAK,CAAC,KAAK,EAAE,uBAAuB,IAAI,iBAAiB,CAAC;wBAC9E,gBAAgB,GAAG,KAAK,CAAC,KAAK,EAAE,2BAA2B,IAAI,gBAAgB,CAAC;wBAChF,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,aAAa,IAAI,YAAY,CAAC;wBAC1D,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;wBAC7D,IAAI,YAAY;4BAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;wBACzD,MAAM;oBACR,CAAC;oBAED,KAAK,cAAc;wBACjB,MAAM;4BACJ,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE;gCACL,WAAW,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,gBAAgB;gCACpE,iBAAiB;gCACjB,gBAAgB;gCAChB,YAAY;6BACb;yBACF,CAAC;wBACF,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -4,6 +4,10 @@ export interface OpenAIConfig {
|
|
|
4
4
|
model: string;
|
|
5
5
|
/** Any OpenAI-compatible endpoint. Defaults to OpenAI itself. */
|
|
6
6
|
baseUrl?: string;
|
|
7
|
+
/** Path appended to baseUrl. Defaults to /v1/chat/completions. Set
|
|
8
|
+
* /chat/completions when the base already includes the API version, such as
|
|
9
|
+
* a gateway using /v4 rather than /v1. */
|
|
10
|
+
path?: string;
|
|
7
11
|
/** Names the provider in errors and logs — "openrouter", "deepseek", … It
|
|
8
12
|
* also picks the effort dialect below, unless `effortDialect` overrides. */
|
|
9
13
|
id?: string;
|
|
@@ -67,16 +71,20 @@ export type EffortDialect = "openai" | "openrouter" | "deepseek" | "off";
|
|
|
67
71
|
*
|
|
68
72
|
* One knob, three incompatible spellings, and the differences are not cosmetic:
|
|
69
73
|
*
|
|
70
|
-
* - **OpenRouter
|
|
71
|
-
* `reasoning.enabled: false`
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
74
|
+
* - **On OpenRouter, a model that must think refuses BOTH off switches.**
|
|
75
|
+
* `reasoning.enabled: false` is refused by GLM 5.3 Flash with
|
|
76
|
+
* `400 "Reasoning is mandatory for this endpoint and cannot be disabled."`,
|
|
77
|
+
* which cost one app its onboarding read, and is why nothing here ever emits
|
|
78
|
+
* that field. That was then read as "OpenRouter has no off switch" and `none`
|
|
79
|
+
* was floored to `low` on the strength of it — wrong, because `none` is a
|
|
80
|
+
* member of OpenRouter's own effort enum and the floor bought a thinking pass
|
|
81
|
+
* on every turn that asked for none. But the correction over-reached: `none`
|
|
82
|
+
* is NOT universally safe either. Re-measured 2026-09-09, the same model
|
|
83
|
+
* answers the same 400 to `effort: "none"`. An unsupported level is mapped to
|
|
84
|
+
* the nearest only where the model CAN vary its effort; where thinking is
|
|
85
|
+
* mandatory, `none` is refused outright and the whole call is lost.
|
|
86
|
+
* The honest way to ask for the least thinking on this dialect is to pass no
|
|
87
|
+
* effort at all — see `effortParams`, where the numbers live.
|
|
80
88
|
* - **DeepSeek V4 defaults thinking ON**, so `none` has to be an explicit
|
|
81
89
|
* refusal. That is the case proving OpenRouter's floor is a constraint and
|
|
82
90
|
* not a preference for always thinking.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EAEX,MAAM,EAEN,aAAa,EACb,QAAQ,EAIT,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;iFAC6E;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAID;4EAC4E;AAC5E,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC;AAEzE
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EAEX,MAAM,EAEN,aAAa,EACb,QAAQ,EAIT,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;+CAE2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;iFAC6E;IAC7E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAID;4EAC4E;AAC5E,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6CzB;AAmCD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,EAAE,CAyD5E;AA+BD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ,CA4LnE"}
|
package/dist/providers/openai.js
CHANGED
|
@@ -13,16 +13,20 @@ const DEFAULT_BASE_URL = "https://api.openai.com";
|
|
|
13
13
|
*
|
|
14
14
|
* One knob, three incompatible spellings, and the differences are not cosmetic:
|
|
15
15
|
*
|
|
16
|
-
* - **OpenRouter
|
|
17
|
-
* `reasoning.enabled: false`
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
16
|
+
* - **On OpenRouter, a model that must think refuses BOTH off switches.**
|
|
17
|
+
* `reasoning.enabled: false` is refused by GLM 5.3 Flash with
|
|
18
|
+
* `400 "Reasoning is mandatory for this endpoint and cannot be disabled."`,
|
|
19
|
+
* which cost one app its onboarding read, and is why nothing here ever emits
|
|
20
|
+
* that field. That was then read as "OpenRouter has no off switch" and `none`
|
|
21
|
+
* was floored to `low` on the strength of it — wrong, because `none` is a
|
|
22
|
+
* member of OpenRouter's own effort enum and the floor bought a thinking pass
|
|
23
|
+
* on every turn that asked for none. But the correction over-reached: `none`
|
|
24
|
+
* is NOT universally safe either. Re-measured 2026-09-09, the same model
|
|
25
|
+
* answers the same 400 to `effort: "none"`. An unsupported level is mapped to
|
|
26
|
+
* the nearest only where the model CAN vary its effort; where thinking is
|
|
27
|
+
* mandatory, `none` is refused outright and the whole call is lost.
|
|
28
|
+
* The honest way to ask for the least thinking on this dialect is to pass no
|
|
29
|
+
* effort at all — see `effortParams`, where the numbers live.
|
|
26
30
|
* - **DeepSeek V4 defaults thinking ON**, so `none` has to be an explicit
|
|
27
31
|
* refusal. That is the case proving OpenRouter's floor is a constraint and
|
|
28
32
|
* not a preference for always thinking.
|
|
@@ -57,9 +61,28 @@ export function effortParams(dialect, effort) {
|
|
|
57
61
|
case "openrouter":
|
|
58
62
|
// Its own enum runs xhigh > high > medium > low > minimal > none, so `max`
|
|
59
63
|
// has a real tier here and clamping it to `high` throws the top one away —
|
|
60
|
-
// 0.95 of the budget against 0.8.
|
|
61
|
-
//
|
|
62
|
-
//
|
|
64
|
+
// 0.95 of the budget against 0.8.
|
|
65
|
+
//
|
|
66
|
+
// CAUTION, measured 2026-09-09 against z-ai/glm-5.3-flash: the claim that
|
|
67
|
+
// "OpenRouter maps an unsupported level to its nearest rather than
|
|
68
|
+
// refusing" does NOT hold for `none`. That model answers
|
|
69
|
+
// `400 "Reasoning is mandatory for this endpoint and cannot be disabled."`
|
|
70
|
+
// to `reasoning.effort: "none"` exactly as it does to
|
|
71
|
+
// `reasoning.enabled: false` — so on a model that must think, `none` is a
|
|
72
|
+
// refusal and not a floor. Callers that mean "as little as possible"
|
|
73
|
+
// should pass no effort at all rather than `none`, which is why the
|
|
74
|
+
// absent-effort branch above stays load-bearing.
|
|
75
|
+
//
|
|
76
|
+
// Same measurement, same model, one structured-output call three ways:
|
|
77
|
+
//
|
|
78
|
+
// no reasoning field 4,1s · 1 reasoning token
|
|
79
|
+
// effort "minimal" 46,6s · 474 reasoning tokens
|
|
80
|
+
// max_tokens 2000 30,3s · 484 reasoning tokens
|
|
81
|
+
//
|
|
82
|
+
// Its default sat below every level on offer, so naming one RAISED the
|
|
83
|
+
// thinking — an effort is a request, never a cap. Nearly all of the extra
|
|
84
|
+
// time was spent before the first token arrived, so it does not show up as
|
|
85
|
+
// slow streaming; it shows up as a call that looks hung.
|
|
63
86
|
return { reasoning: { effort: effort === "max" ? "xhigh" : (level ?? "none") } };
|
|
64
87
|
case "openai":
|
|
65
88
|
return { reasoning_effort: level ?? "none" };
|
|
@@ -255,7 +278,7 @@ export function createOpenAIProvider(config) {
|
|
|
255
278
|
request.provider = { order: config.providerOrder, allow_fallbacks: true };
|
|
256
279
|
}
|
|
257
280
|
for await (const data of streamSse({
|
|
258
|
-
url: apiUrl(baseUrl, "/v1/chat/completions"),
|
|
281
|
+
url: apiUrl(baseUrl, config.path ?? "/v1/chat/completions"),
|
|
259
282
|
headers: { authorization: `Bearer ${config.apiKey}`, ...config.headers },
|
|
260
283
|
body: request,
|
|
261
284
|
provider: id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,yEAAyE;AACzE,+EAA+E;AAC/E,2DAA2D;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAYpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type AnthropicConfig } from "./anthropic.ts";
|
|
2
|
+
import type { Provider } from "../types.ts";
|
|
3
|
+
/** Z.ai Coding Plan's Anthropic-compatible API root, not its pay-per-token API. */
|
|
4
|
+
export declare const ZAI_CODING_BASE_URL = "https://api.z.ai/api/anthropic";
|
|
5
|
+
export type ZaiCodingConfig = Omit<AnthropicConfig, "baseUrl" | "id" | "bearer">;
|
|
6
|
+
/** Use a Z.ai Coding Plan key with the shared Messages adapter. The preset owns
|
|
7
|
+
* the endpoint, Bearer auth and the thinking dialect; callers still choose
|
|
8
|
+
* their model and effort. Tool calls, usage and errors use the existing
|
|
9
|
+
* adapter.
|
|
10
|
+
*
|
|
11
|
+
* Dialect notes, measured 2026-09-13 against the live endpoint on
|
|
12
|
+
* `glm-5.3-flash`: an absent thinking field means the MODEL's default —
|
|
13
|
+
* thinking ON — so `effort: "none"` is sent as an explicit
|
|
14
|
+
* `thinking: { type: "disabled" }`; `low`–`max` ride the standard thinking
|
|
15
|
+
* budgets, which the endpoint accepts. Images force a thinking block even
|
|
16
|
+
* under `disabled` (the model's choice, billed as output). */
|
|
17
|
+
export declare function createZaiCodingProvider(config: ZaiCodingConfig): Provider;
|
|
18
|
+
//# sourceMappingURL=zai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zai.d.ts","sourceRoot":"","sources":["../../src/providers/zai.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,mCAAmC,CAAC;AAEpE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC;AAEjF;;;;;;;;;;+DAU+D;AAC/D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,QAAQ,CAWzE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createAnthropicProvider } from "./anthropic.js";
|
|
2
|
+
/** Z.ai Coding Plan's Anthropic-compatible API root, not its pay-per-token API. */
|
|
3
|
+
export const ZAI_CODING_BASE_URL = "https://api.z.ai/api/anthropic";
|
|
4
|
+
/** Use a Z.ai Coding Plan key with the shared Messages adapter. The preset owns
|
|
5
|
+
* the endpoint, Bearer auth and the thinking dialect; callers still choose
|
|
6
|
+
* their model and effort. Tool calls, usage and errors use the existing
|
|
7
|
+
* adapter.
|
|
8
|
+
*
|
|
9
|
+
* Dialect notes, measured 2026-09-13 against the live endpoint on
|
|
10
|
+
* `glm-5.3-flash`: an absent thinking field means the MODEL's default —
|
|
11
|
+
* thinking ON — so `effort: "none"` is sent as an explicit
|
|
12
|
+
* `thinking: { type: "disabled" }`; `low`–`max` ride the standard thinking
|
|
13
|
+
* budgets, which the endpoint accepts. Images force a thinking block even
|
|
14
|
+
* under `disabled` (the model's choice, billed as output). */
|
|
15
|
+
export function createZaiCodingProvider(config) {
|
|
16
|
+
return createAnthropicProvider({
|
|
17
|
+
...config,
|
|
18
|
+
id: "zai",
|
|
19
|
+
baseUrl: ZAI_CODING_BASE_URL,
|
|
20
|
+
bearer: true,
|
|
21
|
+
explicitNone: true,
|
|
22
|
+
// Coding gateways can allocate a 32K thinking budget themselves. Leave room
|
|
23
|
+
// for the answer; callers can still set a smaller cap for their model.
|
|
24
|
+
maxTokens: config.maxTokens ?? 65_536,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=zai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zai.js","sourceRoot":"","sources":["../../src/providers/zai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAwB,MAAM,gBAAgB,CAAC;AAG/E,mFAAmF;AACnF,MAAM,CAAC,MAAM,mBAAmB,GAAG,gCAAgC,CAAC;AAIpE;;;;;;;;;;+DAU+D;AAC/D,MAAM,UAAU,uBAAuB,CAAC,MAAuB;IAC7D,OAAO,uBAAuB,CAAC;QAC7B,GAAG,MAAM;QACT,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,mBAAmB;QAC5B,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,IAAI;QAClB,4EAA4E;QAC5E,uEAAuE;QACvE,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM;KACtC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAgBA,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAkDpE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAgBA,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAkDpE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAWpD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAmBrD"}
|
package/dist/schema.js
CHANGED
|
@@ -80,7 +80,13 @@ export function clampToSchema(value, node) {
|
|
|
80
80
|
* nothing whatsoever about its shape.
|
|
81
81
|
*/
|
|
82
82
|
export function schemaPrompt(schema) {
|
|
83
|
-
return ("Respond with a single JSON object matching this schema. No prose, no code fence
|
|
83
|
+
return ("Respond with a single JSON object matching this schema. No prose, no code fence.\n" +
|
|
84
|
+
// Nothing pins the decoder when the schema rides in the prompt, so the model
|
|
85
|
+
// is free to pretty-print its reply — and it does, putting a real line break
|
|
86
|
+
// inside a string value, which is invalid JSON and costs the whole response.
|
|
87
|
+
// Saying so is not a guarantee (the caller still has to survive a violation)
|
|
88
|
+
// but this is the only place the model is told at all.
|
|
89
|
+
"Write a line break inside a string value as \\n. A real line break there is invalid JSON.\n" +
|
|
84
90
|
JSON.stringify(schema));
|
|
85
91
|
}
|
|
86
92
|
export function isStrictSchema(node) {
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -37,6 +37,15 @@ export interface AnthropicConfig {
|
|
|
37
37
|
/** Send the key as a Bearer instead of `x-api-key` — what a subscription
|
|
38
38
|
* access token needs. */
|
|
39
39
|
bearer?: boolean;
|
|
40
|
+
/** Say "no thinking" with an explicit `thinking: { type: "disabled" }` when
|
|
41
|
+
* effort resolves to none, instead of omitting the field. For endpoints
|
|
42
|
+
* where an absent field means the MODEL's default, not off — Z.ai's coding
|
|
43
|
+
* endpoint reads silence as thinking ON for reasoning-mandatory models like
|
|
44
|
+
* GLM 5.3 Flash (measured 2026-09-13: omit → thinking block; disabled →
|
|
45
|
+
* none), and it accepts the marker natively. Native Anthropic has no such
|
|
46
|
+
* marker and defaults to off when the field is absent, so leave this unset
|
|
47
|
+
* there. */
|
|
48
|
+
explicitNone?: boolean;
|
|
40
49
|
}
|
|
41
50
|
|
|
42
51
|
const DEFAULT_BASE_URL = "https://api.anthropic.com";
|
|
@@ -181,15 +190,17 @@ export function toAnthropicMessages(messages: readonly ChatMessage[]): {
|
|
|
181
190
|
return { ...(blocks ? { system: blocks } : {}), messages: out };
|
|
182
191
|
}
|
|
183
192
|
|
|
193
|
+
interface AnthropicUsage {
|
|
194
|
+
input_tokens?: number;
|
|
195
|
+
output_tokens?: number;
|
|
196
|
+
cache_read_input_tokens?: number;
|
|
197
|
+
cache_creation_input_tokens?: number;
|
|
198
|
+
}
|
|
199
|
+
|
|
184
200
|
interface AnthropicEvent {
|
|
185
201
|
type?: string;
|
|
186
202
|
message?: {
|
|
187
|
-
usage?:
|
|
188
|
-
input_tokens?: number;
|
|
189
|
-
output_tokens?: number;
|
|
190
|
-
cache_read_input_tokens?: number;
|
|
191
|
-
cache_creation_input_tokens?: number;
|
|
192
|
-
};
|
|
203
|
+
usage?: AnthropicUsage;
|
|
193
204
|
};
|
|
194
205
|
content_block?: { type?: string; id?: string; name?: string };
|
|
195
206
|
delta?: {
|
|
@@ -199,7 +210,7 @@ interface AnthropicEvent {
|
|
|
199
210
|
partial_json?: string;
|
|
200
211
|
stop_reason?: string;
|
|
201
212
|
};
|
|
202
|
-
usage?:
|
|
213
|
+
usage?: AnthropicUsage;
|
|
203
214
|
index?: number;
|
|
204
215
|
error?: { message?: string; type?: string };
|
|
205
216
|
}
|
|
@@ -254,13 +265,17 @@ export function createAnthropicProvider(config: AnthropicConfig): Provider {
|
|
|
254
265
|
// Thinking and sampling are mutually exclusive on this shape.
|
|
255
266
|
delete request.temperature;
|
|
256
267
|
delete request.top_p;
|
|
268
|
+
} else if (config.explicitNone) {
|
|
269
|
+
// The one dialect where silence means the model default — which is ON
|
|
270
|
+
// for a reasoning-mandatory model — so "none" has to be said out loud.
|
|
271
|
+
request.thinking = { type: "disabled" };
|
|
257
272
|
}
|
|
258
273
|
|
|
259
274
|
// Anthropic reports cache reads and writes as fields of their OWN,
|
|
260
275
|
// EXCLUDED from `input_tokens` — where the OpenAI shapes report a cached
|
|
261
276
|
// subset already inside the prompt count. Reconciling here is what keeps
|
|
262
277
|
// one usage record meaningful across both, and a cost figure honest.
|
|
263
|
-
let
|
|
278
|
+
let freshInputTokens = 0;
|
|
264
279
|
let cachedInputTokens = 0;
|
|
265
280
|
let cacheWriteTokens = 0;
|
|
266
281
|
let outputTokens = 0;
|
|
@@ -300,7 +315,7 @@ export function createAnthropicProvider(config: AnthropicConfig): Provider {
|
|
|
300
315
|
const usage = event.message?.usage;
|
|
301
316
|
cachedInputTokens = usage?.cache_read_input_tokens ?? 0;
|
|
302
317
|
cacheWriteTokens = usage?.cache_creation_input_tokens ?? 0;
|
|
303
|
-
|
|
318
|
+
freshInputTokens = usage?.input_tokens ?? 0;
|
|
304
319
|
break;
|
|
305
320
|
}
|
|
306
321
|
|
|
@@ -340,6 +355,12 @@ export function createAnthropicProvider(config: AnthropicConfig): Provider {
|
|
|
340
355
|
break;
|
|
341
356
|
|
|
342
357
|
case "message_delta": {
|
|
358
|
+
// Z.ai starts with zero input usage and reports the real totals here.
|
|
359
|
+
// These are cumulative counters, not increments. Native Anthropic
|
|
360
|
+
// usually sends only output_tokens here, so absent fields retain theirs.
|
|
361
|
+
freshInputTokens = event.usage?.input_tokens ?? freshInputTokens;
|
|
362
|
+
cachedInputTokens = event.usage?.cache_read_input_tokens ?? cachedInputTokens;
|
|
363
|
+
cacheWriteTokens = event.usage?.cache_creation_input_tokens ?? cacheWriteTokens;
|
|
343
364
|
outputTokens = event.usage?.output_tokens ?? outputTokens;
|
|
344
365
|
const finishReason = mapStopReason(event.delta?.stop_reason);
|
|
345
366
|
if (finishReason) yield { type: "finish", finishReason };
|
|
@@ -349,7 +370,12 @@ export function createAnthropicProvider(config: AnthropicConfig): Provider {
|
|
|
349
370
|
case "message_stop":
|
|
350
371
|
yield {
|
|
351
372
|
type: "usage",
|
|
352
|
-
usage: {
|
|
373
|
+
usage: {
|
|
374
|
+
inputTokens: freshInputTokens + cachedInputTokens + cacheWriteTokens,
|
|
375
|
+
cachedInputTokens,
|
|
376
|
+
cacheWriteTokens,
|
|
377
|
+
outputTokens,
|
|
378
|
+
},
|
|
353
379
|
};
|
|
354
380
|
break;
|
|
355
381
|
}
|
package/src/providers/openai.ts
CHANGED
|
@@ -24,6 +24,10 @@ export interface OpenAIConfig {
|
|
|
24
24
|
model: string;
|
|
25
25
|
/** Any OpenAI-compatible endpoint. Defaults to OpenAI itself. */
|
|
26
26
|
baseUrl?: string;
|
|
27
|
+
/** Path appended to baseUrl. Defaults to /v1/chat/completions. Set
|
|
28
|
+
* /chat/completions when the base already includes the API version, such as
|
|
29
|
+
* a gateway using /v4 rather than /v1. */
|
|
30
|
+
path?: string;
|
|
27
31
|
/** Names the provider in errors and logs — "openrouter", "deepseek", … It
|
|
28
32
|
* also picks the effort dialect below, unless `effortDialect` overrides. */
|
|
29
33
|
id?: string;
|
|
@@ -91,16 +95,20 @@ export type EffortDialect = "openai" | "openrouter" | "deepseek" | "off";
|
|
|
91
95
|
*
|
|
92
96
|
* One knob, three incompatible spellings, and the differences are not cosmetic:
|
|
93
97
|
*
|
|
94
|
-
* - **OpenRouter
|
|
95
|
-
* `reasoning.enabled: false`
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
98
|
+
* - **On OpenRouter, a model that must think refuses BOTH off switches.**
|
|
99
|
+
* `reasoning.enabled: false` is refused by GLM 5.3 Flash with
|
|
100
|
+
* `400 "Reasoning is mandatory for this endpoint and cannot be disabled."`,
|
|
101
|
+
* which cost one app its onboarding read, and is why nothing here ever emits
|
|
102
|
+
* that field. That was then read as "OpenRouter has no off switch" and `none`
|
|
103
|
+
* was floored to `low` on the strength of it — wrong, because `none` is a
|
|
104
|
+
* member of OpenRouter's own effort enum and the floor bought a thinking pass
|
|
105
|
+
* on every turn that asked for none. But the correction over-reached: `none`
|
|
106
|
+
* is NOT universally safe either. Re-measured 2026-09-09, the same model
|
|
107
|
+
* answers the same 400 to `effort: "none"`. An unsupported level is mapped to
|
|
108
|
+
* the nearest only where the model CAN vary its effort; where thinking is
|
|
109
|
+
* mandatory, `none` is refused outright and the whole call is lost.
|
|
110
|
+
* The honest way to ask for the least thinking on this dialect is to pass no
|
|
111
|
+
* effort at all — see `effortParams`, where the numbers live.
|
|
104
112
|
* - **DeepSeek V4 defaults thinking ON**, so `none` has to be an explicit
|
|
105
113
|
* refusal. That is the case proving OpenRouter's floor is a constraint and
|
|
106
114
|
* not a preference for always thinking.
|
|
@@ -136,9 +144,28 @@ export function effortParams(
|
|
|
136
144
|
case "openrouter":
|
|
137
145
|
// Its own enum runs xhigh > high > medium > low > minimal > none, so `max`
|
|
138
146
|
// has a real tier here and clamping it to `high` throws the top one away —
|
|
139
|
-
// 0.95 of the budget against 0.8.
|
|
140
|
-
//
|
|
141
|
-
//
|
|
147
|
+
// 0.95 of the budget against 0.8.
|
|
148
|
+
//
|
|
149
|
+
// CAUTION, measured 2026-09-09 against z-ai/glm-5.3-flash: the claim that
|
|
150
|
+
// "OpenRouter maps an unsupported level to its nearest rather than
|
|
151
|
+
// refusing" does NOT hold for `none`. That model answers
|
|
152
|
+
// `400 "Reasoning is mandatory for this endpoint and cannot be disabled."`
|
|
153
|
+
// to `reasoning.effort: "none"` exactly as it does to
|
|
154
|
+
// `reasoning.enabled: false` — so on a model that must think, `none` is a
|
|
155
|
+
// refusal and not a floor. Callers that mean "as little as possible"
|
|
156
|
+
// should pass no effort at all rather than `none`, which is why the
|
|
157
|
+
// absent-effort branch above stays load-bearing.
|
|
158
|
+
//
|
|
159
|
+
// Same measurement, same model, one structured-output call three ways:
|
|
160
|
+
//
|
|
161
|
+
// no reasoning field 4,1s · 1 reasoning token
|
|
162
|
+
// effort "minimal" 46,6s · 474 reasoning tokens
|
|
163
|
+
// max_tokens 2000 30,3s · 484 reasoning tokens
|
|
164
|
+
//
|
|
165
|
+
// Its default sat below every level on offer, so naming one RAISED the
|
|
166
|
+
// thinking — an effort is a request, never a cap. Nearly all of the extra
|
|
167
|
+
// time was spent before the first token arrived, so it does not show up as
|
|
168
|
+
// slow streaming; it shows up as a call that looks hung.
|
|
142
169
|
return { reasoning: { effort: effort === "max" ? "xhigh" : (level ?? "none") } };
|
|
143
170
|
case "openai":
|
|
144
171
|
return { reasoning_effort: level ?? "none" };
|
|
@@ -375,7 +402,7 @@ export function createOpenAIProvider(config: OpenAIConfig): Provider {
|
|
|
375
402
|
}
|
|
376
403
|
|
|
377
404
|
for await (const data of streamSse({
|
|
378
|
-
url: apiUrl(baseUrl, "/v1/chat/completions"),
|
|
405
|
+
url: apiUrl(baseUrl, config.path ?? "/v1/chat/completions"),
|
|
379
406
|
headers: { authorization: `Bearer ${config.apiKey}`, ...config.headers },
|
|
380
407
|
body: request,
|
|
381
408
|
provider: id,
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createAnthropicProvider, type AnthropicConfig } from "./anthropic.ts";
|
|
2
|
+
import type { Provider } from "../types.ts";
|
|
3
|
+
|
|
4
|
+
/** Z.ai Coding Plan's Anthropic-compatible API root, not its pay-per-token API. */
|
|
5
|
+
export const ZAI_CODING_BASE_URL = "https://api.z.ai/api/anthropic";
|
|
6
|
+
|
|
7
|
+
export type ZaiCodingConfig = Omit<AnthropicConfig, "baseUrl" | "id" | "bearer">;
|
|
8
|
+
|
|
9
|
+
/** Use a Z.ai Coding Plan key with the shared Messages adapter. The preset owns
|
|
10
|
+
* the endpoint, Bearer auth and the thinking dialect; callers still choose
|
|
11
|
+
* their model and effort. Tool calls, usage and errors use the existing
|
|
12
|
+
* adapter.
|
|
13
|
+
*
|
|
14
|
+
* Dialect notes, measured 2026-09-13 against the live endpoint on
|
|
15
|
+
* `glm-5.3-flash`: an absent thinking field means the MODEL's default —
|
|
16
|
+
* thinking ON — so `effort: "none"` is sent as an explicit
|
|
17
|
+
* `thinking: { type: "disabled" }`; `low`–`max` ride the standard thinking
|
|
18
|
+
* budgets, which the endpoint accepts. Images force a thinking block even
|
|
19
|
+
* under `disabled` (the model's choice, billed as output). */
|
|
20
|
+
export function createZaiCodingProvider(config: ZaiCodingConfig): Provider {
|
|
21
|
+
return createAnthropicProvider({
|
|
22
|
+
...config,
|
|
23
|
+
id: "zai",
|
|
24
|
+
baseUrl: ZAI_CODING_BASE_URL,
|
|
25
|
+
bearer: true,
|
|
26
|
+
explicitNone: true,
|
|
27
|
+
// Coding gateways can allocate a 32K thinking budget themselves. Leave room
|
|
28
|
+
// for the answer; callers can still set a smaller cap for their model.
|
|
29
|
+
maxTokens: config.maxTokens ?? 65_536,
|
|
30
|
+
});
|
|
31
|
+
}
|
package/src/schema.ts
CHANGED
|
@@ -102,7 +102,13 @@ export function clampToSchema(value: unknown, node: unknown): unknown {
|
|
|
102
102
|
*/
|
|
103
103
|
export function schemaPrompt(schema: unknown): string {
|
|
104
104
|
return (
|
|
105
|
-
"Respond with a single JSON object matching this schema. No prose, no code fence
|
|
105
|
+
"Respond with a single JSON object matching this schema. No prose, no code fence.\n" +
|
|
106
|
+
// Nothing pins the decoder when the schema rides in the prompt, so the model
|
|
107
|
+
// is free to pretty-print its reply — and it does, putting a real line break
|
|
108
|
+
// inside a string value, which is invalid JSON and costs the whole response.
|
|
109
|
+
// Saying so is not a guarantee (the caller still has to survive a violation)
|
|
110
|
+
// but this is the only place the model is told at all.
|
|
111
|
+
"Write a line break inside a string value as \\n. A real line break there is invalid JSON.\n" +
|
|
106
112
|
JSON.stringify(schema)
|
|
107
113
|
);
|
|
108
114
|
}
|