sarvam-ai-sdk 0.2.0-beta → 0.3.0-beta

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
@@ -1,6 +1,10 @@
1
+ <a href="https://github.com/rajatsandeepsen/sarvam-ai-sdk">
2
+ <img alt="cover" src="https://github.com/rajatsandeepsen/sarvam-ai-sdk/blob/master/cover.png?raw=true" />
3
+ </a>
4
+
1
5
  # AI SDK - Sarvam Provider
2
6
 
3
- The **[Sarvam provider](https://v5.ai-sdk.dev/providers/ai-sdk-providers/sarvam)** for the [AI SDK](https://v5.ai-sdk.dev/docs)
7
+ The **[Sarvam provider](https://v6.ai-sdk.dev/providers/community-providers/sarvam)** for the [AI SDK](https://v6.ai-sdk.dev/docs)
4
8
  contains language model support for the Sarvam chat completion, Text-to-Speech and Speech-to-Text APIs.
5
9
 
6
10
  ## Setup
@@ -8,11 +12,11 @@ contains language model support for the Sarvam chat completion, Text-to-Speech a
8
12
  The **[Sarvam](http://sarvam.ai)** provider is available in the `sarvam-ai-sdk` module. You can install it with
9
13
 
10
14
  ```bash
11
- npm i sarvam-ai-sdk ai@5
15
+ npm i sarvam-ai-sdk ai@6
12
16
  ```
13
17
 
14
18
  > [!WARNING]
15
- > This package only works with Vercel AI-SDK v5, not v6 or latest v7. Make sure to install `ai@5` in your project.
19
+ > This package only works with Vercel AI-SDK v6, not v7. Make sure to install `ai@6` in your project.
16
20
 
17
21
  ## Provider Instance
18
22
 
@@ -238,4 +242,4 @@ sarvam.speechTranslation("saaras:v3");
238
242
 
239
243
  ## Documentation
240
244
 
241
- Please check out the **[Sarvam provider documentation](https://v5.ai-sdk.dev/providers/ai-sdk-providers/sarvam)** and **[Sarvam API documentation](https://docs.sarvam.ai)** for more information.
245
+ Please check out the **[Sarvam provider documentation](https://v6.ai-sdk.dev/providers/community-providers/sarvam)** and **[Sarvam API documentation](https://docs.sarvam.ai)** for more information.
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { FetchFunction } from "@ai-sdk/provider-utils";
2
- import { LanguageModelV2, SpeechModelV2, TranscriptionModelV2 } from "@ai-sdk/provider";
2
+ import { LanguageModelV3, SpeechModelV3, TranscriptionModelV3 } from "@ai-sdk/provider";
3
3
  import z$1, { z } from "zod";
4
4
 
5
5
  //#region src/config.d.ts
@@ -471,7 +471,7 @@ type SarvamProvider = {
471
471
  * prompt: "Translate this to malayalam: 'Keep cooking, guys'",
472
472
  * });
473
473
  */
474
- (modelId: ChatModelId, settings?: ChatSettings): LanguageModelV2;
474
+ (modelId: ChatModelId, settings?: ChatSettings): LanguageModelV3;
475
475
  /**
476
476
  * Creates an Sarvam chat model for text generation.
477
477
  *
@@ -481,7 +481,7 @@ type SarvamProvider = {
481
481
  * prompt: "Translate this to malayalam: 'Keep cooking, guys'",
482
482
  * });
483
483
  */
484
- languageModel(modelId: ChatModelId, settings?: ChatSettings): LanguageModelV2;
484
+ languageModel(modelId: ChatModelId, settings?: ChatSettings): LanguageModelV3;
485
485
  /**
486
486
  * Creates a Sarvam model for chat.
487
487
  *
@@ -491,7 +491,7 @@ type SarvamProvider = {
491
491
  * prompt: "Translate this to malayalam: 'Keep cooking, guys'",
492
492
  * });
493
493
  */
494
- chat(modelId: ChatModelId, settings?: ChatSettings): LanguageModelV2;
494
+ chat(modelId: ChatModelId, settings?: ChatSettings): LanguageModelV3;
495
495
  /**
496
496
  * Creates a Sarvam model for transcription.
497
497
  *
@@ -508,7 +508,7 @@ type SarvamProvider = {
508
508
  *
509
509
  * @default unknown
510
510
  */
511
- languageCode?: (T extends "saaras:v3" ? MoreSarvamLanguageCode : never) | SarvamLanguageCode | "unknown", settings?: TranscriptionSettings<T>): TranscriptionModelV2;
511
+ languageCode?: (T extends "saaras:v3" ? MoreSarvamLanguageCode : never) | SarvamLanguageCode | "unknown", settings?: TranscriptionSettings<T>): TranscriptionModelV3;
512
512
  /**
513
513
  * Creates a Sarvam model for Speech translation.
514
514
  *
@@ -518,7 +518,7 @@ type SarvamProvider = {
518
518
  * audio: await readFile("./audio.wav"),
519
519
  * });
520
520
  */
521
- speechTranslation<T extends SpeechTranslationModelId>(modelId: T, settings?: SpeechTranslationSettings): TranscriptionModelV2;
521
+ speechTranslation<T extends SpeechTranslationModelId>(modelId: T, settings?: SpeechTranslationSettings): TranscriptionModelV3;
522
522
  /**
523
523
  * Creates a Sarvam model for speech.
524
524
  * @example
@@ -529,7 +529,7 @@ type SarvamProvider = {
529
529
  *
530
530
  * await writeFile("./audio.wav", Buffer.from(audio.base64, "base64"););
531
531
  */
532
- speech<T extends SpeechModelId>(modelId: T, languageCode: SarvamLanguageCode, settings?: SpeechSettings<T>): SpeechModelV2;
532
+ speech<T extends SpeechModelId>(modelId: T, languageCode: SarvamLanguageCode, settings?: SpeechSettings<T>): SpeechModelV3;
533
533
  /**
534
534
  * Creates an Sarvam model for transliterate.
535
535
  *
@@ -542,7 +542,7 @@ type SarvamProvider = {
542
542
  * prompt: "eda mone, happy alle?",
543
543
  * });
544
544
  */
545
- transliterate<T extends SarvamLanguageCode>(settings: TransliterateSettings<false, T>): LanguageModelV2;
545
+ transliterate<T extends SarvamLanguageCode>(settings: TransliterateSettings<false, T>): LanguageModelV3;
546
546
  /**
547
547
  * Creates an Sarvam model for translation.
548
548
  *
@@ -555,7 +555,7 @@ type SarvamProvider = {
555
555
  * prompt: "ഇതൊക്കെ ശ്രദ്ധിക്കണ്ടേ അംബാനെ?",
556
556
  * });
557
557
  */
558
- translation<T extends TranslationModelId>(model: T, settings: TranslationSettings<T>): LanguageModelV2;
558
+ translation<T extends TranslationModelId>(model: T, settings: TranslationSettings<T>): LanguageModelV3;
559
559
  /**
560
560
  * Creates an Sarvam model for language identification.
561
561
  *
@@ -565,7 +565,7 @@ type SarvamProvider = {
565
565
  * prompt: "ബുദ്ധിയാണ് സാറേ ഇവൻ്റെ മെയിൻ",
566
566
  * });
567
567
  */
568
- languageIdentification(): LanguageModelV2;
568
+ languageIdentification(): LanguageModelV3;
569
569
  };
570
570
  //#endregion
571
571
  //#region src/provider.d.ts
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { FetchFunction } from "@ai-sdk/provider-utils";
2
2
  import z$1, { z } from "zod";
3
- import { LanguageModelV2, SpeechModelV2, TranscriptionModelV2 } from "@ai-sdk/provider";
3
+ import { LanguageModelV3, SpeechModelV3, TranscriptionModelV3 } from "@ai-sdk/provider";
4
4
 
5
5
  //#region src/config.d.ts
6
6
 
@@ -471,7 +471,7 @@ type SarvamProvider = {
471
471
  * prompt: "Translate this to malayalam: 'Keep cooking, guys'",
472
472
  * });
473
473
  */
474
- (modelId: ChatModelId, settings?: ChatSettings): LanguageModelV2;
474
+ (modelId: ChatModelId, settings?: ChatSettings): LanguageModelV3;
475
475
  /**
476
476
  * Creates an Sarvam chat model for text generation.
477
477
  *
@@ -481,7 +481,7 @@ type SarvamProvider = {
481
481
  * prompt: "Translate this to malayalam: 'Keep cooking, guys'",
482
482
  * });
483
483
  */
484
- languageModel(modelId: ChatModelId, settings?: ChatSettings): LanguageModelV2;
484
+ languageModel(modelId: ChatModelId, settings?: ChatSettings): LanguageModelV3;
485
485
  /**
486
486
  * Creates a Sarvam model for chat.
487
487
  *
@@ -491,7 +491,7 @@ type SarvamProvider = {
491
491
  * prompt: "Translate this to malayalam: 'Keep cooking, guys'",
492
492
  * });
493
493
  */
494
- chat(modelId: ChatModelId, settings?: ChatSettings): LanguageModelV2;
494
+ chat(modelId: ChatModelId, settings?: ChatSettings): LanguageModelV3;
495
495
  /**
496
496
  * Creates a Sarvam model for transcription.
497
497
  *
@@ -508,7 +508,7 @@ type SarvamProvider = {
508
508
  *
509
509
  * @default unknown
510
510
  */
511
- languageCode?: (T extends "saaras:v3" ? MoreSarvamLanguageCode : never) | SarvamLanguageCode | "unknown", settings?: TranscriptionSettings<T>): TranscriptionModelV2;
511
+ languageCode?: (T extends "saaras:v3" ? MoreSarvamLanguageCode : never) | SarvamLanguageCode | "unknown", settings?: TranscriptionSettings<T>): TranscriptionModelV3;
512
512
  /**
513
513
  * Creates a Sarvam model for Speech translation.
514
514
  *
@@ -518,7 +518,7 @@ type SarvamProvider = {
518
518
  * audio: await readFile("./audio.wav"),
519
519
  * });
520
520
  */
521
- speechTranslation<T extends SpeechTranslationModelId>(modelId: T, settings?: SpeechTranslationSettings): TranscriptionModelV2;
521
+ speechTranslation<T extends SpeechTranslationModelId>(modelId: T, settings?: SpeechTranslationSettings): TranscriptionModelV3;
522
522
  /**
523
523
  * Creates a Sarvam model for speech.
524
524
  * @example
@@ -529,7 +529,7 @@ type SarvamProvider = {
529
529
  *
530
530
  * await writeFile("./audio.wav", Buffer.from(audio.base64, "base64"););
531
531
  */
532
- speech<T extends SpeechModelId>(modelId: T, languageCode: SarvamLanguageCode, settings?: SpeechSettings<T>): SpeechModelV2;
532
+ speech<T extends SpeechModelId>(modelId: T, languageCode: SarvamLanguageCode, settings?: SpeechSettings<T>): SpeechModelV3;
533
533
  /**
534
534
  * Creates an Sarvam model for transliterate.
535
535
  *
@@ -542,7 +542,7 @@ type SarvamProvider = {
542
542
  * prompt: "eda mone, happy alle?",
543
543
  * });
544
544
  */
545
- transliterate<T extends SarvamLanguageCode>(settings: TransliterateSettings<false, T>): LanguageModelV2;
545
+ transliterate<T extends SarvamLanguageCode>(settings: TransliterateSettings<false, T>): LanguageModelV3;
546
546
  /**
547
547
  * Creates an Sarvam model for translation.
548
548
  *
@@ -555,7 +555,7 @@ type SarvamProvider = {
555
555
  * prompt: "ഇതൊക്കെ ശ്രദ്ധിക്കണ്ടേ അംബാനെ?",
556
556
  * });
557
557
  */
558
- translation<T extends TranslationModelId>(model: T, settings: TranslationSettings<T>): LanguageModelV2;
558
+ translation<T extends TranslationModelId>(model: T, settings: TranslationSettings<T>): LanguageModelV3;
559
559
  /**
560
560
  * Creates an Sarvam model for language identification.
561
561
  *
@@ -565,7 +565,7 @@ type SarvamProvider = {
565
565
  * prompt: "ബുദ്ധിയാണ് സാറേ ഇവൻ്റെ മെയിൻ",
566
566
  * });
567
567
  */
568
- languageIdentification(): LanguageModelV2;
568
+ languageIdentification(): LanguageModelV3;
569
569
  };
570
570
  //#endregion
571
571
  //#region src/provider.d.ts
package/dist/index.js CHANGED
@@ -133,7 +133,7 @@ function prepareTools({ tools, toolChoice }) {
133
133
  toolWarnings
134
134
  };
135
135
  const sarvamTools = [];
136
- for (const tool of finalTools) if (tool.type === "provider-defined") toolWarnings.push({
136
+ for (const tool of finalTools) if (tool.type === "provider") toolWarnings.push({
137
137
  type: "unsupported-tool",
138
138
  tool
139
139
  });
@@ -243,14 +243,14 @@ const chatChunkSchema = zod.default.union([zod.default.object({
243
243
 
244
244
  //#endregion
245
245
  //#region src/chat/utils.ts
246
- function mapSarvamFinishReason(finishReason) {
246
+ function mapFinishReason(finishReason) {
247
247
  switch (finishReason) {
248
248
  case "stop": return "stop";
249
249
  case "length": return "length";
250
250
  case "content_filter": return "content-filter";
251
251
  case "function_call":
252
252
  case "tool_calls": return "tool-calls";
253
- default: return "unknown";
253
+ default: return "other";
254
254
  }
255
255
  }
256
256
  function getResponseMetadata({ id, model, created }) {
@@ -265,7 +265,7 @@ function getResponseMetadata({ id, model, created }) {
265
265
  //#region src/chat/language-model.ts
266
266
  var SarvamChatLanguageModel = class {
267
267
  constructor(modelId, settings, config) {
268
- this.specificationVersion = "v2";
268
+ this.specificationVersion = "v3";
269
269
  this.modelId = modelId;
270
270
  this.settings = settings;
271
271
  this.config = config;
@@ -280,8 +280,8 @@ var SarvamChatLanguageModel = class {
280
280
  const { prompt, maxOutputTokens, temperature, topP, topK, frequencyPenalty, presencePenalty, stopSequences, responseFormat, seed, tools, toolChoice, providerOptions, stream } = options;
281
281
  const warnings = [];
282
282
  if (topK) warnings.push({
283
- type: "unsupported-setting",
284
- setting: "topK"
283
+ type: "unsupported",
284
+ feature: "topK"
285
285
  });
286
286
  const sarvamOptions = await (0, __ai_sdk_provider_utils.parseProviderOptions)({
287
287
  provider: "sarvam",
@@ -377,11 +377,19 @@ var SarvamChatLanguageModel = class {
377
377
  }
378
378
  return {
379
379
  content,
380
- finishReason: mapSarvamFinishReason(choice.finish_reason),
380
+ finishReason: mapFinishReason(choice.finish_reason),
381
381
  usage: {
382
- inputTokens: response.usage?.prompt_tokens ?? 0,
383
- outputTokens: response.usage?.completion_tokens ?? 0,
384
- totalTokens: (response.usage?.prompt_tokens ?? 0) + (response.usage?.completion_tokens ?? 0)
382
+ inputTokens: {
383
+ total: response.usage?.prompt_tokens ?? void 0,
384
+ noCache: void 0,
385
+ cacheRead: void 0,
386
+ cacheWrite: void 0
387
+ },
388
+ outputTokens: {
389
+ total: response.usage?.completion_tokens ?? void 0,
390
+ text: void 0,
391
+ reasoning: void 0
392
+ }
385
393
  },
386
394
  warnings,
387
395
  request: { body },
@@ -392,7 +400,7 @@ var SarvamChatLanguageModel = class {
392
400
  };
393
401
  }
394
402
  async doStream(options) {
395
- const { args, warnings } = await this.getArgs({
403
+ const { args } = await this.getArgs({
396
404
  ...options,
397
405
  stream: true
398
406
  });
@@ -416,10 +424,22 @@ var SarvamChatLanguageModel = class {
416
424
  fetch: this.config.fetch
417
425
  });
418
426
  const toolCalls = [];
419
- let finishReason = "unknown";
427
+ let finishReason = {
428
+ unified: "other",
429
+ raw: void 0
430
+ };
420
431
  let usage = {
421
- inputTokens: void 0,
422
- outputTokens: void 0
432
+ inputTokens: {
433
+ total: void 0,
434
+ noCache: void 0,
435
+ cacheRead: void 0,
436
+ cacheWrite: void 0
437
+ },
438
+ outputTokens: {
439
+ total: void 0,
440
+ text: void 0,
441
+ reasoning: void 0
442
+ }
423
443
  };
424
444
  let isFirstChunk = true;
425
445
  this.config;
@@ -427,7 +447,10 @@ var SarvamChatLanguageModel = class {
427
447
  stream: response.pipeThrough(new TransformStream({
428
448
  transform(chunk, controller) {
429
449
  if (!chunk.success) {
430
- finishReason = "error";
450
+ finishReason = {
451
+ unified: "error",
452
+ raw: void 0
453
+ };
431
454
  controller.enqueue({
432
455
  type: "error",
433
456
  error: chunk.error
@@ -436,7 +459,10 @@ var SarvamChatLanguageModel = class {
436
459
  }
437
460
  const value = chunk.value;
438
461
  if ("error" in value) {
439
- finishReason = "error";
462
+ finishReason = {
463
+ unified: "error",
464
+ raw: void 0
465
+ };
440
466
  controller.enqueue({
441
467
  type: "error",
442
468
  error: value.error
@@ -452,11 +478,23 @@ var SarvamChatLanguageModel = class {
452
478
  });
453
479
  }
454
480
  if (value.x_sarvam?.usage != null) usage = {
455
- inputTokens: value.x_sarvam.usage.prompt_tokens ?? void 0,
456
- outputTokens: value.x_sarvam.usage.completion_tokens ?? void 0
481
+ inputTokens: {
482
+ total: value.x_sarvam.usage.prompt_tokens ?? void 0,
483
+ noCache: void 0,
484
+ cacheRead: void 0,
485
+ cacheWrite: void 0
486
+ },
487
+ outputTokens: {
488
+ total: value.x_sarvam.usage.completion_tokens ?? void 0,
489
+ text: void 0,
490
+ reasoning: void 0
491
+ }
457
492
  };
458
493
  const choice = value.choices[0];
459
- if (choice?.finish_reason != null) finishReason = mapSarvamFinishReason(choice.finish_reason);
494
+ if (choice?.finish_reason != null) finishReason = {
495
+ unified: mapFinishReason(choice.finish_reason),
496
+ raw: choice.finish_reason
497
+ };
460
498
  if (choice?.delta == null) return;
461
499
  const delta = choice.delta;
462
500
  if (delta.reasoning != null && delta.reasoning.length > 0) controller.enqueue({
@@ -532,11 +570,7 @@ var SarvamChatLanguageModel = class {
532
570
  controller.enqueue({
533
571
  type: "finish",
534
572
  finishReason,
535
- usage: {
536
- inputTokens: usage.inputTokens ?? 0,
537
- outputTokens: usage.outputTokens ?? 0,
538
- totalTokens: (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0)
539
- }
573
+ usage
540
574
  });
541
575
  }
542
576
  })),
@@ -596,7 +630,7 @@ var SarvamSpeechTranslationModel = class {
596
630
  constructor(modelId, config) {
597
631
  this.modelId = modelId;
598
632
  this.config = config;
599
- this.specificationVersion = "v2";
633
+ this.specificationVersion = "v3";
600
634
  }
601
635
  get provider() {
602
636
  return this.config.provider;
@@ -606,7 +640,6 @@ var SarvamSpeechTranslationModel = class {
606
640
  }
607
641
  async getArgs(options) {
608
642
  const { audio, mediaType, providerOptions } = options;
609
- const warnings = [];
610
643
  const sarvamOptions = await (0, __ai_sdk_provider_utils.parseProviderOptions)({
611
644
  provider: "sarvam",
612
645
  providerOptions: { sarvam: {
@@ -624,7 +657,7 @@ var SarvamSpeechTranslationModel = class {
624
657
  });
625
658
  return {
626
659
  formData,
627
- warnings
660
+ warnings: []
628
661
  };
629
662
  }
630
663
  async doGenerate(options) {
@@ -747,7 +780,7 @@ var SarvamTranscriptionModel = class {
747
780
  this.modelId = modelId;
748
781
  this.languageCode = languageCode;
749
782
  this.config = config;
750
- this.specificationVersion = "v2";
783
+ this.specificationVersion = "v3";
751
784
  }
752
785
  get provider() {
753
786
  return this.config.provider;
@@ -757,7 +790,6 @@ var SarvamTranscriptionModel = class {
757
790
  }
758
791
  async getArgs(options) {
759
792
  const { audio, mediaType, providerOptions } = options;
760
- const warnings = [];
761
793
  const sarvamOptions = await (0, __ai_sdk_provider_utils.parseProviderOptions)({
762
794
  provider: "sarvam",
763
795
  providerOptions: { sarvam: {
@@ -780,7 +812,7 @@ var SarvamTranscriptionModel = class {
780
812
  });
781
813
  return {
782
814
  formData,
783
- warnings
815
+ warnings: []
784
816
  };
785
817
  }
786
818
  async doGenerate(options) {
@@ -923,11 +955,10 @@ var SarvamSpeechModel = class {
923
955
  this.modelId = modelId;
924
956
  this.languageCode = languageCode;
925
957
  this.config = config;
926
- this.specificationVersion = "v2";
958
+ this.specificationVersion = "v3";
927
959
  }
928
960
  async getArgs(options) {
929
961
  const { text, voice, outputFormat = "wav", speed, providerOptions } = options;
930
- const warnings = [];
931
962
  const sarvamOptions = await (0, __ai_sdk_provider_utils.parseProviderOptions)({
932
963
  provider: "sarvam",
933
964
  providerOptions: { sarvam: {
@@ -949,7 +980,7 @@ var SarvamSpeechModel = class {
949
980
  });
950
981
  return {
951
982
  requestBody,
952
- warnings
983
+ warnings: []
953
984
  };
954
985
  }
955
986
  async doGenerate(options) {
@@ -1002,7 +1033,7 @@ const convertPromptToInput = (prompt) => {
1002
1033
  //#region src/ttt/lid-model.ts
1003
1034
  var SarvamLidModel = class {
1004
1035
  constructor(config) {
1005
- this.specificationVersion = "v2";
1036
+ this.specificationVersion = "v3";
1006
1037
  this.modelId = "unknown";
1007
1038
  this.config = config;
1008
1039
  }
@@ -1020,7 +1051,7 @@ var SarvamLidModel = class {
1020
1051
  };
1021
1052
  }
1022
1053
  async doGenerate(options) {
1023
- const { args, warnings } = this.getArgs({
1054
+ const { args } = this.getArgs({
1024
1055
  ...options,
1025
1056
  stream: false
1026
1057
  });
@@ -1043,11 +1074,19 @@ var SarvamLidModel = class {
1043
1074
  }],
1044
1075
  finishReason: "stop",
1045
1076
  usage: {
1046
- inputTokens: NaN,
1047
- outputTokens: NaN,
1048
- totalTokens: NaN
1077
+ inputTokens: {
1078
+ total: void 0,
1079
+ noCache: void 0,
1080
+ cacheRead: void 0,
1081
+ cacheWrite: void 0
1082
+ },
1083
+ outputTokens: {
1084
+ total: void 0,
1085
+ text: void 0,
1086
+ reasoning: void 0
1087
+ }
1049
1088
  },
1050
- warnings
1089
+ warnings: []
1051
1090
  };
1052
1091
  }
1053
1092
  async doStream(_options) {
@@ -1089,7 +1128,7 @@ const translationResponseSchema = zod.default.object({
1089
1128
  //#region src/ttt/translation-model.ts
1090
1129
  var SarvamTranslationModel = class {
1091
1130
  constructor(modelId, settings, config) {
1092
- this.specificationVersion = "v2";
1131
+ this.specificationVersion = "v3";
1093
1132
  this.modelId = modelId;
1094
1133
  this.settings = settings;
1095
1134
  this.config = config;
@@ -1102,7 +1141,6 @@ var SarvamTranslationModel = class {
1102
1141
  }
1103
1142
  async getArgs(options) {
1104
1143
  const { prompt, providerOptions } = options;
1105
- const warnings = [];
1106
1144
  const sarvamOptions = await (0, __ai_sdk_provider_utils.parseProviderOptions)({
1107
1145
  provider: "sarvam",
1108
1146
  providerOptions: { sarvam: {
@@ -1127,11 +1165,11 @@ var SarvamTranslationModel = class {
1127
1165
  source_language_code: from,
1128
1166
  target_language_code: to
1129
1167
  },
1130
- warnings
1168
+ warnings: []
1131
1169
  };
1132
1170
  }
1133
1171
  async doGenerate(options) {
1134
- const { args, warnings } = await this.getArgs({
1172
+ const { args } = await this.getArgs({
1135
1173
  ...options,
1136
1174
  stream: false
1137
1175
  });
@@ -1154,11 +1192,19 @@ var SarvamTranslationModel = class {
1154
1192
  }],
1155
1193
  finishReason: "stop",
1156
1194
  usage: {
1157
- inputTokens: NaN,
1158
- outputTokens: NaN,
1159
- totalTokens: NaN
1195
+ inputTokens: {
1196
+ total: void 0,
1197
+ noCache: void 0,
1198
+ cacheRead: void 0,
1199
+ cacheWrite: void 0
1200
+ },
1201
+ outputTokens: {
1202
+ total: void 0,
1203
+ text: void 0,
1204
+ reasoning: void 0
1205
+ }
1160
1206
  },
1161
- warnings
1207
+ warnings: []
1162
1208
  };
1163
1209
  }
1164
1210
  async doStream(_options) {
@@ -1185,7 +1231,7 @@ const transliterateResponseSchema = zod.default.object({
1185
1231
  //#region src/ttt/transliterate-model.ts
1186
1232
  var SarvamTransliterateModel = class {
1187
1233
  constructor(settings, config) {
1188
- this.specificationVersion = "v2";
1234
+ this.specificationVersion = "v3";
1189
1235
  this.modelId = "unknown";
1190
1236
  this.settings = settings;
1191
1237
  this.config = config;
@@ -1198,7 +1244,6 @@ var SarvamTransliterateModel = class {
1198
1244
  }
1199
1245
  async getArgs(options) {
1200
1246
  const { prompt, providerOptions } = options;
1201
- const warnings = [];
1202
1247
  const sarvamOptions = await (0, __ai_sdk_provider_utils.parseProviderOptions)({
1203
1248
  provider: "sarvam",
1204
1249
  providerOptions: { sarvam: {
@@ -1223,11 +1268,11 @@ var SarvamTransliterateModel = class {
1223
1268
  target_language_code: to,
1224
1269
  spoken_form_numerals_language: sarvamOptions.spoken_form ? sarvamOptions.spoken_form_numerals_language ?? "english" : void 0
1225
1270
  },
1226
- warnings
1271
+ warnings: []
1227
1272
  };
1228
1273
  }
1229
1274
  async doGenerate(options) {
1230
- const { args, warnings } = await this.getArgs({
1275
+ const { args } = await this.getArgs({
1231
1276
  ...options,
1232
1277
  stream: false
1233
1278
  });
@@ -1250,11 +1295,19 @@ var SarvamTransliterateModel = class {
1250
1295
  }],
1251
1296
  finishReason: "stop",
1252
1297
  usage: {
1253
- inputTokens: NaN,
1254
- outputTokens: NaN,
1255
- totalTokens: NaN
1298
+ inputTokens: {
1299
+ total: void 0,
1300
+ noCache: void 0,
1301
+ cacheRead: void 0,
1302
+ cacheWrite: void 0
1303
+ },
1304
+ outputTokens: {
1305
+ total: void 0,
1306
+ text: void 0,
1307
+ reasoning: void 0
1308
+ }
1256
1309
  },
1257
- warnings
1310
+ warnings: []
1258
1311
  };
1259
1312
  }
1260
1313
  async doStream(_options) {
package/dist/index.mjs CHANGED
@@ -107,7 +107,7 @@ function prepareTools({ tools, toolChoice }) {
107
107
  toolWarnings
108
108
  };
109
109
  const sarvamTools = [];
110
- for (const tool of finalTools) if (tool.type === "provider-defined") toolWarnings.push({
110
+ for (const tool of finalTools) if (tool.type === "provider") toolWarnings.push({
111
111
  type: "unsupported-tool",
112
112
  tool
113
113
  });
@@ -217,14 +217,14 @@ const chatChunkSchema = z$1.union([z$1.object({
217
217
 
218
218
  //#endregion
219
219
  //#region src/chat/utils.ts
220
- function mapSarvamFinishReason(finishReason) {
220
+ function mapFinishReason(finishReason) {
221
221
  switch (finishReason) {
222
222
  case "stop": return "stop";
223
223
  case "length": return "length";
224
224
  case "content_filter": return "content-filter";
225
225
  case "function_call":
226
226
  case "tool_calls": return "tool-calls";
227
- default: return "unknown";
227
+ default: return "other";
228
228
  }
229
229
  }
230
230
  function getResponseMetadata({ id, model, created }) {
@@ -239,7 +239,7 @@ function getResponseMetadata({ id, model, created }) {
239
239
  //#region src/chat/language-model.ts
240
240
  var SarvamChatLanguageModel = class {
241
241
  constructor(modelId, settings, config) {
242
- this.specificationVersion = "v2";
242
+ this.specificationVersion = "v3";
243
243
  this.modelId = modelId;
244
244
  this.settings = settings;
245
245
  this.config = config;
@@ -254,8 +254,8 @@ var SarvamChatLanguageModel = class {
254
254
  const { prompt, maxOutputTokens, temperature, topP, topK, frequencyPenalty, presencePenalty, stopSequences, responseFormat, seed, tools, toolChoice, providerOptions, stream } = options;
255
255
  const warnings = [];
256
256
  if (topK) warnings.push({
257
- type: "unsupported-setting",
258
- setting: "topK"
257
+ type: "unsupported",
258
+ feature: "topK"
259
259
  });
260
260
  const sarvamOptions = await parseProviderOptions({
261
261
  provider: "sarvam",
@@ -351,11 +351,19 @@ var SarvamChatLanguageModel = class {
351
351
  }
352
352
  return {
353
353
  content,
354
- finishReason: mapSarvamFinishReason(choice.finish_reason),
354
+ finishReason: mapFinishReason(choice.finish_reason),
355
355
  usage: {
356
- inputTokens: response.usage?.prompt_tokens ?? 0,
357
- outputTokens: response.usage?.completion_tokens ?? 0,
358
- totalTokens: (response.usage?.prompt_tokens ?? 0) + (response.usage?.completion_tokens ?? 0)
356
+ inputTokens: {
357
+ total: response.usage?.prompt_tokens ?? void 0,
358
+ noCache: void 0,
359
+ cacheRead: void 0,
360
+ cacheWrite: void 0
361
+ },
362
+ outputTokens: {
363
+ total: response.usage?.completion_tokens ?? void 0,
364
+ text: void 0,
365
+ reasoning: void 0
366
+ }
359
367
  },
360
368
  warnings,
361
369
  request: { body },
@@ -366,7 +374,7 @@ var SarvamChatLanguageModel = class {
366
374
  };
367
375
  }
368
376
  async doStream(options) {
369
- const { args, warnings } = await this.getArgs({
377
+ const { args } = await this.getArgs({
370
378
  ...options,
371
379
  stream: true
372
380
  });
@@ -390,10 +398,22 @@ var SarvamChatLanguageModel = class {
390
398
  fetch: this.config.fetch
391
399
  });
392
400
  const toolCalls = [];
393
- let finishReason = "unknown";
401
+ let finishReason = {
402
+ unified: "other",
403
+ raw: void 0
404
+ };
394
405
  let usage = {
395
- inputTokens: void 0,
396
- outputTokens: void 0
406
+ inputTokens: {
407
+ total: void 0,
408
+ noCache: void 0,
409
+ cacheRead: void 0,
410
+ cacheWrite: void 0
411
+ },
412
+ outputTokens: {
413
+ total: void 0,
414
+ text: void 0,
415
+ reasoning: void 0
416
+ }
397
417
  };
398
418
  let isFirstChunk = true;
399
419
  this.config;
@@ -401,7 +421,10 @@ var SarvamChatLanguageModel = class {
401
421
  stream: response.pipeThrough(new TransformStream({
402
422
  transform(chunk, controller) {
403
423
  if (!chunk.success) {
404
- finishReason = "error";
424
+ finishReason = {
425
+ unified: "error",
426
+ raw: void 0
427
+ };
405
428
  controller.enqueue({
406
429
  type: "error",
407
430
  error: chunk.error
@@ -410,7 +433,10 @@ var SarvamChatLanguageModel = class {
410
433
  }
411
434
  const value = chunk.value;
412
435
  if ("error" in value) {
413
- finishReason = "error";
436
+ finishReason = {
437
+ unified: "error",
438
+ raw: void 0
439
+ };
414
440
  controller.enqueue({
415
441
  type: "error",
416
442
  error: value.error
@@ -426,11 +452,23 @@ var SarvamChatLanguageModel = class {
426
452
  });
427
453
  }
428
454
  if (value.x_sarvam?.usage != null) usage = {
429
- inputTokens: value.x_sarvam.usage.prompt_tokens ?? void 0,
430
- outputTokens: value.x_sarvam.usage.completion_tokens ?? void 0
455
+ inputTokens: {
456
+ total: value.x_sarvam.usage.prompt_tokens ?? void 0,
457
+ noCache: void 0,
458
+ cacheRead: void 0,
459
+ cacheWrite: void 0
460
+ },
461
+ outputTokens: {
462
+ total: value.x_sarvam.usage.completion_tokens ?? void 0,
463
+ text: void 0,
464
+ reasoning: void 0
465
+ }
431
466
  };
432
467
  const choice = value.choices[0];
433
- if (choice?.finish_reason != null) finishReason = mapSarvamFinishReason(choice.finish_reason);
468
+ if (choice?.finish_reason != null) finishReason = {
469
+ unified: mapFinishReason(choice.finish_reason),
470
+ raw: choice.finish_reason
471
+ };
434
472
  if (choice?.delta == null) return;
435
473
  const delta = choice.delta;
436
474
  if (delta.reasoning != null && delta.reasoning.length > 0) controller.enqueue({
@@ -506,11 +544,7 @@ var SarvamChatLanguageModel = class {
506
544
  controller.enqueue({
507
545
  type: "finish",
508
546
  finishReason,
509
- usage: {
510
- inputTokens: usage.inputTokens ?? 0,
511
- outputTokens: usage.outputTokens ?? 0,
512
- totalTokens: (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0)
513
- }
547
+ usage
514
548
  });
515
549
  }
516
550
  })),
@@ -570,7 +604,7 @@ var SarvamSpeechTranslationModel = class {
570
604
  constructor(modelId, config) {
571
605
  this.modelId = modelId;
572
606
  this.config = config;
573
- this.specificationVersion = "v2";
607
+ this.specificationVersion = "v3";
574
608
  }
575
609
  get provider() {
576
610
  return this.config.provider;
@@ -580,7 +614,6 @@ var SarvamSpeechTranslationModel = class {
580
614
  }
581
615
  async getArgs(options) {
582
616
  const { audio, mediaType, providerOptions } = options;
583
- const warnings = [];
584
617
  const sarvamOptions = await parseProviderOptions({
585
618
  provider: "sarvam",
586
619
  providerOptions: { sarvam: {
@@ -598,7 +631,7 @@ var SarvamSpeechTranslationModel = class {
598
631
  });
599
632
  return {
600
633
  formData,
601
- warnings
634
+ warnings: []
602
635
  };
603
636
  }
604
637
  async doGenerate(options) {
@@ -721,7 +754,7 @@ var SarvamTranscriptionModel = class {
721
754
  this.modelId = modelId;
722
755
  this.languageCode = languageCode;
723
756
  this.config = config;
724
- this.specificationVersion = "v2";
757
+ this.specificationVersion = "v3";
725
758
  }
726
759
  get provider() {
727
760
  return this.config.provider;
@@ -731,7 +764,6 @@ var SarvamTranscriptionModel = class {
731
764
  }
732
765
  async getArgs(options) {
733
766
  const { audio, mediaType, providerOptions } = options;
734
- const warnings = [];
735
767
  const sarvamOptions = await parseProviderOptions({
736
768
  provider: "sarvam",
737
769
  providerOptions: { sarvam: {
@@ -754,7 +786,7 @@ var SarvamTranscriptionModel = class {
754
786
  });
755
787
  return {
756
788
  formData,
757
- warnings
789
+ warnings: []
758
790
  };
759
791
  }
760
792
  async doGenerate(options) {
@@ -897,11 +929,10 @@ var SarvamSpeechModel = class {
897
929
  this.modelId = modelId;
898
930
  this.languageCode = languageCode;
899
931
  this.config = config;
900
- this.specificationVersion = "v2";
932
+ this.specificationVersion = "v3";
901
933
  }
902
934
  async getArgs(options) {
903
935
  const { text, voice, outputFormat = "wav", speed, providerOptions } = options;
904
- const warnings = [];
905
936
  const sarvamOptions = await parseProviderOptions({
906
937
  provider: "sarvam",
907
938
  providerOptions: { sarvam: {
@@ -923,7 +954,7 @@ var SarvamSpeechModel = class {
923
954
  });
924
955
  return {
925
956
  requestBody,
926
- warnings
957
+ warnings: []
927
958
  };
928
959
  }
929
960
  async doGenerate(options) {
@@ -976,7 +1007,7 @@ const convertPromptToInput = (prompt) => {
976
1007
  //#region src/ttt/lid-model.ts
977
1008
  var SarvamLidModel = class {
978
1009
  constructor(config) {
979
- this.specificationVersion = "v2";
1010
+ this.specificationVersion = "v3";
980
1011
  this.modelId = "unknown";
981
1012
  this.config = config;
982
1013
  }
@@ -994,7 +1025,7 @@ var SarvamLidModel = class {
994
1025
  };
995
1026
  }
996
1027
  async doGenerate(options) {
997
- const { args, warnings } = this.getArgs({
1028
+ const { args } = this.getArgs({
998
1029
  ...options,
999
1030
  stream: false
1000
1031
  });
@@ -1017,11 +1048,19 @@ var SarvamLidModel = class {
1017
1048
  }],
1018
1049
  finishReason: "stop",
1019
1050
  usage: {
1020
- inputTokens: NaN,
1021
- outputTokens: NaN,
1022
- totalTokens: NaN
1051
+ inputTokens: {
1052
+ total: void 0,
1053
+ noCache: void 0,
1054
+ cacheRead: void 0,
1055
+ cacheWrite: void 0
1056
+ },
1057
+ outputTokens: {
1058
+ total: void 0,
1059
+ text: void 0,
1060
+ reasoning: void 0
1061
+ }
1023
1062
  },
1024
- warnings
1063
+ warnings: []
1025
1064
  };
1026
1065
  }
1027
1066
  async doStream(_options) {
@@ -1063,7 +1102,7 @@ const translationResponseSchema = z$1.object({
1063
1102
  //#region src/ttt/translation-model.ts
1064
1103
  var SarvamTranslationModel = class {
1065
1104
  constructor(modelId, settings, config) {
1066
- this.specificationVersion = "v2";
1105
+ this.specificationVersion = "v3";
1067
1106
  this.modelId = modelId;
1068
1107
  this.settings = settings;
1069
1108
  this.config = config;
@@ -1076,7 +1115,6 @@ var SarvamTranslationModel = class {
1076
1115
  }
1077
1116
  async getArgs(options) {
1078
1117
  const { prompt, providerOptions } = options;
1079
- const warnings = [];
1080
1118
  const sarvamOptions = await parseProviderOptions({
1081
1119
  provider: "sarvam",
1082
1120
  providerOptions: { sarvam: {
@@ -1101,11 +1139,11 @@ var SarvamTranslationModel = class {
1101
1139
  source_language_code: from,
1102
1140
  target_language_code: to
1103
1141
  },
1104
- warnings
1142
+ warnings: []
1105
1143
  };
1106
1144
  }
1107
1145
  async doGenerate(options) {
1108
- const { args, warnings } = await this.getArgs({
1146
+ const { args } = await this.getArgs({
1109
1147
  ...options,
1110
1148
  stream: false
1111
1149
  });
@@ -1128,11 +1166,19 @@ var SarvamTranslationModel = class {
1128
1166
  }],
1129
1167
  finishReason: "stop",
1130
1168
  usage: {
1131
- inputTokens: NaN,
1132
- outputTokens: NaN,
1133
- totalTokens: NaN
1169
+ inputTokens: {
1170
+ total: void 0,
1171
+ noCache: void 0,
1172
+ cacheRead: void 0,
1173
+ cacheWrite: void 0
1174
+ },
1175
+ outputTokens: {
1176
+ total: void 0,
1177
+ text: void 0,
1178
+ reasoning: void 0
1179
+ }
1134
1180
  },
1135
- warnings
1181
+ warnings: []
1136
1182
  };
1137
1183
  }
1138
1184
  async doStream(_options) {
@@ -1159,7 +1205,7 @@ const transliterateResponseSchema = z$1.object({
1159
1205
  //#region src/ttt/transliterate-model.ts
1160
1206
  var SarvamTransliterateModel = class {
1161
1207
  constructor(settings, config) {
1162
- this.specificationVersion = "v2";
1208
+ this.specificationVersion = "v3";
1163
1209
  this.modelId = "unknown";
1164
1210
  this.settings = settings;
1165
1211
  this.config = config;
@@ -1172,7 +1218,6 @@ var SarvamTransliterateModel = class {
1172
1218
  }
1173
1219
  async getArgs(options) {
1174
1220
  const { prompt, providerOptions } = options;
1175
- const warnings = [];
1176
1221
  const sarvamOptions = await parseProviderOptions({
1177
1222
  provider: "sarvam",
1178
1223
  providerOptions: { sarvam: {
@@ -1197,11 +1242,11 @@ var SarvamTransliterateModel = class {
1197
1242
  target_language_code: to,
1198
1243
  spoken_form_numerals_language: sarvamOptions.spoken_form ? sarvamOptions.spoken_form_numerals_language ?? "english" : void 0
1199
1244
  },
1200
- warnings
1245
+ warnings: []
1201
1246
  };
1202
1247
  }
1203
1248
  async doGenerate(options) {
1204
- const { args, warnings } = await this.getArgs({
1249
+ const { args } = await this.getArgs({
1205
1250
  ...options,
1206
1251
  stream: false
1207
1252
  });
@@ -1224,11 +1269,19 @@ var SarvamTransliterateModel = class {
1224
1269
  }],
1225
1270
  finishReason: "stop",
1226
1271
  usage: {
1227
- inputTokens: NaN,
1228
- outputTokens: NaN,
1229
- totalTokens: NaN
1272
+ inputTokens: {
1273
+ total: void 0,
1274
+ noCache: void 0,
1275
+ cacheRead: void 0,
1276
+ cacheWrite: void 0
1277
+ },
1278
+ outputTokens: {
1279
+ total: void 0,
1280
+ text: void 0,
1281
+ reasoning: void 0
1282
+ }
1230
1283
  },
1231
- warnings
1284
+ warnings: []
1232
1285
  };
1233
1286
  }
1234
1287
  async doStream(_options) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sarvam-ai-sdk",
3
3
  "description": "Sarvam provider support for Vercel's AI-SDK",
4
- "version": "0.2.0-beta",
4
+ "version": "0.3.0-beta",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
@@ -23,19 +23,19 @@
23
23
  }
24
24
  },
25
25
  "dependencies": {
26
- "@ai-sdk/provider": "2",
27
- "@ai-sdk/provider-utils": "3"
26
+ "@ai-sdk/provider": "^3.0.0",
27
+ "@ai-sdk/provider-utils": "^4.0.0"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@biomejs/biome": "2.4.8",
31
31
  "@types/node": "20.17.24",
32
- "ai": "5",
32
+ "ai": "^6.0.0",
33
33
  "tsdown": "^0.15.10",
34
34
  "typescript": "5.6.3",
35
35
  "zod": "^4.1.8"
36
36
  },
37
37
  "peerDependencies": {
38
- "ai": "5",
38
+ "ai": "^6.0.0",
39
39
  "zod": "^3.25.0 || ^4.0.0"
40
40
  },
41
41
  "engines": {
@@ -51,7 +51,7 @@
51
51
  "bugs": {
52
52
  "url": "https://github.com/rajatsandeepsen/sarvam-ai-sdk/issues"
53
53
  },
54
- "homepage": "https://v5.ai-sdk.dev/docs",
54
+ "homepage": "https://v6.ai-sdk.dev/docs",
55
55
  "keywords": [
56
56
  "ai",
57
57
  "ai-sdk",