@openrouter/ai-sdk-provider 2.10.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,9 @@
2
2
 
3
3
  The [OpenRouter](https://openrouter.ai/) provider for the [Vercel AI SDK](https://sdk.vercel.ai/docs) gives access to over 300 large language models on the OpenRouter chat and completion APIs.
4
4
 
5
- ## Setup for AI SDK v6
5
+ ## Setup for AI SDK v7
6
+
7
+ This release line supports `ai@^7.0.0`, requires Node.js 22 or newer, and is ESM-only.
6
8
 
7
9
  ```bash
8
10
  # For pnpm
@@ -15,6 +17,19 @@ npm install @openrouter/ai-sdk-provider
15
17
  yarn add @openrouter/ai-sdk-provider
16
18
  ```
17
19
 
20
+ ## (LEGACY) Setup for AI SDK v6
21
+
22
+ ```bash
23
+ # For pnpm
24
+ pnpm add @openrouter/ai-sdk-provider@2.9.1
25
+
26
+ # For npm
27
+ npm install @openrouter/ai-sdk-provider@2.9.1
28
+
29
+ # For yarn
30
+ yarn add @openrouter/ai-sdk-provider@2.9.1
31
+ ```
32
+
18
33
  ## (LEGACY) Setup for AI SDK v5
19
34
 
20
35
  ```bash
@@ -383,6 +398,11 @@ const result = await generateText({
383
398
  prompt: 'Hello, how are you today?',
384
399
  });
385
400
 
401
+ // AI SDK v7 standard usage details
402
+ console.log('Input tokens:', result.usage.inputTokens);
403
+ console.log('Cached input tokens:', result.usage.inputTokenDetails.cacheReadTokens);
404
+ console.log('Reasoning tokens:', result.usage.outputTokenDetails.reasoningTokens);
405
+
386
406
  // Provider-specific usage details (available in providerMetadata)
387
407
  if (result.providerMetadata?.openrouter?.usage) {
388
408
  console.log('Cost:', result.providerMetadata.openrouter.usage.cost);
@@ -411,6 +431,10 @@ const result = await generateText({
411
431
  prompt: 'Hello, how are you today?',
412
432
  });
413
433
 
434
+ console.log('Input tokens:', result.usage.inputTokens);
435
+ console.log('Cached input tokens:', result.usage.inputTokenDetails.cacheReadTokens);
436
+ console.log('Reasoning tokens:', result.usage.outputTokenDetails.reasoningTokens);
437
+
414
438
  // Provider-specific BYOK usage details (available in providerMetadata)
415
439
  if (result.providerMetadata?.openrouter?.usage) {
416
440
  const costDetails = result.providerMetadata.openrouter.usage.costDetails;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _ai_sdk_provider from '@ai-sdk/provider';
2
- import { LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3Content, LanguageModelV3FinishReason, LanguageModelV3Usage, SharedV3Warning, LanguageModelV3ResponseMetadata, SharedV3Headers, LanguageModelV3StreamPart, EmbeddingModelV3, SharedV3ProviderMetadata, ImageModelV3, ImageModelV3CallOptions, ImageModelV3ProviderMetadata, ImageModelV3Usage, Experimental_VideoModelV3, Experimental_VideoModelV3CallOptions, Experimental_VideoModelV3VideoData, ProviderV3 } from '@ai-sdk/provider';
3
- export { LanguageModelV3, LanguageModelV3Prompt } from '@ai-sdk/provider';
4
- import { ProviderToolFactory } from '@ai-sdk/provider-utils';
2
+ import { LanguageModelV4, LanguageModelV4CallOptions, LanguageModelV4Content, LanguageModelV4FinishReason, LanguageModelV4Usage, SharedV4Warning, LanguageModelV4ResponseMetadata, SharedV4Headers, LanguageModelV4StreamPart, EmbeddingModelV4, SharedV4ProviderMetadata, ImageModelV4, ImageModelV4CallOptions, ImageModelV4ProviderMetadata, ImageModelV4Usage, Experimental_VideoModelV4, Experimental_VideoModelV4CallOptions, Experimental_VideoModelV4VideoData, ProviderV4 } from '@ai-sdk/provider';
3
+ export { LanguageModelV4, LanguageModelV4Prompt } from '@ai-sdk/provider';
4
+ import { ProviderDefinedToolFactory } from '@ai-sdk/provider-utils';
5
5
  import { z } from 'zod/v4';
6
6
 
7
7
  /**
@@ -552,8 +552,8 @@ type OpenRouterChatConfig = {
552
552
  fetch?: typeof fetch;
553
553
  extraBody?: Record<string, unknown>;
554
554
  };
555
- declare class OpenRouterChatLanguageModel implements LanguageModelV3 {
556
- readonly specificationVersion: "v3";
555
+ declare class OpenRouterChatLanguageModel implements LanguageModelV4 {
556
+ readonly specificationVersion: "v4";
557
557
  readonly provider = "openrouter";
558
558
  readonly defaultObjectGenerationMode: "tool";
559
559
  readonly modelId: OpenRouterChatModelId;
@@ -563,11 +563,11 @@ declare class OpenRouterChatLanguageModel implements LanguageModelV3 {
563
563
  private readonly config;
564
564
  constructor(modelId: OpenRouterChatModelId, settings: OpenRouterChatSettings, config: OpenRouterChatConfig);
565
565
  private getArgs;
566
- doGenerate(options: LanguageModelV3CallOptions): Promise<{
567
- content: Array<LanguageModelV3Content>;
568
- finishReason: LanguageModelV3FinishReason;
569
- usage: LanguageModelV3Usage;
570
- warnings: Array<SharedV3Warning>;
566
+ doGenerate(options: LanguageModelV4CallOptions): Promise<{
567
+ content: Array<LanguageModelV4Content>;
568
+ finishReason: LanguageModelV4FinishReason;
569
+ usage: LanguageModelV4Usage;
570
+ warnings: Array<SharedV4Warning>;
571
571
  providerMetadata?: {
572
572
  openrouter: {
573
573
  provider: string;
@@ -578,19 +578,19 @@ declare class OpenRouterChatLanguageModel implements LanguageModelV3 {
578
578
  request?: {
579
579
  body?: unknown;
580
580
  };
581
- response?: LanguageModelV3ResponseMetadata & {
582
- headers?: SharedV3Headers;
581
+ response?: LanguageModelV4ResponseMetadata & {
582
+ headers?: SharedV4Headers;
583
583
  body?: unknown;
584
584
  };
585
585
  }>;
586
- doStream(options: LanguageModelV3CallOptions): Promise<{
587
- stream: ReadableStream<LanguageModelV3StreamPart>;
588
- warnings: Array<SharedV3Warning>;
586
+ doStream(options: LanguageModelV4CallOptions): Promise<{
587
+ stream: ReadableStream<LanguageModelV4StreamPart>;
588
+ warnings: Array<SharedV4Warning>;
589
589
  request?: {
590
590
  body?: unknown;
591
591
  };
592
- response?: LanguageModelV3ResponseMetadata & {
593
- headers?: SharedV3Headers;
592
+ response?: LanguageModelV4ResponseMetadata & {
593
+ headers?: SharedV4Headers;
594
594
  body?: unknown;
595
595
  };
596
596
  }>;
@@ -607,8 +607,8 @@ type OpenRouterCompletionConfig = {
607
607
  fetch?: typeof fetch;
608
608
  extraBody?: Record<string, unknown>;
609
609
  };
610
- declare class OpenRouterCompletionLanguageModel implements LanguageModelV3 {
611
- readonly specificationVersion: "v3";
610
+ declare class OpenRouterCompletionLanguageModel implements LanguageModelV4 {
611
+ readonly specificationVersion: "v4";
612
612
  readonly provider = "openrouter";
613
613
  readonly modelId: OpenRouterCompletionModelId;
614
614
  readonly supportsImageUrls = true;
@@ -618,8 +618,8 @@ declare class OpenRouterCompletionLanguageModel implements LanguageModelV3 {
618
618
  private readonly config;
619
619
  constructor(modelId: OpenRouterCompletionModelId, settings: OpenRouterCompletionSettings, config: OpenRouterCompletionConfig);
620
620
  private getArgs;
621
- doGenerate(options: LanguageModelV3CallOptions): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>>;
622
- doStream(options: LanguageModelV3CallOptions): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>>;
621
+ doGenerate(options: LanguageModelV4CallOptions): Promise<Awaited<ReturnType<LanguageModelV4['doGenerate']>>>;
622
+ doStream(options: LanguageModelV4CallOptions): Promise<Awaited<ReturnType<LanguageModelV4['doStream']>>>;
623
623
  }
624
624
 
625
625
  type OpenRouterEmbeddingConfig = {
@@ -632,8 +632,8 @@ type OpenRouterEmbeddingConfig = {
632
632
  fetch?: typeof fetch;
633
633
  extraBody?: Record<string, unknown>;
634
634
  };
635
- declare class OpenRouterEmbeddingModel implements EmbeddingModelV3 {
636
- readonly specificationVersion: "v3";
635
+ declare class OpenRouterEmbeddingModel implements EmbeddingModelV4 {
636
+ readonly specificationVersion: "v4";
637
637
  readonly provider = "openrouter";
638
638
  readonly modelId: OpenRouterEmbeddingModelId;
639
639
  readonly settings: OpenRouterEmbeddingSettings;
@@ -650,12 +650,12 @@ declare class OpenRouterEmbeddingModel implements EmbeddingModelV3 {
650
650
  usage?: {
651
651
  tokens: number;
652
652
  };
653
- providerMetadata?: SharedV3ProviderMetadata;
653
+ providerMetadata?: SharedV4ProviderMetadata;
654
654
  response?: {
655
- headers?: SharedV3Headers;
655
+ headers?: SharedV4Headers;
656
656
  body?: unknown;
657
657
  };
658
- warnings: Array<_ai_sdk_provider.SharedV3Warning>;
658
+ warnings: Array<_ai_sdk_provider.SharedV4Warning>;
659
659
  }>;
660
660
  }
661
661
 
@@ -669,24 +669,24 @@ type OpenRouterImageConfig = {
669
669
  fetch?: typeof fetch;
670
670
  extraBody?: Record<string, unknown>;
671
671
  };
672
- declare class OpenRouterImageModel implements ImageModelV3 {
673
- readonly specificationVersion: "v3";
672
+ declare class OpenRouterImageModel implements ImageModelV4 {
673
+ readonly specificationVersion: "v4";
674
674
  readonly provider = "openrouter";
675
675
  readonly modelId: OpenRouterImageModelId;
676
676
  readonly settings: OpenRouterImageSettings;
677
677
  readonly maxImagesPerCall = 10;
678
678
  private readonly config;
679
679
  constructor(modelId: OpenRouterImageModelId, settings: OpenRouterImageSettings, config: OpenRouterImageConfig);
680
- doGenerate(options: ImageModelV3CallOptions): Promise<{
680
+ doGenerate(options: ImageModelV4CallOptions): Promise<{
681
681
  images: Array<string>;
682
- warnings: Array<SharedV3Warning>;
683
- providerMetadata?: ImageModelV3ProviderMetadata;
682
+ warnings: Array<SharedV4Warning>;
683
+ providerMetadata?: ImageModelV4ProviderMetadata;
684
684
  response: {
685
685
  timestamp: Date;
686
686
  modelId: string;
687
687
  headers: Record<string, string> | undefined;
688
688
  };
689
- usage?: ImageModelV3Usage;
689
+ usage?: ImageModelV4Usage;
690
690
  }>;
691
691
  }
692
692
 
@@ -700,18 +700,18 @@ type OpenRouterVideoConfig = {
700
700
  fetch?: typeof fetch;
701
701
  extraBody?: Record<string, unknown>;
702
702
  };
703
- declare class OpenRouterVideoModel implements Experimental_VideoModelV3 {
704
- readonly specificationVersion = "v3";
703
+ declare class OpenRouterVideoModel implements Experimental_VideoModelV4 {
704
+ readonly specificationVersion = "v4";
705
705
  readonly provider = "openrouter";
706
706
  readonly modelId: OpenRouterVideoModelId;
707
707
  readonly settings: OpenRouterVideoSettings;
708
708
  readonly maxVideosPerCall = 1;
709
709
  private readonly config;
710
710
  constructor(modelId: OpenRouterVideoModelId, settings: OpenRouterVideoSettings, config: OpenRouterVideoConfig);
711
- doGenerate(options: Experimental_VideoModelV3CallOptions): Promise<{
712
- videos: Array<Experimental_VideoModelV3VideoData>;
713
- warnings: Array<SharedV3Warning>;
714
- providerMetadata?: SharedV3ProviderMetadata;
711
+ doGenerate(options: Experimental_VideoModelV4CallOptions): Promise<{
712
+ videos: Array<Experimental_VideoModelV4VideoData>;
713
+ warnings: Array<SharedV4Warning>;
714
+ providerMetadata?: SharedV4ProviderMetadata;
715
715
  response: {
716
716
  timestamp: Date;
717
717
  modelId: string;
@@ -734,7 +734,7 @@ type WebSearchToolArgs = {
734
734
  engine?: 'auto' | Engine;
735
735
  };
736
736
 
737
- interface OpenRouterProvider extends ProviderV3 {
737
+ interface OpenRouterProvider extends ProviderV4 {
738
738
  (modelId: OpenRouterChatModelId, settings?: OpenRouterCompletionSettings): OpenRouterCompletionLanguageModel;
739
739
  (modelId: OpenRouterChatModelId, settings?: OpenRouterChatSettings): OpenRouterChatLanguageModel;
740
740
  languageModel(modelId: OpenRouterChatModelId, settings?: OpenRouterCompletionSettings): OpenRouterCompletionLanguageModel;
@@ -773,7 +773,7 @@ interface OpenRouterProvider extends ProviderV3 {
773
773
  *
774
774
  * @see https://openrouter.ai/docs/guides/features/server-tools/web-search
775
775
  */
776
- webSearch: ProviderToolFactory<unknown, WebSearchToolArgs>;
776
+ webSearch: ProviderDefinedToolFactory<unknown, WebSearchToolArgs>;
777
777
  };
778
778
  }
779
779
  interface OpenRouterProviderSettings {