fix: disable strict JSON schema for OpenRouter to support MCP tools (#12415)

* fix: update dependencies and patch files for strict JSON schema compliance

- Updated `@ai-sdk/openai-compatible` to include version 1.0.30 and adjusted related patch files.
- Removed obsolete patch for `@ai-sdk/openai-compatible@1.0.28`.
- Added new patch for `@openrouter/ai-sdk-provider` to support strict JSON schema options.
- Modified `options.ts` to set `strictJsonSchema` to false for OpenAI models.
- Enhanced OpenAI compatible provider options to include `sendReasoning` and `strictJsonSchema`.
- Updated lockfile to reflect changes in patched dependencies and their hashes.

* fix: filter strictJsonSchema from request body in OpenRouter patch

- Destructure and remove strictJsonSchema from openrouterOptions before spreading into request body
- This prevents sending the internal option to the OpenRouter API

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
SuYao 2026-01-10 21:55:09 +08:00 committed by GitHub
parent 622e3f0db6
commit c7c380d706
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 227 additions and 47 deletions

View File

@ -433,7 +433,8 @@
"@img/sharp-linux-x64": "0.34.3", "@img/sharp-linux-x64": "0.34.3",
"@img/sharp-win32-x64": "0.34.3", "@img/sharp-win32-x64": "0.34.3",
"@langchain/core": "1.0.2", "@langchain/core": "1.0.2",
"@ai-sdk/openai-compatible@1.0.27": "1.0.28" "@ai-sdk/openai-compatible@1.0.27": "1.0.28",
"@ai-sdk/openai-compatible@1.0.30": "1.0.28"
}, },
"patchedDependencies": { "patchedDependencies": {
"@napi-rs/system-ocr@1.0.2": "patches/@napi-rs-system-ocr-npm-1.0.2-59e7a78e8b.patch", "@napi-rs/system-ocr@1.0.2": "patches/@napi-rs-system-ocr-npm-1.0.2-59e7a78e8b.patch",
@ -453,8 +454,9 @@
"file-stream-rotator@0.6.1": "patches/file-stream-rotator-npm-0.6.1-eab45fb13d.patch", "file-stream-rotator@0.6.1": "patches/file-stream-rotator-npm-0.6.1-eab45fb13d.patch",
"libsql@0.4.7": "patches/libsql-npm-0.4.7-444e260fb1.patch", "libsql@0.4.7": "patches/libsql-npm-0.4.7-444e260fb1.patch",
"pdf-parse@1.1.1": "patches/pdf-parse-npm-1.1.1-04a6109b2a.patch", "pdf-parse@1.1.1": "patches/pdf-parse-npm-1.1.1-04a6109b2a.patch",
"@ai-sdk/openai-compatible@1.0.28": "patches/@ai-sdk-openai-compatible-npm-1.0.28-5705188855.patch", "@ai-sdk/openai-compatible@1.0.28": "patches/@ai-sdk__openai-compatible@1.0.28.patch",
"@anthropic-ai/claude-agent-sdk@0.1.76": "patches/@anthropic-ai__claude-agent-sdk@0.1.76.patch" "@anthropic-ai/claude-agent-sdk@0.1.76": "patches/@anthropic-ai__claude-agent-sdk@0.1.76.patch",
"@openrouter/ai-sdk-provider": "patches/@openrouter__ai-sdk-provider.patch"
}, },
"onlyBuiltDependencies": [ "onlyBuiltDependencies": [
"@kangfenmao/keyv-storage", "@kangfenmao/keyv-storage",

View File

@ -11,7 +11,7 @@ index 48e2f6263c6ee4c75d7e5c28733e64f6ebe92200..00d0729c4a3cbf9a48e8e1e962c7e2b2
type OpenAICompatibleProviderOptions = z.infer<typeof openaiCompatibleProviderOptions>; type OpenAICompatibleProviderOptions = z.infer<typeof openaiCompatibleProviderOptions>;
diff --git a/dist/index.js b/dist/index.js diff --git a/dist/index.js b/dist/index.js
index da237bb35b7fa8e24b37cd861ee73dfc51cdfc72..b3060fbaf010e30b64df55302807828e5bfe0f9a 100644 index da237bb35b7fa8e24b37cd861ee73dfc51cdfc72..88349c614a69a268a2e4f3b157cb5e328ca1d347 100644
--- a/dist/index.js --- a/dist/index.js
+++ b/dist/index.js +++ b/dist/index.js
@@ -41,7 +41,7 @@ function getOpenAIMetadata(message) { @@ -41,7 +41,7 @@ function getOpenAIMetadata(message) {
@ -52,17 +52,38 @@ index da237bb35b7fa8e24b37cd861ee73dfc51cdfc72..b3060fbaf010e30b64df55302807828e
tool_calls: toolCalls.length > 0 ? toolCalls : void 0, tool_calls: toolCalls.length > 0 ? toolCalls : void 0,
...metadata ...metadata
}); });
@@ -200,7 +208,8 @@ var openaiCompatibleProviderOptions = import_v4.z.object({ @@ -200,7 +208,9 @@ var openaiCompatibleProviderOptions = import_v4.z.object({
/** /**
* Controls the verbosity of the generated text. Defaults to `medium`. * Controls the verbosity of the generated text. Defaults to `medium`.
*/ */
- textVerbosity: import_v4.z.string().optional() - textVerbosity: import_v4.z.string().optional()
+ textVerbosity: import_v4.z.string().optional(), + textVerbosity: import_v4.z.string().optional(),
+ sendReasoning: import_v4.z.boolean().optional() + sendReasoning: import_v4.z.boolean().optional(),
+ strictJsonSchema: z.boolean().optional()
}); });
// src/openai-compatible-error.ts // src/openai-compatible-error.ts
@@ -378,7 +387,7 @@ var OpenAICompatibleChatLanguageModel = class { @@ -225,7 +235,8 @@ var defaultOpenAICompatibleErrorStructure = {
var import_provider2 = require("@ai-sdk/provider");
function prepareTools({
tools,
- toolChoice
+ toolChoice,
+ strictJsonSchema
}) {
tools = (tools == null ? void 0 : tools.length) ? tools : void 0;
const toolWarnings = [];
@@ -242,7 +253,8 @@ function prepareTools({
function: {
name: tool.name,
description: tool.description,
- parameters: tool.inputSchema
+ parameters: tool.inputSchema,
+ strict: strictJsonSchema
}
});
}
@@ -378,7 +390,7 @@ var OpenAICompatibleChatLanguageModel = class {
reasoning_effort: compatibleOptions.reasoningEffort, reasoning_effort: compatibleOptions.reasoningEffort,
verbosity: compatibleOptions.textVerbosity, verbosity: compatibleOptions.textVerbosity,
// messages: // messages:
@ -71,7 +92,7 @@ index da237bb35b7fa8e24b37cd861ee73dfc51cdfc72..b3060fbaf010e30b64df55302807828e
// tools: // tools:
tools: openaiTools, tools: openaiTools,
tool_choice: openaiToolChoice tool_choice: openaiToolChoice
@@ -421,6 +430,17 @@ var OpenAICompatibleChatLanguageModel = class { @@ -421,6 +433,17 @@ var OpenAICompatibleChatLanguageModel = class {
text: reasoning text: reasoning
}); });
} }
@ -89,7 +110,7 @@ index da237bb35b7fa8e24b37cd861ee73dfc51cdfc72..b3060fbaf010e30b64df55302807828e
if (choice.message.tool_calls != null) { if (choice.message.tool_calls != null) {
for (const toolCall of choice.message.tool_calls) { for (const toolCall of choice.message.tool_calls) {
content.push({ content.push({
@@ -598,6 +618,17 @@ var OpenAICompatibleChatLanguageModel = class { @@ -598,6 +621,17 @@ var OpenAICompatibleChatLanguageModel = class {
delta: delta.content delta: delta.content
}); });
} }
@ -107,7 +128,7 @@ index da237bb35b7fa8e24b37cd861ee73dfc51cdfc72..b3060fbaf010e30b64df55302807828e
if (delta.tool_calls != null) { if (delta.tool_calls != null) {
for (const toolCallDelta of delta.tool_calls) { for (const toolCallDelta of delta.tool_calls) {
const index = toolCallDelta.index; const index = toolCallDelta.index;
@@ -765,6 +796,14 @@ var OpenAICompatibleChatResponseSchema = import_v43.z.object({ @@ -765,6 +799,14 @@ var OpenAICompatibleChatResponseSchema = import_v43.z.object({
arguments: import_v43.z.string() arguments: import_v43.z.string()
}) })
}) })
@ -122,7 +143,7 @@ index da237bb35b7fa8e24b37cd861ee73dfc51cdfc72..b3060fbaf010e30b64df55302807828e
).nullish() ).nullish()
}), }),
finish_reason: import_v43.z.string().nullish() finish_reason: import_v43.z.string().nullish()
@@ -795,6 +834,14 @@ var createOpenAICompatibleChatChunkSchema = (errorSchema) => import_v43.z.union( @@ -795,6 +837,14 @@ var createOpenAICompatibleChatChunkSchema = (errorSchema) => import_v43.z.union(
arguments: import_v43.z.string().nullish() arguments: import_v43.z.string().nullish()
}) })
}) })
@ -138,7 +159,7 @@ index da237bb35b7fa8e24b37cd861ee73dfc51cdfc72..b3060fbaf010e30b64df55302807828e
}).nullish(), }).nullish(),
finish_reason: import_v43.z.string().nullish() finish_reason: import_v43.z.string().nullish()
diff --git a/dist/index.mjs b/dist/index.mjs diff --git a/dist/index.mjs b/dist/index.mjs
index a809a7aa0e148bfd43e01dd7b018568b151c8ad5..565b605eeacd9830b2b0e817e58ad0c5700264de 100644 index a809a7aa0e148bfd43e01dd7b018568b151c8ad5..fca65c04000ce4c01fb90e93326ac179c2378055 100644
--- a/dist/index.mjs --- a/dist/index.mjs
+++ b/dist/index.mjs +++ b/dist/index.mjs
@@ -23,7 +23,7 @@ function getOpenAIMetadata(message) { @@ -23,7 +23,7 @@ function getOpenAIMetadata(message) {
@ -179,17 +200,38 @@ index a809a7aa0e148bfd43e01dd7b018568b151c8ad5..565b605eeacd9830b2b0e817e58ad0c5
tool_calls: toolCalls.length > 0 ? toolCalls : void 0, tool_calls: toolCalls.length > 0 ? toolCalls : void 0,
...metadata ...metadata
}); });
@@ -182,7 +190,8 @@ var openaiCompatibleProviderOptions = z.object({ @@ -182,7 +190,9 @@ var openaiCompatibleProviderOptions = z.object({
/** /**
* Controls the verbosity of the generated text. Defaults to `medium`. * Controls the verbosity of the generated text. Defaults to `medium`.
*/ */
- textVerbosity: z.string().optional() - textVerbosity: z.string().optional()
+ textVerbosity: z.string().optional(), + textVerbosity: z.string().optional(),
+ sendReasoning: z.boolean().optional() + sendReasoning: z.boolean().optional(),
+ strictJsonSchema: z.boolean().optional()
}); });
// src/openai-compatible-error.ts // src/openai-compatible-error.ts
@@ -362,7 +371,7 @@ var OpenAICompatibleChatLanguageModel = class { @@ -209,7 +219,8 @@ import {
} from "@ai-sdk/provider";
function prepareTools({
tools,
- toolChoice
+ toolChoice,
+ strictJsonSchema
}) {
tools = (tools == null ? void 0 : tools.length) ? tools : void 0;
const toolWarnings = [];
@@ -226,7 +237,8 @@ function prepareTools({
function: {
name: tool.name,
description: tool.description,
- parameters: tool.inputSchema
+ parameters: tool.inputSchema,
+ strict: strictJsonSchema
}
});
}
@@ -362,7 +374,7 @@ var OpenAICompatibleChatLanguageModel = class {
reasoning_effort: compatibleOptions.reasoningEffort, reasoning_effort: compatibleOptions.reasoningEffort,
verbosity: compatibleOptions.textVerbosity, verbosity: compatibleOptions.textVerbosity,
// messages: // messages:
@ -198,7 +240,7 @@ index a809a7aa0e148bfd43e01dd7b018568b151c8ad5..565b605eeacd9830b2b0e817e58ad0c5
// tools: // tools:
tools: openaiTools, tools: openaiTools,
tool_choice: openaiToolChoice tool_choice: openaiToolChoice
@@ -405,6 +414,17 @@ var OpenAICompatibleChatLanguageModel = class { @@ -405,6 +417,17 @@ var OpenAICompatibleChatLanguageModel = class {
text: reasoning text: reasoning
}); });
} }
@ -216,7 +258,7 @@ index a809a7aa0e148bfd43e01dd7b018568b151c8ad5..565b605eeacd9830b2b0e817e58ad0c5
if (choice.message.tool_calls != null) { if (choice.message.tool_calls != null) {
for (const toolCall of choice.message.tool_calls) { for (const toolCall of choice.message.tool_calls) {
content.push({ content.push({
@@ -582,6 +602,17 @@ var OpenAICompatibleChatLanguageModel = class { @@ -582,6 +605,17 @@ var OpenAICompatibleChatLanguageModel = class {
delta: delta.content delta: delta.content
}); });
} }
@ -234,7 +276,7 @@ index a809a7aa0e148bfd43e01dd7b018568b151c8ad5..565b605eeacd9830b2b0e817e58ad0c5
if (delta.tool_calls != null) { if (delta.tool_calls != null) {
for (const toolCallDelta of delta.tool_calls) { for (const toolCallDelta of delta.tool_calls) {
const index = toolCallDelta.index; const index = toolCallDelta.index;
@@ -749,6 +780,14 @@ var OpenAICompatibleChatResponseSchema = z3.object({ @@ -749,6 +783,14 @@ var OpenAICompatibleChatResponseSchema = z3.object({
arguments: z3.string() arguments: z3.string()
}) })
}) })
@ -249,7 +291,7 @@ index a809a7aa0e148bfd43e01dd7b018568b151c8ad5..565b605eeacd9830b2b0e817e58ad0c5
).nullish() ).nullish()
}), }),
finish_reason: z3.string().nullish() finish_reason: z3.string().nullish()
@@ -779,6 +818,14 @@ var createOpenAICompatibleChatChunkSchema = (errorSchema) => z3.union([ @@ -779,6 +821,14 @@ var createOpenAICompatibleChatChunkSchema = (errorSchema) => z3.union([
arguments: z3.string().nullish() arguments: z3.string().nullish()
}) })
}) })

View File

@ -0,0 +1,140 @@
diff --git a/dist/index.js b/dist/index.js
index f33510a50d11a2cb92a90ea70cc0ac84c89f29b9..db0af7e2cc05c47baeb29c0a3974a155316fbd05 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1050,7 +1050,8 @@ var OpenRouterProviderMetadataSchema = import_v43.z.object({
var OpenRouterProviderOptionsSchema = import_v43.z.object({
openrouter: import_v43.z.object({
reasoning_details: import_v43.z.array(ReasoningDetailUnionSchema).optional(),
- annotations: import_v43.z.array(FileAnnotationSchema).optional()
+ annotations: import_v43.z.array(FileAnnotationSchema).optional(),
+ strictJsonSchema: import_v43.z.boolean().optional()
}).optional()
}).optional();
@@ -1658,7 +1659,8 @@ var OpenRouterChatLanguageModel = class {
responseFormat,
topK,
tools,
- toolChoice
+ toolChoice,
+ providerOptions
}) {
var _a15;
const baseArgs = __spreadValues(__spreadValues({
@@ -1712,7 +1714,8 @@ var OpenRouterChatLanguageModel = class {
function: {
name: tool.name,
description: tool.description,
- parameters: tool.inputSchema
+ parameters: tool.inputSchema,
+ strict: providerOptions?.openrouter?.strictJsonSchema
}
}));
return __spreadProps(__spreadValues({}, baseArgs), {
@@ -1725,7 +1728,7 @@ var OpenRouterChatLanguageModel = class {
async doGenerate(options) {
var _a15, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w;
const providerOptions = options.providerOptions || {};
- const openrouterOptions = providerOptions.openrouter || {};
+ const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
const { value: responseValue, responseHeaders } = await postJsonToApi({
url: this.config.url({
@@ -1931,7 +1934,7 @@ var OpenRouterChatLanguageModel = class {
async doStream(options) {
var _a15;
const providerOptions = options.providerOptions || {};
- const openrouterOptions = providerOptions.openrouter || {};
+ const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
const { value: response, responseHeaders } = await postJsonToApi({
url: this.config.url({
@@ -2564,7 +2567,7 @@ var OpenRouterCompletionLanguageModel = class {
async doGenerate(options) {
var _a15, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
const providerOptions = options.providerOptions || {};
- const openrouterOptions = providerOptions.openrouter || {};
+ const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
const { value: response, responseHeaders } = await postJsonToApi({
url: this.config.url({
@@ -2623,7 +2626,7 @@ var OpenRouterCompletionLanguageModel = class {
}
async doStream(options) {
const providerOptions = options.providerOptions || {};
- const openrouterOptions = providerOptions.openrouter || {};
+ const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
const { value: response, responseHeaders } = await postJsonToApi({
url: this.config.url({
diff --git a/dist/index.mjs b/dist/index.mjs
index 8a688331b88b4af738ee4ca8062b5f24124d3d81..a2aa299a44352addc26f8891d839ea31a2150ee2 100644
--- a/dist/index.mjs
+++ b/dist/index.mjs
@@ -1015,7 +1015,8 @@ var OpenRouterProviderMetadataSchema = z3.object({
var OpenRouterProviderOptionsSchema = z3.object({
openrouter: z3.object({
reasoning_details: z3.array(ReasoningDetailUnionSchema).optional(),
- annotations: z3.array(FileAnnotationSchema).optional()
+ annotations: z3.array(FileAnnotationSchema).optional(),
+ strictJsonSchema: z3.boolean().optional()
}).optional()
}).optional();
@@ -1623,7 +1624,8 @@ var OpenRouterChatLanguageModel = class {
responseFormat,
topK,
tools,
- toolChoice
+ toolChoice,
+ providerOptions
}) {
var _a15;
const baseArgs = __spreadValues(__spreadValues({
@@ -1677,7 +1679,8 @@ var OpenRouterChatLanguageModel = class {
function: {
name: tool.name,
description: tool.description,
- parameters: tool.inputSchema
+ parameters: tool.inputSchema,
+ strict: providerOptions?.openrouter?.strictJsonSchema
}
}));
return __spreadProps(__spreadValues({}, baseArgs), {
@@ -1690,7 +1693,7 @@ var OpenRouterChatLanguageModel = class {
async doGenerate(options) {
var _a15, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w;
const providerOptions = options.providerOptions || {};
- const openrouterOptions = providerOptions.openrouter || {};
+ const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
const { value: responseValue, responseHeaders } = await postJsonToApi({
url: this.config.url({
@@ -1896,7 +1899,7 @@ var OpenRouterChatLanguageModel = class {
async doStream(options) {
var _a15;
const providerOptions = options.providerOptions || {};
- const openrouterOptions = providerOptions.openrouter || {};
+ const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
const { value: response, responseHeaders } = await postJsonToApi({
url: this.config.url({
@@ -2529,7 +2532,7 @@ var OpenRouterCompletionLanguageModel = class {
async doGenerate(options) {
var _a15, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
const providerOptions = options.providerOptions || {};
- const openrouterOptions = providerOptions.openrouter || {};
+ const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
const { value: response, responseHeaders } = await postJsonToApi({
url: this.config.url({
@@ -2588,7 +2591,7 @@ var OpenRouterCompletionLanguageModel = class {
}
async doStream(options) {
const providerOptions = options.providerOptions || {};
- const openrouterOptions = providerOptions.openrouter || {};
+ const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
const { value: response, responseHeaders } = await postJsonToApi({
url: this.config.url({

42
pnpm-lock.yaml generated
View File

@ -23,14 +23,15 @@ overrides:
'@img/sharp-win32-x64': 0.34.3 '@img/sharp-win32-x64': 0.34.3
'@langchain/core': 1.0.2 '@langchain/core': 1.0.2
'@ai-sdk/openai-compatible@1.0.27': 1.0.28 '@ai-sdk/openai-compatible@1.0.27': 1.0.28
'@ai-sdk/openai-compatible@1.0.30': 1.0.28
patchedDependencies: patchedDependencies:
'@ai-sdk/google@2.0.49': '@ai-sdk/google@2.0.49':
hash: 279e9d43f675e4b979b32b78954dd37acc3026aa36ae2dd7701b5bad2f061522 hash: 279e9d43f675e4b979b32b78954dd37acc3026aa36ae2dd7701b5bad2f061522
path: patches/@ai-sdk-google-npm-2.0.49-84720f41bd.patch path: patches/@ai-sdk-google-npm-2.0.49-84720f41bd.patch
'@ai-sdk/openai-compatible@1.0.28': '@ai-sdk/openai-compatible@1.0.28':
hash: 66f6605ef3f852d8f2b638a1d64b138eb8b2ad34ca6f331a0496c1d1379379c1 hash: 5ea49b4f07636a8e4630097e67e2787779ba7e933bd0459f81b1803cb125edda
path: patches/@ai-sdk-openai-compatible-npm-1.0.28-5705188855.patch path: patches/@ai-sdk__openai-compatible@1.0.28.patch
'@ai-sdk/openai@2.0.85': '@ai-sdk/openai@2.0.85':
hash: f2077f4759520d1de69b164dfd8adca1a9ace9de667e35cb0e55e812ce2ac13b hash: f2077f4759520d1de69b164dfd8adca1a9ace9de667e35cb0e55e812ce2ac13b
path: patches/@ai-sdk-openai-npm-2.0.85-27483d1d6a.patch path: patches/@ai-sdk-openai-npm-2.0.85-27483d1d6a.patch
@ -52,6 +53,9 @@ patchedDependencies:
'@napi-rs/system-ocr@1.0.2': '@napi-rs/system-ocr@1.0.2':
hash: aa1a73e445ee644774745b620589bb99d85bee6c95cc2a91fe9137e580da5bde hash: aa1a73e445ee644774745b620589bb99d85bee6c95cc2a91fe9137e580da5bde
path: patches/@napi-rs-system-ocr-npm-1.0.2-59e7a78e8b.patch path: patches/@napi-rs-system-ocr-npm-1.0.2-59e7a78e8b.patch
'@openrouter/ai-sdk-provider':
hash: 508e8e662b8547de93410cb7c3b1336077f34c6bf79c520ef5273962ea777c52
path: patches/@openrouter__ai-sdk-provider.patch
'@tiptap/extension-drag-handle@3.2.0': '@tiptap/extension-drag-handle@3.2.0':
hash: 8432665d4553fb9ba8ff2a126a9181c3ccfee06ae57688aa14f65aa560e52fce hash: 8432665d4553fb9ba8ff2a126a9181c3ccfee06ae57688aa14f65aa560e52fce
path: patches/@tiptap-extension-drag-handle-npm-3.2.0-5a9ebff7c9.patch path: patches/@tiptap-extension-drag-handle-npm-3.2.0-5a9ebff7c9.patch
@ -357,7 +361,7 @@ importers:
version: 2.3.0(encoding@0.1.13) version: 2.3.0(encoding@0.1.13)
'@openrouter/ai-sdk-provider': '@openrouter/ai-sdk-provider':
specifier: ^1.2.8 specifier: ^1.2.8
version: 1.5.4(ai@5.0.117(zod@4.3.4))(zod@4.3.4) version: 1.5.4(patch_hash=508e8e662b8547de93410cb7c3b1336077f34c6bf79c520ef5273962ea777c52)(ai@5.0.117(zod@4.3.4))(zod@4.3.4)
'@opentelemetry/api': '@opentelemetry/api':
specifier: ^1.9.0 specifier: ^1.9.0
version: 1.9.0 version: 1.9.0
@ -1195,7 +1199,7 @@ importers:
version: 2.0.85(patch_hash=f2077f4759520d1de69b164dfd8adca1a9ace9de667e35cb0e55e812ce2ac13b)(zod@4.3.5) version: 2.0.85(patch_hash=f2077f4759520d1de69b164dfd8adca1a9ace9de667e35cb0e55e812ce2ac13b)(zod@4.3.5)
'@ai-sdk/openai-compatible': '@ai-sdk/openai-compatible':
specifier: 1.0.28 specifier: 1.0.28
version: 1.0.28(patch_hash=66f6605ef3f852d8f2b638a1d64b138eb8b2ad34ca6f331a0496c1d1379379c1)(zod@4.3.5) version: 1.0.28(patch_hash=5ea49b4f07636a8e4630097e67e2787779ba7e933bd0459f81b1803cb125edda)(zod@4.3.5)
'@ai-sdk/provider': '@ai-sdk/provider':
specifier: ^2.0.0 specifier: ^2.0.0
version: 2.0.1 version: 2.0.1
@ -1235,7 +1239,7 @@ importers:
version: 2.0.85(patch_hash=f2077f4759520d1de69b164dfd8adca1a9ace9de667e35cb0e55e812ce2ac13b)(zod@4.3.4) version: 2.0.85(patch_hash=f2077f4759520d1de69b164dfd8adca1a9ace9de667e35cb0e55e812ce2ac13b)(zod@4.3.4)
'@ai-sdk/openai-compatible': '@ai-sdk/openai-compatible':
specifier: 1.0.28 specifier: 1.0.28
version: 1.0.28(patch_hash=66f6605ef3f852d8f2b638a1d64b138eb8b2ad34ca6f331a0496c1d1379379c1)(zod@4.3.4) version: 1.0.28(patch_hash=5ea49b4f07636a8e4630097e67e2787779ba7e933bd0459f81b1803cb125edda)(zod@4.3.4)
'@ai-sdk/provider': '@ai-sdk/provider':
specifier: ^2.0.0 specifier: ^2.0.0
version: 2.0.1 version: 2.0.1
@ -1398,12 +1402,6 @@ packages:
peerDependencies: peerDependencies:
zod: ^3.25.76 || ^4.1.8 zod: ^3.25.76 || ^4.1.8
'@ai-sdk/openai-compatible@1.0.30':
resolution: {integrity: sha512-thubwhRtv9uicAxSWwNpinM7hiL/0CkhL/ymPaHuKvI494J7HIzn8KQZQ2ymRz284WTIZnI7VMyyejxW4RMM6w==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
'@ai-sdk/openai@2.0.85': '@ai-sdk/openai@2.0.85':
resolution: {integrity: sha512-3pzr7qVhsOXwjPAfmvFNZz3sRWCuyMOc3GgLHe7sWY0t8J4hA5mwQ4LISTKYI3iIr8IXzAQn9MUrC8Hiji9RpA==} resolution: {integrity: sha512-3pzr7qVhsOXwjPAfmvFNZz3sRWCuyMOc3GgLHe7sWY0t8J4hA5mwQ4LISTKYI3iIr8IXzAQn9MUrC8Hiji9RpA==}
engines: {node: '>=18'} engines: {node: '>=18'}
@ -12320,7 +12318,7 @@ snapshots:
'@ai-sdk/cerebras@1.0.34(zod@4.3.4)': '@ai-sdk/cerebras@1.0.34(zod@4.3.4)':
dependencies: dependencies:
'@ai-sdk/openai-compatible': 1.0.30(zod@4.3.4) '@ai-sdk/openai-compatible': 1.0.28(patch_hash=5ea49b4f07636a8e4630097e67e2787779ba7e933bd0459f81b1803cb125edda)(zod@4.3.4)
'@ai-sdk/provider': 2.0.1 '@ai-sdk/provider': 2.0.1
'@ai-sdk/provider-utils': 3.0.20(zod@4.3.4) '@ai-sdk/provider-utils': 3.0.20(zod@4.3.4)
zod: 4.3.4 zod: 4.3.4
@ -12376,7 +12374,7 @@ snapshots:
'@ai-sdk/huggingface@0.0.10(zod@4.3.4)': '@ai-sdk/huggingface@0.0.10(zod@4.3.4)':
dependencies: dependencies:
'@ai-sdk/openai-compatible': 1.0.28(patch_hash=66f6605ef3f852d8f2b638a1d64b138eb8b2ad34ca6f331a0496c1d1379379c1)(zod@4.3.4) '@ai-sdk/openai-compatible': 1.0.28(patch_hash=5ea49b4f07636a8e4630097e67e2787779ba7e933bd0459f81b1803cb125edda)(zod@4.3.4)
'@ai-sdk/provider': 2.0.0 '@ai-sdk/provider': 2.0.0
'@ai-sdk/provider-utils': 3.0.17(zod@4.3.4) '@ai-sdk/provider-utils': 3.0.17(zod@4.3.4)
zod: 4.3.4 zod: 4.3.4
@ -12387,24 +12385,18 @@ snapshots:
'@ai-sdk/provider-utils': 3.0.20(zod@4.3.4) '@ai-sdk/provider-utils': 3.0.20(zod@4.3.4)
zod: 4.3.4 zod: 4.3.4
'@ai-sdk/openai-compatible@1.0.28(patch_hash=66f6605ef3f852d8f2b638a1d64b138eb8b2ad34ca6f331a0496c1d1379379c1)(zod@4.3.4)': '@ai-sdk/openai-compatible@1.0.28(patch_hash=5ea49b4f07636a8e4630097e67e2787779ba7e933bd0459f81b1803cb125edda)(zod@4.3.4)':
dependencies: dependencies:
'@ai-sdk/provider': 2.0.0 '@ai-sdk/provider': 2.0.0
'@ai-sdk/provider-utils': 3.0.18(zod@4.3.4) '@ai-sdk/provider-utils': 3.0.18(zod@4.3.4)
zod: 4.3.4 zod: 4.3.4
'@ai-sdk/openai-compatible@1.0.28(patch_hash=66f6605ef3f852d8f2b638a1d64b138eb8b2ad34ca6f331a0496c1d1379379c1)(zod@4.3.5)': '@ai-sdk/openai-compatible@1.0.28(patch_hash=5ea49b4f07636a8e4630097e67e2787779ba7e933bd0459f81b1803cb125edda)(zod@4.3.5)':
dependencies: dependencies:
'@ai-sdk/provider': 2.0.0 '@ai-sdk/provider': 2.0.0
'@ai-sdk/provider-utils': 3.0.18(zod@4.3.5) '@ai-sdk/provider-utils': 3.0.18(zod@4.3.5)
zod: 4.3.5 zod: 4.3.5
'@ai-sdk/openai-compatible@1.0.30(zod@4.3.4)':
dependencies:
'@ai-sdk/provider': 2.0.1
'@ai-sdk/provider-utils': 3.0.20(zod@4.3.4)
zod: 4.3.4
'@ai-sdk/openai@2.0.85(patch_hash=f2077f4759520d1de69b164dfd8adca1a9ace9de667e35cb0e55e812ce2ac13b)(zod@4.3.4)': '@ai-sdk/openai@2.0.85(patch_hash=f2077f4759520d1de69b164dfd8adca1a9ace9de667e35cb0e55e812ce2ac13b)(zod@4.3.4)':
dependencies: dependencies:
'@ai-sdk/provider': 2.0.0 '@ai-sdk/provider': 2.0.0
@ -12499,14 +12491,14 @@ snapshots:
'@ai-sdk/xai@2.0.36(zod@4.3.4)': '@ai-sdk/xai@2.0.36(zod@4.3.4)':
dependencies: dependencies:
'@ai-sdk/openai-compatible': 1.0.28(patch_hash=66f6605ef3f852d8f2b638a1d64b138eb8b2ad34ca6f331a0496c1d1379379c1)(zod@4.3.4) '@ai-sdk/openai-compatible': 1.0.28(patch_hash=5ea49b4f07636a8e4630097e67e2787779ba7e933bd0459f81b1803cb125edda)(zod@4.3.4)
'@ai-sdk/provider': 2.0.0 '@ai-sdk/provider': 2.0.0
'@ai-sdk/provider-utils': 3.0.17(zod@4.3.4) '@ai-sdk/provider-utils': 3.0.17(zod@4.3.4)
zod: 4.3.4 zod: 4.3.4
'@ai-sdk/xai@2.0.43(zod@4.3.4)': '@ai-sdk/xai@2.0.43(zod@4.3.4)':
dependencies: dependencies:
'@ai-sdk/openai-compatible': 1.0.30(zod@4.3.4) '@ai-sdk/openai-compatible': 1.0.28(patch_hash=5ea49b4f07636a8e4630097e67e2787779ba7e933bd0459f81b1803cb125edda)(zod@4.3.4)
'@ai-sdk/provider': 2.0.1 '@ai-sdk/provider': 2.0.1
'@ai-sdk/provider-utils': 3.0.20(zod@4.3.4) '@ai-sdk/provider-utils': 3.0.20(zod@4.3.4)
zod: 4.3.4 zod: 4.3.4
@ -15159,7 +15151,7 @@ snapshots:
'@open-draft/until@2.1.0': {} '@open-draft/until@2.1.0': {}
'@openrouter/ai-sdk-provider@1.5.4(ai@5.0.117(zod@4.3.4))(zod@4.3.4)': '@openrouter/ai-sdk-provider@1.5.4(patch_hash=508e8e662b8547de93410cb7c3b1336077f34c6bf79c520ef5273962ea777c52)(ai@5.0.117(zod@4.3.4))(zod@4.3.4)':
dependencies: dependencies:
'@openrouter/sdk': 0.1.27 '@openrouter/sdk': 0.1.27
ai: 5.0.117(zod@4.3.4) ai: 5.0.117(zod@4.3.4)
@ -15276,7 +15268,7 @@ snapshots:
'@opeoginni/github-copilot-openai-compatible@0.1.22(zod@4.3.4)': '@opeoginni/github-copilot-openai-compatible@0.1.22(zod@4.3.4)':
dependencies: dependencies:
'@ai-sdk/openai': 2.0.85(patch_hash=f2077f4759520d1de69b164dfd8adca1a9ace9de667e35cb0e55e812ce2ac13b)(zod@4.3.4) '@ai-sdk/openai': 2.0.85(patch_hash=f2077f4759520d1de69b164dfd8adca1a9ace9de667e35cb0e55e812ce2ac13b)(zod@4.3.4)
'@ai-sdk/openai-compatible': 1.0.28(patch_hash=66f6605ef3f852d8f2b638a1d64b138eb8b2ad34ca6f331a0496c1d1379379c1)(zod@4.3.4) '@ai-sdk/openai-compatible': 1.0.28(patch_hash=5ea49b4f07636a8e4630097e67e2787779ba7e933bd0459f81b1803cb125edda)(zod@4.3.4)
'@ai-sdk/provider': 2.1.0-beta.5 '@ai-sdk/provider': 2.1.0-beta.5
'@ai-sdk/provider-utils': 3.0.20(zod@4.3.4) '@ai-sdk/provider-utils': 3.0.20(zod@4.3.4)
transitivePeerDependencies: transitivePeerDependencies:

View File

@ -653,6 +653,10 @@ function buildGenericProviderOptions(
} }
} }
if (isOpenAIModel(model)) {
providerOptions.strictJsonSchema = false
}
return { return {
[providerId]: providerOptions [providerId]: providerOptions
} }