diff --git a/dist/index.d.mts b/dist/index.d.mts
index 0055af0c73ad638a59df92fa5d46edc7995da151..f9b8eff0f1ceca6e1077d60117690f93b01fd162 100644
--- a/dist/index.d.mts
+++ b/dist/index.d.mts
@@ -398,6 +398,7 @@ type OpenRouterProviderOptions = {
      * help OpenRouter to monitor and detect abuse.
      */
     user?: string;
+    strictJsonSchema?: boolean;
 };
 type OpenRouterSharedSettings = OpenRouterProviderOptions & {
     /**
diff --git a/dist/index.d.ts b/dist/index.d.ts
index 0055af0c73ad638a59df92fa5d46edc7995da151..f9b8eff0f1ceca6e1077d60117690f93b01fd162 100644
--- a/dist/index.d.ts
+++ b/dist/index.d.ts
@@ -398,6 +398,7 @@ type OpenRouterProviderOptions = {
      * help OpenRouter to monitor and detect abuse.
      */
     user?: string;
+    strictJsonSchema?: boolean;
 };
 type OpenRouterSharedSettings = OpenRouterProviderOptions & {
     /**
diff --git a/dist/index.js b/dist/index.js
index 3c6c1b100611983d32172288e9e40a1e6736320d..5dd9fcc359de1f6009d8fbeebb2343dc5fa5a515 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -2585,7 +2585,8 @@ var OpenRouterProviderOptionsSchema = import_v43.z.object({
     // (e.g., a future format not yet in the enum) is individually dropped
     // rather than causing the entire array to fail parsing.
     reasoning_details: ReasoningDetailArraySchema.optional(),
-    annotations: import_v43.z.array(FileAnnotationSchema).optional()
+    annotations: import_v43.z.array(FileAnnotationSchema).optional(),
+    strictJsonSchema: import_v43.z.boolean().optional()
   }).optional()
 }).optional();
 
@@ -3548,7 +3549,8 @@ var OpenRouterChatLanguageModel = class {
     responseFormat,
     topK,
     tools,
-    toolChoice
+    toolChoice,
+    providerOptions
   }) {
     var _a16, _b16, _c, _d;
     const baseArgs = __spreadValues(__spreadValues({
@@ -3607,7 +3609,8 @@ var OpenRouterChatLanguageModel = class {
             function: {
               name: tool2.name,
               description: tool2.description,
-              parameters: tool2.inputSchema
+              parameters: tool2.inputSchema,
+              strict: providerOptions?.openrouter?.strictJsonSchema
             }
           }, eagerInputStreaming != null && {
             eager_input_streaming: eagerInputStreaming
@@ -3627,7 +3630,7 @@ var OpenRouterChatLanguageModel = class {
     var _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v;
     const providerOptions = options.providerOptions || {};
     const openrouterOptions = providerOptions.openrouter || {};
-    const _a16 = openrouterOptions, { cacheControl } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl"]);
+    const _a16 = openrouterOptions, { cacheControl, strictJsonSchema: _strictJsonSchema } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl", "strictJsonSchema"]);
     const args = __spreadValues(__spreadValues(__spreadValues({}, this.getArgs(options)), restOpenrouterOptions), cacheControl != null && !("cache_control" in restOpenrouterOptions) ? { cache_control: cacheControl } : {});
     const { value: responseValue, responseHeaders } = await postJsonToApi({
       url: this.config.url({
@@ -3822,7 +3825,7 @@ var OpenRouterChatLanguageModel = class {
     var _b16;
     const providerOptions = options.providerOptions || {};
     const openrouterOptions = providerOptions.openrouter || {};
-    const _a16 = openrouterOptions, { cacheControl } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl"]);
+    const _a16 = openrouterOptions, { cacheControl, strictJsonSchema: _strictJsonSchema } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl", "strictJsonSchema"]);
     const args = __spreadValues(__spreadValues(__spreadValues({}, this.getArgs(options)), restOpenrouterOptions), cacheControl != null && !("cache_control" in restOpenrouterOptions) ? { cache_control: cacheControl } : {});
     const { value: response, responseHeaders } = await postJsonToApi({
       url: this.config.url({
@@ -4542,7 +4545,7 @@ var OpenRouterCompletionLanguageModel = class {
   async doGenerate(options) {
     var _a16, _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
     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({
@@ -4617,7 +4620,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 6320306870c5f3ce5439f068b32b2848f6cb0c7e..01862a6c5693445f87397f0639eb6f034ca5909f 100644
--- a/dist/index.mjs
+++ b/dist/index.mjs
@@ -2552,7 +2552,8 @@ var OpenRouterProviderOptionsSchema = z3.object({
     // (e.g., a future format not yet in the enum) is individually dropped
     // rather than causing the entire array to fail parsing.
     reasoning_details: ReasoningDetailArraySchema.optional(),
-    annotations: z3.array(FileAnnotationSchema).optional()
+    annotations: z3.array(FileAnnotationSchema).optional(),
+    strictJsonSchema: z3.boolean().optional()
   }).optional()
 }).optional();
 
@@ -3515,7 +3516,8 @@ var OpenRouterChatLanguageModel = class {
     responseFormat,
     topK,
     tools,
-    toolChoice
+    toolChoice,
+    providerOptions
   }) {
     var _a16, _b16, _c, _d;
     const baseArgs = __spreadValues(__spreadValues({
@@ -3574,7 +3576,8 @@ var OpenRouterChatLanguageModel = class {
             function: {
               name: tool2.name,
               description: tool2.description,
-              parameters: tool2.inputSchema
+              parameters: tool2.inputSchema,
+              strict: providerOptions?.openrouter?.strictJsonSchema
             }
           }, eagerInputStreaming != null && {
             eager_input_streaming: eagerInputStreaming
@@ -3594,7 +3597,7 @@ var OpenRouterChatLanguageModel = class {
     var _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v;
     const providerOptions = options.providerOptions || {};
     const openrouterOptions = providerOptions.openrouter || {};
-    const _a16 = openrouterOptions, { cacheControl } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl"]);
+    const _a16 = openrouterOptions, { cacheControl, strictJsonSchema: _strictJsonSchema } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl", "strictJsonSchema"]);
     const args = __spreadValues(__spreadValues(__spreadValues({}, this.getArgs(options)), restOpenrouterOptions), cacheControl != null && !("cache_control" in restOpenrouterOptions) ? { cache_control: cacheControl } : {});
     const { value: responseValue, responseHeaders } = await postJsonToApi({
       url: this.config.url({
@@ -3789,7 +3792,7 @@ var OpenRouterChatLanguageModel = class {
     var _b16;
     const providerOptions = options.providerOptions || {};
     const openrouterOptions = providerOptions.openrouter || {};
-    const _a16 = openrouterOptions, { cacheControl } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl"]);
+    const _a16 = openrouterOptions, { cacheControl, strictJsonSchema: _strictJsonSchema } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl", "strictJsonSchema"]);
     const args = __spreadValues(__spreadValues(__spreadValues({}, this.getArgs(options)), restOpenrouterOptions), cacheControl != null && !("cache_control" in restOpenrouterOptions) ? { cache_control: cacheControl } : {});
     const { value: response, responseHeaders } = await postJsonToApi({
       url: this.config.url({
@@ -4509,7 +4512,7 @@ var OpenRouterCompletionLanguageModel = class {
   async doGenerate(options) {
     var _a16, _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
     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({
@@ -4584,7 +4587,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({
