{"version":3,"sources":["../src/sarvam-provider.ts","../src/sarvam-chat-language-model.ts","../src/convert-to-sarvam-chat-messages.ts","../src/get-response-metadata.ts","../src/map-sarvam-finish-reason.ts","../src/sarvam-error.ts","../src/sarvam-prepare-tools.ts","../src/sarvam-speech-model.ts","../src/sarvam-speech-settings.ts","../src/sarvam-transcription-model.ts","../src/sarvam-transcription-settings.ts","../src/sarvam-translation-model.ts","../src/sarvam-config.ts","../src/sarvam-transliterate-model.ts","../src/sarvam-lid-model.ts","../src/sarvam-speech-translation-model.ts"],"sourcesContent":["import {\n    LanguageModelV1,\n    SpeechModelV1,\n    TranscriptionModelV1\n} from \"@ai-sdk/provider\";\nimport {\n    FetchFunction,\n    loadApiKey,\n    withoutTrailingSlash,\n} from \"@ai-sdk/provider-utils\";\nimport { SarvamChatLanguageModel } from \"./sarvam-chat-language-model\";\nimport { SarvamChatModelId, SarvamChatSettings } from \"./sarvam-chat-settings\";\nimport { SarvamLanguageCode } from \"./sarvam-config\";\nimport {\n    SarvamSpeechModel,\n} from \"./sarvam-speech-model\";\nimport { SarvamSpeechModelId, SarvamSpeechSettings } from \"./sarvam-speech-settings\";\nimport {\n    SarvamTranscriptionModel,\n} from \"./sarvam-transcription-model\";\nimport { SarvamSpeechTranslationModelId, SarvamTranscriptionCallOptions, SarvamTranscriptionModelId } from \"./sarvam-transcription-settings\";\nimport { SarvamTranslationModel } from \"./sarvam-translation-model\";\nimport { SarvamTranslationSettings } from \"./sarvam-translation-settings\";\nimport { SarvamTransliterateModel } from \"./sarvam-transliterate-model\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\nimport { SarvamLidModel } from \"./sarvam-lid-model\";\nimport { SarvamSpeechTranslationModel } from \"./sarvam-speech-translation-model\";\n\nexport interface SarvamProvider {\n  /**\n  * Creates a model for text generation.\n  */\n  (modelId: SarvamChatModelId, settings?: SarvamChatSettings): LanguageModelV1;\n\n  /**\n  * Creates an Sarvam chat model for text generation.\n  */\n  languageModel(\n    modelId: SarvamChatModelId,\n    settings?: SarvamChatSettings,\n  ): LanguageModelV1;\n\n  /**\n  * Creates a Sarvam model for transcription.\n  */\n  transcription(\n    modelId: SarvamTranscriptionModelId,\n    /**\n    * Audio source language code\n    *\n    * @default unknown\n    */\n    languageCode?: SarvamLanguageCode | \"unknown\",\n    settings?: SarvamTranscriptionCallOptions,\n  ): TranscriptionModelV1;\n\n  /**\n  * Creates a Sarvam model for Speech translation.\n  */\n  speechTranslation(\n    modelId: SarvamSpeechTranslationModelId,\n  ): TranscriptionModelV1;\n\n  /**\n  * Creates a Sarvam model for speech.\n  */\n  speech(\n    modelId: SarvamSpeechModelId,\n    languageCode: SarvamLanguageCode,\n    settings?: SarvamSpeechSettings,\n  ): SpeechModelV1;\n\n  /**\n  * Creates an Sarvam model for transliterate.\n  */\n  transliterate(settings: SarvamTransliterateSettings): LanguageModelV1;\n\n  /**\n  * Creates an Sarvam model for translation.\n  */\n  translation(settings: SarvamTranslationSettings): LanguageModelV1;\n\n  /**\n  * Creates an Sarvam model for language identification.\n  */\n  languageIdentification(): LanguageModelV1;\n}\n\nexport interface SarvamProviderSettings {\n  /**\n  * URL for the Sarvam API calls.\n  * @default https://api.sarvam.ai\n  */\n  baseURL?: string;\n\n  /**\n  * API key for authenticating requests.\n  * @default process.env.SARVAM_API_KEY\n  */\n  apiKey?: string;\n\n  /**\n  * Custom headers to include in the requests.\n  * @default\n    Authorization: `Bearer ${process.env.SARVAM_API_KEY}`,\n    \"api-subscription-key\": process.env.SARVAM_API_KEY\n  */\n  headers?: Record<string, string>;\n\n  /**\n  * Custom fetch implementation. You can use it as a middleware to intercept requests,\n  * or to provide a custom fetch implementation for e.g. testing.\n  */\n  fetch?: FetchFunction;\n}\n\n/**\n* Create an Sarvam provider instance.\n*/\nexport function createSarvam(\n  options: SarvamProviderSettings = {},\n): SarvamProvider {\n  const baseURL =\n    withoutTrailingSlash(options.baseURL) ?? \"https://api.sarvam.ai\";\n\n  const getApiKey = () => loadApiKey({\n    apiKey: options.apiKey,\n    environmentVariableName: \"SARVAM_API_KEY\",\n    description: \"Sarvam\",\n  });\n\n  const getHeaders = () => ({\n    Authorization: `Bearer ${getApiKey()}`,\n    \"api-subscription-key\": getApiKey(),\n    ...options.headers,\n  });\n\n  const createChatModel = (\n    modelId: SarvamChatModelId,\n    settings: SarvamChatSettings = {},\n  ) =>\n    new SarvamChatLanguageModel(modelId, settings, {\n      provider: \"sarvam.chat\",\n      url: ({ path }) => `${baseURL}/v1${path}`,\n      headers: getHeaders,\n      fetch: options.fetch,\n    });\n\n  const createLanguageModel = (\n    modelId: SarvamChatModelId,\n    settings?: SarvamChatSettings,\n  ) => {\n    if (new.target) {\n      throw new Error(\n        \"The Sarvam model function cannot be called with the new keyword.\",\n      );\n    }\n\n    return createChatModel(modelId, settings);\n  };\n\n  const createTranscriptionModel = (\n    modelId: SarvamTranscriptionModelId,\n    languageCode: SarvamLanguageCode | \"unknown\" = \"unknown\",\n    settings?: SarvamTranscriptionCallOptions,\n  ) => new SarvamTranscriptionModel(modelId, languageCode, {\n      provider: \"sarvam.transcription\",\n      url: ({ path }) => `${baseURL}${path}`,\n      headers: getHeaders,\n      fetch: options.fetch,\n      transcription: settings,\n    });\n\n  const createSpeechTranslation = (\n    modelId: SarvamTranscriptionModelId\n  ) => new SarvamSpeechTranslationModel(modelId, {\n      provider: \"sarvam.transcription\",\n      url: ({ path }) => `${baseURL}${path}`,\n      headers: getHeaders,\n      fetch: options.fetch,\n    });\n\n  const createSpeechModel = (\n    modelId: SarvamSpeechModelId,\n    languageCode: SarvamLanguageCode,\n    settings?: SarvamSpeechSettings,\n  ) =>\n    new SarvamSpeechModel(modelId, languageCode, {\n      provider: \"sarvam.speech\",\n      url: ({ path }) => `${baseURL}${path}`,\n      headers: getHeaders,\n      fetch: options.fetch,\n      speech: settings,\n    });\n\n  const createTransliterateModel = (settings: SarvamTransliterateSettings) =>\n    new SarvamTransliterateModel(\n        settings,\n      {\n        provider: \"sarvam.transliterate\",\n        url: ({ path }) => `${baseURL}${path}`,\n        headers: getHeaders,\n        fetch: options.fetch,\n      },\n    );\n\n  const createTranslationModel = (settings: SarvamTranslationSettings) =>\n    new SarvamTranslationModel(\n        settings,\n      {\n        provider: \"sarvam.translation\",\n        url: ({ path }) => `${baseURL}${path}`,\n        headers: getHeaders,\n        fetch: options.fetch,\n      },\n    );\n\n  const createLidModel = () =>\n    new SarvamLidModel(\n      {\n        provider: \"sarvam.lid\",\n        url: ({ path }) => `${baseURL}${path}`,\n        headers: getHeaders,\n        fetch: options.fetch,\n      },\n    );\n\n  const provider = (\n    modelId: SarvamChatModelId,\n    settings?: SarvamChatSettings,\n  ) => createLanguageModel(modelId, settings);\n\n  provider.languageModel = createLanguageModel;\n  provider.chat = createChatModel;\n  provider.transcription = createTranscriptionModel;\n  provider.speechTranslation = createSpeechTranslation;\n  provider.speech = createSpeechModel;\n  provider.transliterate = createTransliterateModel;\n  provider.translation = createTranslationModel;\n  provider.languageIdentification = createLidModel;\n\n  return provider;\n}\n\n/**\n* Default Sarvam provider instance.\n*/\nexport const sarvam = createSarvam();\n","import {\n  InvalidResponseDataError,\n  LanguageModelV1,\n  LanguageModelV1CallWarning,\n  LanguageModelV1FinishReason,\n  LanguageModelV1FunctionToolCall,\n  LanguageModelV1Prompt,\n  LanguageModelV1ProviderMetadata,\n  LanguageModelV1StreamPart,\n} from \"@ai-sdk/provider\";\nimport {\n  FetchFunction,\n  ParseResult,\n  combineHeaders,\n  createEventSourceResponseHandler,\n  createJsonResponseHandler,\n  generateId,\n  isParsableJson,\n  parseProviderOptions,\n  postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { getResponseMetadata } from \"./get-response-metadata\";\nimport { mapSarvamFinishReason } from \"./map-sarvam-finish-reason\";\nimport { SarvamChatModelId, SarvamChatSettings } from \"./sarvam-chat-settings\";\nimport {\n  sarvamErrorDataSchema,\n  sarvamFailedResponseHandler,\n} from \"./sarvam-error\";\nimport {\n  extractToolCallData,\n  parseJSON,\n  prepareTools,\n  simulateJsonSchema,\n  simulateToolCalling,\n} from \"./sarvam-prepare-tools\";\n\ntype SarvamChatConfig = {\n  provider: string;\n  headers: () => Record<string, string | undefined>;\n  url: (options: { modelId: string; path: string }) => string;\n  fetch?: FetchFunction;\n};\n\nexport class SarvamChatLanguageModel implements LanguageModelV1 {\n  readonly specificationVersion = \"v1\";\n\n  readonly supportsStructuredOutputs = false;\n  readonly defaultObjectGenerationMode = \"json\";\n\n  readonly modelId: SarvamChatModelId;\n  readonly settings: SarvamChatSettings;\n\n  private readonly config: SarvamChatConfig;\n\n  constructor(\n    modelId: SarvamChatModelId,\n    settings: SarvamChatSettings,\n    config: SarvamChatConfig,\n  ) {\n    this.modelId = modelId;\n    this.settings = settings;\n    this.config = config;\n  }\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  get supportsImageUrls(): boolean {\n    // image urls can be sent if downloadImages is disabled (default):\n    return !this.settings.downloadImages;\n  }\n\n  private async getArgs({\n    mode,\n    prompt,\n    maxTokens,\n    temperature,\n    topP,\n    topK,\n    frequencyPenalty,\n    presencePenalty,\n    stopSequences,\n    responseFormat,\n    seed,\n    stream,\n    providerMetadata,\n  }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n    stream: boolean;\n  }) {\n    const type = mode.type;\n    const simulate = this.settings.simulate\n\n    if (type === \"object-json\" && simulate === \"tool-calling\")\n        throw new Error('Use { simulate: \"json-object\" } with generateObject()')\n\n    if (type === \"regular\" && simulate === \"json-object\")\n        throw new Error('Use { simulate: \"tool-calling\" } with generateText()')\n\n    const warnings: LanguageModelV1CallWarning[] = [];\n\n    if (stream) {\n      warnings.push({\n        type: \"other\",\n        message: \"Streaming is still experimental for Sarvam\",\n      });\n    }\n\n    if (topK != null) {\n      warnings.push({\n        type: \"unsupported-setting\",\n        setting: \"topK\",\n      });\n    }\n\n    if (\n      responseFormat != null &&\n      responseFormat.type === \"json\" &&\n      responseFormat.schema != null\n    ) {\n      warnings.push({\n        type: \"unsupported-setting\",\n        setting: \"responseFormat\",\n        details: \"JSON response format schema is not supported\",\n      });\n    }\n\n    const sarvamOptions = parseProviderOptions({\n      provider: \"sarvam\",\n      providerOptions: providerMetadata,\n      schema: z.object({\n        reasoningFormat: z.enum([\"parsed\", \"raw\", \"hidden\"]).nullish(),\n      }),\n    });\n\n    const baseArgs = (\n      prompt: LanguageModelV1Prompt,\n      extraSystemPrompt?: string,\n    ) => ({\n      // model id:\n      model: this.modelId,\n\n      // model specific settings:\n      user: this.settings.user,\n      parallel_tool_calls: this.settings.parallelToolCalls,\n\n      // standardized settings:\n      max_tokens: maxTokens,\n      temperature,\n      top_p: topP,\n      frequency_penalty: frequencyPenalty,\n      presence_penalty: presencePenalty,\n      stop: stopSequences,\n      seed,\n\n      // response format:\n      response_format:\n        // json object response format is not supported for streaming:\n        stream === false && responseFormat?.type === \"json\"\n          ? { type: \"json_object\" }\n          : undefined,\n\n      // provider options:\n      reasoning_format: sarvamOptions?.reasoningFormat,\n\n      // messages:\n      messages: convertToSarvamChatMessages(prompt, extraSystemPrompt),\n    });\n\n    switch (type) {\n      case \"regular\": {\n        const { tools, tool_choice, toolWarnings } = prepareTools({\n          mode,\n        });\n\n        const extraSystemPrompt =\n          tools && simulate === \"tool-calling\"\n            ? await simulateToolCalling(tools)\n            : undefined;\n\n        return {\n          args: {\n            ...baseArgs(prompt, extraSystemPrompt),\n            tools,\n            tool_choice,\n          },\n          warnings: [...warnings, ...toolWarnings],\n        };\n      }\n\n      case \"object-json\": {\n        const extraSystemPrompt = simulate === \"json-object\"\n          ? simulateJsonSchema()\n          : undefined;\n\n        return {\n          args: {\n            ...baseArgs(prompt, extraSystemPrompt),\n            response_format:\n              // json object response format is not supported for streaming:\n              stream === false ? { type: \"json_object\" } : undefined,\n          },\n          warnings,\n        };\n      }\n\n      case \"object-tool\": {\n        return {\n          args: {\n            ...baseArgs(prompt),\n            tool_choice: {\n              type: \"function\",\n              function: { name: mode.tool.name },\n            },\n            tools: [\n              {\n                type: \"function\",\n                function: {\n                  name: mode.tool.name,\n                  description: mode.tool.description,\n                  parameters: mode.tool.parameters,\n                },\n              },\n            ],\n          },\n          warnings,\n        };\n      }\n\n      default: {\n        const _exhaustiveCheck: never = type;\n        throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n      }\n    }\n  }\n\n  async doGenerate(\n    options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n    const { args, warnings } = await this.getArgs({\n      ...options,\n      stream: false,\n    });\n\n    const body = JSON.stringify(args);\n\n    const {\n      responseHeaders,\n      value: response,\n      rawValue: rawResponse,\n    } = await postJsonToApi({\n      url: this.config.url({\n        path: \"/chat/completions\",\n        modelId: this.modelId,\n      }),\n      headers: combineHeaders(this.config.headers(), options.headers),\n      body: args,\n      failedResponseHandler: sarvamFailedResponseHandler,\n      successfulResponseHandler: createJsonResponseHandler(\n        sarvamChatResponseSchema,\n      ),\n      abortSignal: options.abortSignal,\n      fetch: this.config.fetch,\n    });\n\n    const { messages: rawPrompt, ...rawSettings } = args;\n    const choice = response.choices[0];\n\n    let text = choice.message.content ?? undefined;\n\n    let toolCalls = choice.message.tool_calls?.map((toolCall) => ({\n      toolCallType: \"function\",\n      toolCallId: toolCall.id ?? generateId(),\n      toolName: toolCall.function.name,\n      args: toolCall.function.arguments!,\n    })) as LanguageModelV1FunctionToolCall[] | undefined;\n\n    // simulate tool calling through prompt engineering\n    if (this.settings.simulate === \"tool-calling\") {\n        if (text && text.length !== 0) {\n          const jsonObject = parseJSON(text);\n          if (jsonObject) {\n            const newTools = extractToolCallData(jsonObject);\n            if (newTools) {\n              toolCalls = [newTools];\n              text = undefined;\n            }\n          }\n        }\n    }\n\n    // simulate JSON object generation through prompt engineering\n    if (this.settings.simulate === \"json-object\") {\n      if (text && text.length !== 0) {\n        const jsonObject = parseJSON(text);\n        if (jsonObject) {\n          const newTools = extractToolCallData(jsonObject);\n            text = JSON.stringify(jsonObject);\n        }\n      }\n    }\n\n    return {\n      text,\n      toolCalls,\n      reasoning: choice.message.reasoning ?? undefined,\n      finishReason: mapSarvamFinishReason(choice.finish_reason),\n      usage: {\n        promptTokens: response.usage?.prompt_tokens ?? NaN,\n        completionTokens: response.usage?.completion_tokens ?? NaN,\n      },\n      rawCall: { rawPrompt, rawSettings },\n      rawResponse: { headers: responseHeaders, body: rawResponse },\n      response: getResponseMetadata(response),\n      warnings,\n      request: { body },\n    };\n  }\n\n  async doStream(\n    options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n    const { args, warnings } = await this.getArgs({ ...options, stream: true });\n\n    const body = JSON.stringify({ ...args, stream: true });\n\n    const { responseHeaders, value: response } = await postJsonToApi({\n      url: this.config.url({\n        path: \"/chat/completions\",\n        modelId: this.modelId,\n      }),\n      headers: combineHeaders(this.config.headers(), options.headers),\n      body: {\n        ...args,\n        stream: true,\n      },\n      failedResponseHandler: sarvamFailedResponseHandler,\n      successfulResponseHandler: createEventSourceResponseHandler(\n        sarvamChatChunkSchema,\n      ),\n      abortSignal: options.abortSignal,\n      fetch: this.config.fetch,\n    });\n\n    const { messages: rawPrompt, ...rawSettings } = args;\n\n    const toolCalls: Array<{\n      id: string;\n      type: \"function\";\n      function: {\n        name: string;\n        arguments: string;\n      };\n      hasFinished: boolean;\n    }> = [];\n\n    let finishReason: LanguageModelV1FinishReason = \"unknown\";\n    let usage: {\n      promptTokens: number | undefined;\n      completionTokens: number | undefined;\n    } = {\n      promptTokens: undefined,\n      completionTokens: undefined,\n    };\n    let isFirstChunk = true;\n\n    let providerMetadata: LanguageModelV1ProviderMetadata | undefined;\n    return {\n      stream: response.pipeThrough(\n        new TransformStream<\n          ParseResult<z.infer<typeof sarvamChatChunkSchema>>,\n          LanguageModelV1StreamPart\n        >({\n          transform(chunk, controller) {\n            // handle failed chunk parsing / validation:\n            if (!chunk.success) {\n              finishReason = \"error\";\n              controller.enqueue({\n                type: \"error\",\n                error: chunk.error,\n              });\n              return;\n            }\n\n            const value = chunk.value;\n\n            // handle error chunks:\n            if (\"error\" in value) {\n              finishReason = \"error\";\n              controller.enqueue({\n                type: \"error\",\n                error: value.error,\n              });\n              return;\n            }\n\n            if (isFirstChunk) {\n              isFirstChunk = false;\n\n              controller.enqueue({\n                type: \"response-metadata\",\n                ...getResponseMetadata(value),\n              });\n            }\n\n            if (value.x_sarvam?.usage != null) {\n              usage = {\n                promptTokens: value.x_sarvam.usage.prompt_tokens ?? undefined,\n                completionTokens:\n                  value.x_sarvam.usage.completion_tokens ?? undefined,\n              };\n            }\n\n            const choice = value.choices[0];\n\n            if (choice?.finish_reason != null) {\n              finishReason = mapSarvamFinishReason(choice.finish_reason);\n            }\n\n            if (choice?.delta == null) {\n              return;\n            }\n\n            const delta = choice.delta;\n\n            if (delta.reasoning != null && delta.reasoning.length > 0) {\n              controller.enqueue({\n                type: \"reasoning\",\n                textDelta: delta.reasoning,\n              });\n            }\n\n            if (delta.content != null && delta.content.length > 0) {\n              controller.enqueue({\n                type: \"text-delta\",\n                textDelta: delta.content,\n              });\n            }\n\n            if (delta.tool_calls != null) {\n              for (const toolCallDelta of delta.tool_calls) {\n                const index = toolCallDelta.index;\n\n                if (toolCalls[index] == null) {\n                  if (toolCallDelta.type !== \"function\") {\n                    throw new InvalidResponseDataError({\n                      data: toolCallDelta,\n                      message: `Expected 'function' type.`,\n                    });\n                  }\n\n                  if (toolCallDelta.id == null) {\n                    throw new InvalidResponseDataError({\n                      data: toolCallDelta,\n                      message: `Expected 'id' to be a string.`,\n                    });\n                  }\n\n                  if (toolCallDelta.function?.name == null) {\n                    throw new InvalidResponseDataError({\n                      data: toolCallDelta,\n                      message: `Expected 'function.name' to be a string.`,\n                    });\n                  }\n\n                  toolCalls[index] = {\n                    id: toolCallDelta.id,\n                    type: \"function\",\n                    function: {\n                      name: toolCallDelta.function.name,\n                      arguments: toolCallDelta.function.arguments ?? \"\",\n                    },\n                    hasFinished: false,\n                  };\n\n                  const toolCall = toolCalls[index];\n\n                  if (\n                    toolCall.function?.name != null &&\n                    toolCall.function?.arguments != null\n                  ) {\n                    // send delta if the argument text has already started:\n                    if (toolCall.function.arguments.length > 0) {\n                      controller.enqueue({\n                        type: \"tool-call-delta\",\n                        toolCallType: \"function\",\n                        toolCallId: toolCall.id,\n                        toolName: toolCall.function.name,\n                        argsTextDelta: toolCall.function.arguments,\n                      });\n                    }\n\n                    // check if tool call is complete\n                    // (some providers send the full tool call in one chunk):\n                    if (isParsableJson(toolCall.function.arguments)) {\n                      controller.enqueue({\n                        type: \"tool-call\",\n                        toolCallType: \"function\",\n                        toolCallId: toolCall.id ?? generateId(),\n                        toolName: toolCall.function.name,\n                        args: toolCall.function.arguments,\n                      });\n                      toolCall.hasFinished = true;\n                    }\n                  }\n\n                  continue;\n                }\n\n                // existing tool call, merge if not finished\n                const toolCall = toolCalls[index];\n\n                if (toolCall.hasFinished) {\n                  continue;\n                }\n\n                if (toolCallDelta.function?.arguments != null) {\n                  toolCall.function!.arguments +=\n                    toolCallDelta.function?.arguments ?? \"\";\n                }\n\n                // send delta\n                controller.enqueue({\n                  type: \"tool-call-delta\",\n                  toolCallType: \"function\",\n                  toolCallId: toolCall.id,\n                  toolName: toolCall.function.name,\n                  argsTextDelta: toolCallDelta.function.arguments ?? \"\",\n                });\n\n                // check if tool call is complete\n                if (\n                  toolCall.function?.name != null &&\n                  toolCall.function?.arguments != null &&\n                  isParsableJson(toolCall.function.arguments)\n                ) {\n                  controller.enqueue({\n                    type: \"tool-call\",\n                    toolCallType: \"function\",\n                    toolCallId: toolCall.id ?? generateId(),\n                    toolName: toolCall.function.name,\n                    args: toolCall.function.arguments,\n                  });\n                  toolCall.hasFinished = true;\n                }\n              }\n            }\n          },\n\n          flush(controller) {\n            controller.enqueue({\n              type: \"finish\",\n              finishReason,\n              usage: {\n                promptTokens: usage.promptTokens ?? NaN,\n                completionTokens: usage.completionTokens ?? NaN,\n              },\n              ...(providerMetadata != null ? { providerMetadata } : {}),\n            });\n          },\n        }),\n      ),\n      rawCall: { rawPrompt, rawSettings },\n      rawResponse: { headers: responseHeaders },\n      warnings,\n      request: { body },\n    };\n  }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst sarvamChatResponseSchema = z.object({\n  id: z.string().nullish(),\n  created: z.number().nullish(),\n  model: z.string().nullish(),\n  choices: z.array(\n    z.object({\n      message: z.object({\n        content: z.string().nullish(),\n        reasoning: z.string().nullish(),\n        tool_calls: z\n          .array(\n            z.object({\n              id: z.string().nullish(),\n              type: z.literal(\"function\"),\n              function: z.object({\n                name: z.string(),\n                arguments: z.string(),\n              }),\n            }),\n          )\n          .nullish(),\n      }),\n      index: z.number(),\n      finish_reason: z.string().nullish(),\n    }),\n  ),\n  usage: z\n    .object({\n      prompt_tokens: z.number().nullish(),\n      completion_tokens: z.number().nullish(),\n    })\n    .nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst sarvamChatChunkSchema = z.union([\n  z.object({\n    id: z.string().nullish(),\n    created: z.number().nullish(),\n    model: z.string().nullish(),\n    choices: z.array(\n      z.object({\n        delta: z\n          .object({\n            content: z.string().nullish(),\n            reasoning: z.string().nullish(),\n            tool_calls: z\n              .array(\n                z.object({\n                  index: z.number(),\n                  id: z.string().nullish(),\n                  type: z.literal(\"function\").optional(),\n                  function: z.object({\n                    name: z.string().nullish(),\n                    arguments: z.string().nullish(),\n                  }),\n                }),\n              )\n              .nullish(),\n          })\n          .nullish(),\n        finish_reason: z.string().nullable().optional(),\n        index: z.number(),\n      }),\n    ),\n    x_sarvam: z\n      .object({\n        usage: z\n          .object({\n            prompt_tokens: z.number().nullish(),\n            completion_tokens: z.number().nullish(),\n          })\n          .nullish(),\n      })\n      .nullish(),\n  }),\n  sarvamErrorDataSchema,\n]);\n","import {\n  LanguageModelV1Prompt,\n  UnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { convertUint8ArrayToBase64 } from \"@ai-sdk/provider-utils\";\nimport { SarvamChatPrompt } from \"./sarvam-api-types\";\n\nexport function convertToSarvamChatMessages(\n  prompt: LanguageModelV1Prompt,\n  fakeToolSystemPrompt?: string,\n): SarvamChatPrompt {\n  const messages: SarvamChatPrompt = [];\n\n  for (const { role, content } of prompt) {\n    switch (role) {\n      case \"system\": {\n        const contentData = fakeToolSystemPrompt\n          ? `${content}\\n\\n${fakeToolSystemPrompt}`\n          : content;\n        messages.push({ role: \"system\", content: contentData });\n        break;\n      }\n\n      case \"user\": {\n        if (content.length === 1 && content[0].type === \"text\") {\n          messages.push({ role: \"user\", content: content[0].text });\n          break;\n        }\n\n        messages.push({\n          role: \"user\",\n          content: content.map((part) => {\n            switch (part.type) {\n              case \"text\": {\n                return { type: \"text\", text: part.text };\n              }\n              case \"image\": {\n                return {\n                  type: \"image_url\",\n                  image_url: {\n                    url:\n                      part.image instanceof URL\n                        ? part.image.toString()\n                        : `data:${\n                            part.mimeType ?? \"image/jpeg\"\n                          };base64,${convertUint8ArrayToBase64(part.image)}`,\n                  },\n                };\n              }\n              case \"file\": {\n                throw new UnsupportedFunctionalityError({\n                  functionality: \"File content parts in user messages\",\n                });\n              }\n            }\n          }),\n        });\n\n        break;\n      }\n\n      case \"assistant\": {\n        let text = \"\";\n        const toolCalls: Array<{\n          id: string;\n          type: \"function\";\n          function: { name: string; arguments: string };\n        }> = [];\n\n        for (const part of content) {\n          switch (part.type) {\n            case \"text\": {\n              text += part.text;\n              break;\n            }\n            case \"tool-call\": {\n              toolCalls.push({\n                id: part.toolCallId,\n                type: \"function\",\n                function: {\n                  name: part.toolName,\n                  arguments: JSON.stringify(part.args),\n                },\n              });\n              break;\n            }\n          }\n        }\n\n        messages.push({\n          role: \"assistant\",\n          content: text,\n          tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n        });\n\n        break;\n      }\n\n      case \"tool\": {\n        for (const toolResponse of content) {\n          messages.push({\n            role: \"tool\",\n            tool_call_id: toolResponse.toolCallId,\n            content: JSON.stringify(toolResponse.result),\n          });\n        }\n        break;\n      }\n\n      default: {\n        const _exhaustiveCheck: never = role;\n        throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n      }\n    }\n  }\n\n  return messages;\n}\n","export function getResponseMetadata({\n  id,\n  model,\n  created,\n}: {\n  id?: string | undefined | null;\n  created?: number | undefined | null;\n  model?: string | undefined | null;\n}) {\n  return {\n    id: id ?? undefined,\n    modelId: model ?? undefined,\n    timestamp: created != null ? new Date(created * 1000) : undefined,\n  };\n}\n","import { LanguageModelV1FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapSarvamFinishReason(\n    finishReason: string | null | undefined,\n): LanguageModelV1FinishReason {\n    switch (finishReason) {\n        case \"stop\":\n            return \"stop\";\n        case \"length\":\n            return \"length\";\n        case \"content_filter\":\n            return \"content-filter\";\n        case \"function_call\":\n        case \"tool_calls\":\n            return \"tool-calls\";\n        default:\n            return \"unknown\";\n    }\n}\n","import { z } from \"zod\";\nimport { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\n\nexport const sarvamErrorDataSchema = z.object({\n    error: z.object({\n        message: z.string(),\n        type: z.string(),\n    }),\n});\n\nexport type SarvamErrorData = z.infer<typeof sarvamErrorDataSchema>;\n\nexport const sarvamFailedResponseHandler = createJsonErrorResponseHandler({\n    errorSchema: sarvamErrorDataSchema,\n    errorToMessage: (data) => data.error.message,\n});\n","import {\n  LanguageModelV1,\n  LanguageModelV1CallWarning,\n  LanguageModelV1FunctionToolCall,\n  UnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\n\ntype SarvamTools = Array<{\n  type: \"function\";\n  function: {\n    name: string;\n    description: string | undefined;\n    parameters: unknown;\n  };\n}>;\n\nexport function prepareTools({\n  mode,\n}: {\n  mode: Parameters<LanguageModelV1[\"doGenerate\"]>[0][\"mode\"] & {\n    type: \"regular\";\n  };\n}): {\n  tools:\n    | undefined\n    | Array<{\n        type: \"function\";\n        function: {\n          name: string;\n          description: string | undefined;\n          parameters: unknown;\n        };\n      }>;\n  tool_choice:\n    | { type: \"function\"; function: { name: string } }\n    | \"auto\"\n    | \"none\"\n    | \"required\"\n    | undefined;\n  toolWarnings: LanguageModelV1CallWarning[];\n  fakeTools?: string;\n} {\n  // when the tools array is empty, change it to undefined to prevent errors:\n  const tools = mode.tools?.length ? mode.tools : undefined;\n  const toolWarnings: LanguageModelV1CallWarning[] = [];\n\n  if (tools == null) {\n    return { tools: undefined, tool_choice: undefined, toolWarnings };\n  }\n\n  const toolChoice = mode.toolChoice;\n\n  const sarvamTools: SarvamTools = [];\n\n  for (const tool of tools) {\n    if (tool.type === \"provider-defined\") {\n      toolWarnings.push({ type: \"unsupported-tool\", tool });\n    } else {\n      sarvamTools.push({\n        type: \"function\",\n        function: {\n          name: tool.name,\n          description: tool.description,\n          parameters: tool.parameters,\n        },\n      });\n    }\n  }\n\n  if (toolChoice == null) {\n    return { tools: sarvamTools, tool_choice: undefined, toolWarnings };\n  }\n\n  const type = toolChoice.type;\n\n  switch (type) {\n    case \"auto\":\n    case \"none\":\n    case \"required\":\n      return { tools: sarvamTools, tool_choice: type, toolWarnings };\n    case \"tool\":\n      return {\n        tools: sarvamTools,\n        tool_choice: {\n          type: \"function\",\n          function: {\n            name: toolChoice.toolName,\n          },\n        },\n        toolWarnings,\n      };\n    default: {\n      const _exhaustiveCheck: never = type;\n      throw new UnsupportedFunctionalityError({\n        functionality: `Unsupported tool choice type: ${_exhaustiveCheck}`,\n      });\n    }\n  }\n}\n\nimport { compile } from \"json-schema-to-typescript\";\n\nexport const simulateToolCalling = async (\n  tools: SarvamTools,\n): Promise<string> => {\n  const context = [];\n  const names = [];\n\n  for (const tool of tools) {\n    names.push(tool.function.name);\n\n    const tsType = await compile(\n      tool.function.parameters as object,\n      tool.function.name,\n      {\n        bannerComment: \"\",\n        format: false,\n        declareExternallyReferenced: true,\n        enableConstEnums: true,\n        unreachableDefinitions: false,\n        strictIndexSignatures: false,\n      },\n    );\n    const toolContext = tsType\n      .replace(\n        /export interface (\\w+) \\{/,\n        (_: any, name: string) => `type ${tool.function.name} = {`,\n      )\n      .replace(/\\/\\*\\*\\s*\\n\\s*\\*\\s*(.*?)\\s*\\n\\s*\\*\\//, \"// $1\");\n    context.push(`// ${tool.function.description}\\n${toolContext}`);\n  }\n\n  const text = `These are the available tool you can execute.\n\n${context.join(\"\\n\")}\n\ntype YourToolChoices = {\n 'toolName': '${names.join(\"' | '\")}',\n 'toolData': ${names.join(\" | \")}\n}\n\nRespond normally.\nIf user request to execute any tool, respond with pure JSON format\nMake sure to translate toolData to English.\n\neg:\nconst myChoice: YourToolChoices = {\n    \"toolName\": <name>,\n    \"toolData\": <data>\n}`;\n\n  return text;\n};\n\nexport const extractToolCallData = (\n  jsonObject: object,\n): LanguageModelV1FunctionToolCall | void => {\n\n    type ToolFunction = {\n      toolName: string;\n      toolData: any;\n    };\n    const toolFunction = jsonObject as ToolFunction\n\n    if (!(\"toolName\" in toolFunction)) return;\n    if (!(\"toolData\" in toolFunction)) return;\n\n    return {\n        args: JSON.stringify(toolFunction.toolData),\n        toolCallId: generateId(),\n        toolCallType: \"function\",\n        toolName: toolFunction.toolName,\n    };\n\n};\n\nexport const parseJSON = <T extends object>(\n    text: string,\n):T | void => {\n    const jsonRegex = /\\{(?:[^{}]*|\\{[^{}]*\\})*\\}/g;\n    const jsonMatches = text.match(jsonRegex);\n\n    if (jsonMatches && jsonMatches[0]) {\n        try {\n            const jsonObject = JSON.parse(jsonMatches[0])\n            return jsonObject\n        }\n        catch (error) {}\n    }\n}\n\nexport const simulateJsonSchema = () => \"If user doen't specify, make sure to translate json data content into pure English.\"\n","import type { SpeechModelV1, SpeechModelV1CallWarning } from \"@ai-sdk/provider\";\nimport {\n    combineHeaders,\n    createBinaryResponseHandler,\n    createJsonResponseHandler,\n    parseProviderOptions,\n    postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type { SarvamConfig, SarvamLanguageCode } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport {\n    SarvamProviderOptionsSchema,\n    SarvamSpeechSettings,\n    SpeakerSchema,\n    type SarvamSpeechModelId,\n} from \"./sarvam-speech-settings\";\nimport type { SarvamSpeechAPITypes } from \"./sarvam-api-types\";\nimport { z } from \"zod\";\n\ninterface SarvamSpeechModelConfig extends SarvamConfig {\n    _internal?: {\n        currentDate?: () => Date;\n    };\n    speech?: SarvamSpeechSettings;\n}\n\nexport class SarvamSpeechModel implements SpeechModelV1 {\n    readonly specificationVersion = \"v1\";\n\n    get provider(): string {\n        return this.config.provider;\n    }\n\n    constructor(\n        readonly modelId: SarvamSpeechModelId,\n        readonly languageCode: SarvamLanguageCode,\n        private readonly config: SarvamSpeechModelConfig,\n    ) {}\n\n    private getArgs({\n        text,\n        voice,\n        outputFormat = \"wav\",\n        // speed,\n        // instructions,\n        providerOptions,\n    }: Parameters<SpeechModelV1[\"doGenerate\"]>[0]) {\n        const warnings: SpeechModelV1CallWarning[] = [];\n\n        // Parse provider options\n        const sarvamOptions = parseProviderOptions({\n            provider: \"sarvam\",\n            providerOptions: {\n                sarvam: {\n                    ...providerOptions?.sarvam,\n                    ...this.config.speech,\n                },\n            },\n            schema: SarvamProviderOptionsSchema,\n        });\n\n        const getSpeaker = (): SarvamSpeechCallOptions[\"speaker\"] => {\n            if (sarvamOptions?.speaker) return sarvamOptions.speaker;\n            if (voice) {\n                return SpeakerSchema.parse(voice);\n            }\n\n            switch (this.modelId) {\n                case \"bulbul:v1\":\n                    return \"meera\";\n                case \"bulbul:v2\":\n                    return \"manisha\";\n            }\n\n            return \"meera\";\n        };\n\n        // Create request body\n        const requestBody: Record<string, unknown> = {\n            model: this.modelId,\n            text: text,\n            target_language_code: this.languageCode,\n            speaker: getSpeaker(),\n            // response_format: \"wav\",\n            // speed,\n            // instructions,\n        };\n\n        if (outputFormat) {\n            if (\n                [\"mp3\", \"opus\", \"aac\", \"flac\", \"wav\", \"pcm\"].includes(\n                    outputFormat,\n                )\n            ) {\n                requestBody.response_format = outputFormat;\n            } else {\n                warnings.push({\n                    type: \"unsupported-setting\",\n                    setting: \"outputFormat\",\n                    details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`,\n                });\n            }\n        }\n\n        // Add provider-specific options\n        if (sarvamOptions) {\n            const speechModelOptions: SarvamSpeechAPITypes = {};\n\n            for (const key in speechModelOptions) {\n                const value =\n                    speechModelOptions[key as keyof SarvamSpeechAPITypes];\n                if (value !== undefined) {\n                    requestBody[key] = value;\n                }\n            }\n        }\n\n        return {\n            requestBody,\n            warnings,\n        };\n    }\n\n    async doGenerate(\n        options: Parameters<SpeechModelV1[\"doGenerate\"]>[0],\n    ): Promise<Awaited<ReturnType<SpeechModelV1[\"doGenerate\"]>>> {\n        const currentDate =\n            this.config._internal?.currentDate?.() ?? new Date();\n        const { requestBody, warnings } = this.getArgs(options);\n\n        const {\n            value,\n            responseHeaders,\n            rawValue: rawResponse,\n        } = await postJsonToApi({\n            url: this.config.url({\n                path: \"/text-to-speech\",\n                modelId: this.modelId,\n            }),\n            headers: combineHeaders(this.config.headers(), options.headers),\n            body: requestBody,\n            failedResponseHandler: sarvamFailedResponseHandler,\n            successfulResponseHandler: createJsonResponseHandler(\n                z.object({\n                    request_id: z.string(),\n                    audios: z.array(z.string()),\n                }),\n            ),\n            abortSignal: options.abortSignal,\n            fetch: this.config.fetch,\n        });\n\n        const audio = value.audios[0];\n\n        return {\n            audio,\n            warnings,\n            request: {\n                body: JSON.stringify(requestBody),\n            },\n            response: {\n                timestamp: currentDate,\n                modelId: this.modelId,\n                headers: responseHeaders,\n                body: rawResponse,\n            },\n        };\n    }\n}\n","import { z } from \"zod\";\n\nexport type SarvamSpeechModelId = \"bulbul:v1\" | \"bulbul:v2\" | (string & {});\n\nexport type SarvamSpeechVoices = z.infer<typeof SpeakerSchema>;\n\nexport const SpeakerSchema = z\n    .enum([\n        \"meera\",\n        \"pavithra\",\n        \"maitreyi\",\n        \"arvind\",\n        \"amol\",\n        \"amartya\",\n        \"diya\",\n        \"neel\",\n        \"misha\",\n        \"vian\",\n        \"arjun\",\n        \"maya\",\n        \"anushka\",\n        \"abhilash\",\n        \"manisha\",\n        \"vidya\",\n        \"arya\",\n        \"karun\",\n        \"hitesh\",\n    ])\n    .default(\"meera\");\n\n// https://docs.sarvam.ai/api-reference-docs/text-to-speech/convert\nexport const SarvamProviderOptionsSchema = z\n    .object({\n        speaker: SpeakerSchema,\n        pitch: z.number().min(-0.75).max(0.75).default(0.0),\n        pace: z.number().min(0.5).max(2.0).default(1.0),\n        loudness: z.number().min(0.3).max(3.0).default(1.0),\n        speech_sample_rate: z\n            .union([\n                z.literal(8000),\n                z.literal(16000),\n                z.literal(22050),\n                z.literal(24000),\n            ])\n            .default(22050),\n        enable_preprocessing: z.boolean().default(false),\n    })\n    .partial();\n\n/**\n * Configuration settings for Sarvam Text-to-Speech API.\n *\n * This type defines the customizable options for generating speech audio\n * using the Sarvam Text-to-Speech API. Each property corresponds to a specific\n * feature or parameter supported by the API.\n */\nexport type SarvamSpeechSettings = {\n    /**\n     * The speaker voice to be used for the output audio.\n     *\n     * @default \"meera\"\n     * @example \"meera\" (Default female voice for bulbul:v1)\n     * @example \"arvind\" (Male voice for bulbul:v1)\n     * @example \"anushka\" (Female voice for bulbul:v2)\n     */\n    speaker?: SarvamSpeechVoices;\n\n    /**\n     * Controls the pitch of the audio.\n     *\n     * @default 0.0\n     * @example -0.5 (Deeper voice)\n     * @example 0.5 (Sharper voice)\n     */\n    pitch?: number;\n\n    /**\n     * Controls the speed of the audio.\n     *\n     * @default 1.0\n     * @example 0.5 (Slower speech)\n     * @example 2.0 (Faster speech)\n     */\n    pace?: number;\n\n    /**\n     * Controls the loudness of the audio.\n     *\n     * @default 1.0\n     * @example 0.3 (Quieter audio)\n     * @example 2.5 (Louder audio)\n     */\n    loudness?: number;\n\n    /**\n     * Specifies the sample rate of the output audio.\n     *\n     * @default 22050\n     * @example 8000 (Low-quality audio)\n     * @example 24000 (High-quality audio)\n     */\n    speech_sample_rate?: 8000 | 16000 | 22050 | 24000;\n\n    /**\n     * Enables preprocessing for normalization of English words and numeric entities\n     * (e.g., numbers, dates) in the input text.\n     *\n     * @default false\n     * @example true (Enable preprocessing)\n     * @example false (Disable preprocessing)\n     */\n    enable_preprocessing?: boolean;\n};\n","import {\n    TranscriptionModelV1,\n    TranscriptionModelV1CallWarning,\n} from \"@ai-sdk/provider\";\nimport {\n    combineHeaders,\n    createJsonResponseHandler,\n    parseProviderOptions,\n    postFormDataToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { SarvamConfig, SarvamLanguageCode } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport {\n    SarvamProviderOptionsSchema,\n    SarvamTranscriptionCallOptions,\n    SarvamTranscriptionModelId,\n} from \"./sarvam-transcription-settings\";\n\n// https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe\ninterface SarvamTranscriptionModelConfig extends SarvamConfig {\n    _internal?: {\n        currentDate?: () => Date;\n    };\n    transcription?: SarvamTranscriptionCallOptions;\n}\n\nexport class SarvamTranscriptionModel implements TranscriptionModelV1 {\n    readonly specificationVersion = \"v1\";\n\n    constructor(\n        readonly modelId: SarvamTranscriptionModelId,\n        readonly languageCode: SarvamLanguageCode | \"unknown\",\n        private readonly config: SarvamTranscriptionModelConfig,\n    ) {}\n\n    get provider(): string {\n        return this.config.provider;\n    }\n\n    private getArgs({\n        audio,\n        mediaType,\n        providerOptions,\n    }: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0]) {\n        const warnings: TranscriptionModelV1CallWarning[] = [];\n\n        if (this.modelId === \"saarika:v1\" && this.languageCode === \"unknown\")\n            throw new Error(\n                \"Language code unknown is not supported for model saarika:v1\",\n            );\n\n        const sarvamOptions = parseProviderOptions({\n            provider: \"sarvam\",\n            providerOptions: {\n                sarvam: {\n                    ...providerOptions?.sarvam,\n                    ...this.config.transcription,\n                },\n            },\n            schema: SarvamProviderOptionsSchema,\n        });\n\n        const formData = new FormData();\n        const blob =\n            audio instanceof Blob\n                ? audio\n                : new Blob([audio], { type: mediaType });\n\n        formData.append(\"file\", blob);\n        formData.append(\"model\", this.modelId);\n        if (sarvamOptions) {\n            formData.append(\"language_code\", this.languageCode);\n            formData.append(\n                \"with_timestamps\",\n                sarvamOptions.with_timestamps ? \"true\" : \"false\",\n            );\n            formData.append(\n                \"with_diarization\",\n                sarvamOptions.with_diarization ? \"true\" : \"false\",\n            );\n            if (\n                sarvamOptions.num_speakers !== null &&\n                sarvamOptions.num_speakers !== undefined\n            ) {\n                formData.append(\n                    \"num_speakers\",\n                    sarvamOptions.num_speakers.toString(),\n                );\n            }\n        }\n\n        return {\n            formData,\n            warnings,\n        };\n    }\n\n    async doGenerate(\n        options: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0],\n    ): Promise<Awaited<ReturnType<TranscriptionModelV1[\"doGenerate\"]>>> {\n        const currentDate =\n            this.config._internal?.currentDate?.() ?? new Date();\n        const { formData, warnings } = this.getArgs(options);\n\n        const {\n            value: response,\n            responseHeaders,\n            rawValue: rawResponse,\n        } = await postFormDataToApi({\n            url: this.config.url({\n                path: \"/speech-to-text\",\n                modelId: this.modelId,\n            }),\n            headers: combineHeaders(this.config.headers(), options.headers),\n            formData,\n            failedResponseHandler: sarvamFailedResponseHandler,\n            successfulResponseHandler: createJsonResponseHandler(\n                sarvamTranscriptionResponseSchema,\n            ),\n            abortSignal: options.abortSignal,\n            fetch: this.config.fetch,\n        });\n\n        return {\n            text: response.transcript,\n            segments: response.timestamps\n                ? response.timestamps.words.map((word, index) => ({\n                      text: word,\n                      startSecond:\n                          response.timestamps!.start_time_seconds[index],\n                      endSecond: response.timestamps!.end_time_seconds[index],\n                  }))\n                : [],\n            language: response.language_code\n                ? response.language_code\n                : undefined,\n            durationInSeconds:\n                response.timestamps?.end_time_seconds[\n                    response.timestamps.end_time_seconds.length - 1\n                ] ?? undefined,\n            warnings,\n            response: {\n                timestamp: currentDate,\n                modelId: this.modelId,\n                headers: responseHeaders,\n                body: rawResponse,\n            },\n        };\n    }\n}\n\nconst sarvamTranscriptionResponseSchema = z.object({\n    request_id: z.string().nullable(),\n    transcript: z.string(),\n    language_code: z.string().nullable(),\n    timestamps: z\n        .object({\n            end_time_seconds: z.array(z.number()),\n            start_time_seconds: z.array(z.number()),\n            words: z.array(z.string()),\n        })\n        .optional(),\n    diarized_transcript: z\n        .object({\n            entries: z.array(\n                z.object({\n                    end_time_seconds: z.array(z.number()),\n                    start_time_seconds: z.array(z.number()),\n                    transcript: z.string(),\n                    speaker_id: z.string(),\n                }),\n            ),\n        })\n        .optional(),\n});\n","import { z } from \"zod\";\n\nexport type SarvamTranscriptionModelId =\n    | \"saarika:v2\"\n    | \"saarika:v1\"\n    | \"saarika:flash\"\n    | (string & {});\n\nexport type SarvamSpeechTranslationModelId =\n    | \"saaras:v1\"\n    | \"saaras:v2\"\n    | \"saaras:turbo\"\n    | \"saaras:flash\"\n    | (string & {});\n\nexport const SarvamProviderOptionsSchema = z.object({\n    with_timestamps: z.boolean().nullish().default(false),\n    with_diarization: z.boolean().nullish().default(false),\n    num_speakers: z.number().int().nullish(),\n});\n\nexport type SarvamTranscriptionCallOptions = {\n    with_timestamps?: boolean,\n    /**\n     * Enables speaker diarization, which identifies and separates different speakers in the audio.\n     * When set to true, the API will provide speaker-specific segments in the response.\n     * Note: This parameter is currently in Beta mode.\n     */\n    with_diarization?: boolean,\n    /**\n     * Number of speakers to be detected in the audio.\n     * This is used when with_diarization is set to true.\n     * Can be null.\n     */\n    num_speakers?: number,\n}\n","import {\n    LanguageModelV1,\n    LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n    FetchFunction,\n    combineHeaders,\n    createJsonResponseHandler,\n    postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\nimport {\n    sarvamFailedResponseHandler\n} from \"./sarvam-error\";\nimport { SarvamTranslationSettings } from \"./sarvam-translation-settings\";\n\ntype SarvamTranslationConfig = {\n  provider: string;\n  headers: () => Record<string, string | undefined>;\n  url: (options: { path: string }) => string;\n  fetch?: FetchFunction;\n};\n\nexport class SarvamTranslationModel implements LanguageModelV1 {\n  readonly specificationVersion = \"v1\";\n\n  readonly supportsStructuredOutputs = false;\n  readonly defaultObjectGenerationMode = \"json\";\n\n  readonly modelId: NonNullable<SarvamTranslationSettings[\"model\"]>\n  readonly settings: SarvamTranslationSettings;\n\n  private readonly config: SarvamTranslationConfig;\n\n  constructor(\n    settings: SarvamTranslationSettings,\n    config: SarvamTranslationConfig,\n  ) {\n    this.modelId = settings.model ?? \"mayura:v1\";\n    this.settings = settings;\n    this.config = config;\n  }\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  get supportsImageUrls(): boolean {\n    // image urls can be sent if downloadImages is disabled (default):\n    return false;\n  }\n\n  private getArgs({\n    mode,\n    prompt,\n  }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n    stream: boolean;\n  }) {\n    const type = mode.type;\n\n    const warnings: LanguageModelV1CallWarning[] = [];\n\n    if (this.settings.from === this.settings.to) {\n        throw new Error(\n        \"Source and target languages code must be different.\",\n        );\n    }\n\n    if (this.modelId === \"sarvam-translate:v1\") {\n        if ((this.settings.mode ?? \"formal\") !== \"formal\")\n            throw new Error(\n            \"Sarvam 'sarvam-translate:v1' only support mode formal.\",\n            );\n        if ((this.settings.from ?? \"auto\") === \"auto\")\n            throw new Error(\n            \"Sarvam 'sarvam-translate:v1' requires source language code.\",\n            );\n    }\n\n    if (type !== \"regular\") {\n      const _exhaustiveCheck = type;\n      throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n    }\n\n    const messages = convertToSarvamChatMessages(prompt);\n\n    return {\n      messages,\n      args: {\n        input: messages\n          .filter((m) => m.role === \"user\")\n          .map((m) => m.content)\n          .join(\"\\n\"),\n        source_language_code: this.settings.from ?? \"auto\",\n        target_language_code: this.settings.to,\n        numerals_format: this.settings.numerals_format ?? \"international\",\n        enable_preprocessing: this.settings.enable_preprocessing ?? false,\n        output_script: this.settings.output_script ?? null,\n        speaker_gender: this.settings.speaker_gender ?? \"Male\",\n        mode: this.settings.mode ?? \"formal\",\n        model: this.modelId,\n      },\n      warnings,\n    };\n  }\n\n  async doGenerate(\n    options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n    const { args, warnings, messages } = this.getArgs({\n      ...options,\n      stream: false,\n    });\n\n    const body = JSON.stringify(args);\n\n    const {\n      responseHeaders,\n      value: response,\n      rawValue: rawResponse,\n    } = await postJsonToApi({\n      url: this.config.url({\n        path: \"/translate\",\n      }),\n      headers: combineHeaders(this.config.headers(), options.headers),\n      body: args,\n      failedResponseHandler: sarvamFailedResponseHandler,\n      successfulResponseHandler: createJsonResponseHandler(\n        sarvamTranslationResponseSchema,\n      ),\n      abortSignal: options.abortSignal,\n      fetch: this.config.fetch,\n    });\n\n    const { input: rawPrompt, ...rawSettings } = args;\n\n    const text = response.translated_text ?? undefined;\n\n    return {\n      text,\n      toolCalls: undefined,\n      reasoning: undefined,\n      finishReason: \"unknown\",\n      usage: {\n        promptTokens: NaN,\n        completionTokens: NaN,\n      },\n      rawCall: { rawPrompt, rawSettings },\n      rawResponse: { headers: responseHeaders, body: rawResponse },\n      response: undefined,\n      warnings,\n      request: { body },\n    };\n  }\n\n  async doStream(\n    options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n    throw new Error(\"Translation feature doesn't support streaming yet\");\n  }\n}\n\nconst sarvamTranslationResponseSchema = z.object({\n  translated_text: z.string().nullish(),\n  source_language_code: SarvamLanguageCodeSchema.nullable(),\n  request_id: z.string().nullish(),\n});\n","import { FetchFunction } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\n\nexport type SarvamConfig = {\n    provider: string;\n    url: (options: { modelId: string; path: string }) => string;\n    headers: () => Record<string, string | undefined>;\n    fetch?: FetchFunction;\n    generateId?: () => string;\n};\n\nexport type SarvamLanguageCode = z.infer<typeof SarvamLanguageCodeSchema>;\n\nexport const SarvamLanguageCodeSchema = z.enum([\n    \"hi-IN\",\n    \"bn-IN\",\n    \"kn-IN\",\n    \"ml-IN\",\n    \"mr-IN\",\n    \"od-IN\",\n    \"pa-IN\",\n    \"ta-IN\",\n    \"te-IN\",\n    \"en-IN\",\n    \"gu-IN\",\n]);\n\nexport type SarvamScriptCode = z.infer<typeof SarvamScriptCodeSchema>\n\nexport const SarvamScriptCodeSchema = z.enum([\n    \"Latn\",\n    \"Deva\",\n    \"Beng\",\n    \"Gujr\",\n    \"Knda\",\n    \"Mlym\",\n    \"Orya\",\n    \"Guru\",\n    \"Taml\",\n    \"Telu\",\n])\n","import {\n    LanguageModelV1,\n    LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n    FetchFunction,\n    combineHeaders,\n    createJsonResponseHandler,\n    postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\nimport {\n    sarvamFailedResponseHandler\n} from \"./sarvam-error\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\n\ntype SarvamTransliterateConfig = {\n  provider: string;\n  headers: () => Record<string, string | undefined>;\n  url: (options: { path: string }) => string;\n  fetch?: FetchFunction;\n};\n\nexport class SarvamTransliterateModel implements LanguageModelV1 {\n  readonly specificationVersion = \"v1\";\n\n  readonly supportsStructuredOutputs = false;\n  readonly defaultObjectGenerationMode = \"json\";\n\n  readonly modelId: \"unknown\";\n  readonly settings: SarvamTransliterateSettings;\n\n  private readonly config: SarvamTransliterateConfig;\n\n  constructor(\n    settings: SarvamTransliterateSettings,\n    config: SarvamTransliterateConfig,\n  ) {\n    this.modelId = \"unknown\";\n    this.settings = settings;\n    this.config = config;\n  }\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  get supportsImageUrls(): boolean {\n    // image urls can be sent if downloadImages is disabled (default):\n    return false;\n  }\n\n  private getArgs({\n    mode,\n    prompt,\n  }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n    stream: boolean;\n  }) {\n    const type = mode.type;\n\n    const warnings: LanguageModelV1CallWarning[] = [];\n\n    if (this.settings.from !== \"auto\") {\n      if (this.settings.to !== \"en-IN\" && this.settings.from !== \"en-IN\")\n        throw new Error(\n          \"Sarvam doesn't support Indic-Indic Transliteration yet\",\n        );\n    }\n\n    if (type !== \"regular\") {\n      const _exhaustiveCheck = type;\n      throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n    }\n\n    const messages = convertToSarvamChatMessages(prompt);\n\n    return {\n      messages,\n      args: {\n        input: messages\n          .filter((m) => m.role === \"user\")\n          .map((m) => m.content)\n          .join(\"\\n\"),\n        source_language_code: this.settings.from ?? \"auto\",\n        target_language_code: this.settings.to,\n        numerals_format: this.settings.numerals_format ?? \"international\",\n        ...(this.settings.spoken_form\n          ? {\n              spoken_form: this.settings.spoken_form,\n              spoken_form_numerals_language:\n                this.settings.spoken_form_numerals_language ?? \"english\",\n            }\n          : {}),\n      },\n      warnings,\n    };\n  }\n\n  async doGenerate(\n    options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n    const { args, warnings, messages } = this.getArgs({\n      ...options,\n      stream: false,\n    });\n\n    const body = JSON.stringify(args);\n\n    const {\n      responseHeaders,\n      value: response,\n      rawValue: rawResponse,\n    } = await postJsonToApi({\n      url: this.config.url({\n        path: \"/transliterate\",\n      }),\n      headers: combineHeaders(this.config.headers(), options.headers),\n      body: args,\n      failedResponseHandler: sarvamFailedResponseHandler,\n      successfulResponseHandler: createJsonResponseHandler(\n        sarvamTransliterateResponseSchema,\n      ),\n      abortSignal: options.abortSignal,\n      fetch: this.config.fetch,\n    });\n\n    const { input: rawPrompt, ...rawSettings } = args;\n\n    let text = response.transliterated_text ?? undefined;\n\n    return {\n      text,\n      toolCalls: undefined,\n      reasoning: undefined,\n      finishReason: \"unknown\",\n      usage: {\n        promptTokens: NaN,\n        completionTokens: NaN,\n      },\n      rawCall: { rawPrompt, rawSettings },\n      rawResponse: { headers: responseHeaders, body: rawResponse },\n      response: undefined,\n      warnings,\n      request: { body },\n    };\n  }\n\n  async doStream(\n    options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n    throw new Error(\"Transliterate feature doesn't streaming yet\");\n  }\n}\n\nconst sarvamTransliterateResponseSchema = z.object({\n  transliterated_text: z.string().nullish(),\n  source_language_code: SarvamLanguageCodeSchema.nullable(),\n  request_id: z.string().nullish(),\n});\n","import {\n    LanguageModelV1,\n    LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n    FetchFunction,\n    combineHeaders,\n    createJsonResponseHandler,\n    postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema, SarvamScriptCodeSchema } from \"./sarvam-config\";\nimport {\n    sarvamFailedResponseHandler\n} from \"./sarvam-error\";\n\ntype SarvamLidConfig = {\n  provider: string;\n  headers: () => Record<string, string | undefined>;\n  url: (options: { path: string }) => string;\n  fetch?: FetchFunction;\n};\n\nexport class SarvamLidModel implements LanguageModelV1 {\n  readonly specificationVersion = \"v1\";\n\n  readonly supportsStructuredOutputs = false;\n  readonly defaultObjectGenerationMode = \"json\";\n\n  readonly modelId: \"unknown\";\n\n  private readonly config: SarvamLidConfig;\n\n  constructor(\n    config: SarvamLidConfig,\n  ) {\n    this.modelId = \"unknown\";\n    this.config = config;\n  }\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  get supportsImageUrls(): boolean {\n    // image urls can be sent if downloadImages is disabled (default):\n    return false;\n  }\n\n  private getArgs({\n    mode,\n    prompt,\n  }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n    stream: boolean;\n  }) {\n    const type = mode.type;\n\n    const warnings: LanguageModelV1CallWarning[] = [];\n\n    if (type !== \"regular\") {\n      const _exhaustiveCheck = type;\n      throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n    }\n\n    const messages = convertToSarvamChatMessages(prompt);\n\n    return {\n      messages,\n      args: {\n        input: messages\n          .filter((m) => m.role === \"user\")\n          .map((m) => m.content)\n          .join(\"\\n\"),\n      },\n      warnings,\n    };\n  }\n\n  async doGenerate(\n    options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n    const { args, warnings, messages } = this.getArgs({\n      ...options,\n      stream: false,\n    });\n\n    const body = JSON.stringify(args);\n\n    const {\n      responseHeaders,\n      value: response,\n      rawValue: rawResponse,\n    } = await postJsonToApi({\n      url: this.config.url({\n        path: \"/text-lid\",\n      }),\n      headers: combineHeaders(this.config.headers(), options.headers),\n      body: args,\n      failedResponseHandler: sarvamFailedResponseHandler,\n      successfulResponseHandler: createJsonResponseHandler(\n        sarvamLidResponseSchema,\n      ),\n      abortSignal: options.abortSignal,\n      fetch: this.config.fetch,\n    });\n\n    const { input: rawPrompt, ...rawSettings } = args;\n\n    const text = response.language_code ?? undefined;\n\n    return {\n      text,\n      toolCalls: undefined,\n      reasoning: undefined,\n      finishReason: \"unknown\",\n      usage: {\n        promptTokens: NaN,\n        completionTokens: NaN,\n      },\n      rawCall: { rawPrompt, rawSettings },\n      rawResponse: { headers: responseHeaders, body: rawResponse },\n      response: undefined,\n      warnings,\n      request: { body },\n    };\n  }\n\n  async doStream(\n    options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n    throw new Error(\"Language Identification feature doesn't streaming yet\");\n  }\n}\n\nconst sarvamLidResponseSchema = z.object({\n  script_code: SarvamScriptCodeSchema.nullish(),\n  language_code: SarvamLanguageCodeSchema.nullable(),\n  request_id: z.string().nullish(),\n});\n","import {\n  TranscriptionModelV1,\n  TranscriptionModelV1CallWarning,\n} from \"@ai-sdk/provider\";\nimport {\n  combineHeaders,\n  createJsonResponseHandler,\n  postFormDataToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { SarvamConfig } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport { SarvamSpeechTranslationModelId } from \"./sarvam-transcription-settings\";\n\n// https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe\ninterface SarvamSpeechTranslationModelConfig extends SarvamConfig {\n  _internal?: {\n    currentDate?: () => Date;\n  };\n}\n\nexport class SarvamSpeechTranslationModel implements TranscriptionModelV1 {\n  readonly specificationVersion = \"v1\";\n\n  constructor(\n    readonly modelId: SarvamSpeechTranslationModelId,\n    private readonly config: SarvamSpeechTranslationModelConfig,\n  ) {}\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  private getArgs({\n    audio,\n    mediaType,\n    providerOptions,\n  }: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0]) {\n    const warnings: TranscriptionModelV1CallWarning[] = [];\n\n    const formData = new FormData();\n    const blob =\n      audio instanceof Blob ? audio : new Blob([audio], { type: mediaType });\n\n    formData.append(\"file\", blob);\n    formData.append(\"model\", this.modelId);\n\n    return {\n      formData,\n      warnings,\n    };\n  }\n\n  async doGenerate(\n    options: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0],\n  ): Promise<Awaited<ReturnType<TranscriptionModelV1[\"doGenerate\"]>>> {\n    const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n    const { formData, warnings } = this.getArgs(options);\n\n    const {\n      value: response,\n      responseHeaders,\n      rawValue: rawResponse,\n    } = await postFormDataToApi({\n      url: this.config.url({\n        path: \"/speech-to-text-translate\",\n        modelId: this.modelId,\n      }),\n      headers: combineHeaders(this.config.headers(), options.headers),\n      formData,\n      failedResponseHandler: sarvamFailedResponseHandler,\n      successfulResponseHandler: createJsonResponseHandler(\n        sarvamTranscriptionResponseSchema,\n      ),\n      abortSignal: options.abortSignal,\n      fetch: this.config.fetch,\n    });\n\n    return {\n      text: response.transcript,\n      segments: [],\n      language: response.language_code ? response.language_code : undefined,\n      durationInSeconds: undefined,\n      warnings,\n      response: {\n        timestamp: currentDate,\n        modelId: this.modelId,\n        headers: responseHeaders,\n        body: rawResponse,\n      },\n    };\n  }\n}\n\nconst sarvamTranscriptionResponseSchema = z.object({\n  request_id: z.string().nullable(),\n  transcript: z.string(),\n  language_code: z.string().nullable(),\n  // timestamps: z\n  //   .object({\n  //     end_time_seconds: z.array(z.number()),\n  //     start_time_seconds: z.array(z.number()),\n  //     words: z.array(z.string()),\n  //   })\n  //   .optional(),\n  diarized_transcript: z\n    .object({\n      entries: z.array(\n        z.object({\n          end_time_seconds: z.array(z.number()),\n          start_time_seconds: z.array(z.number()),\n          transcript: z.string(),\n          speaker_id: z.string(),\n        }),\n      ),\n    })\n    .nullable()\n    .optional(),\n});\n"],"mappings":"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","names":["generateId","z","UnsupportedFunctionalityError","z","prompt","_a","generateId","toolCall","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","z","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","combineHeaders","createJsonResponseHandler","parseProviderOptions","z","z","SarvamProviderOptionsSchema","parseProviderOptions","SarvamProviderOptionsSchema","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postJsonToApi","z","z","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postJsonToApi","z","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postJsonToApi","z","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postFormDataToApi","z","postFormDataToApi","combineHeaders","createJsonResponseHandler","sarvamTranscriptionResponseSchema","z"]}