sarvam-ai-sdk 0.0.3 → 0.0.4

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/dist/index.cjs CHANGED
@@ -396,7 +396,6 @@ var SarvamChatLanguageModel = class {
396
396
  // messages:
397
397
  messages: convertToSarvamChatMessages(prompt2, fakeToolSystemPrompt)
398
398
  });
399
- console.log(type, mode);
400
399
  switch (type) {
401
400
  case "regular": {
402
401
  const { tools, tool_choice, toolWarnings } = prepareTools({
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../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-transcription-model.ts","../src/sarvam-transcription-settings.ts","../src/sarvam-speech-model.ts","../src/sarvam-speech-settings.ts","../src/sarvam-transliterate-model.ts","../src/sarvam-config.ts"],"sourcesContent":["export { createSarvam, sarvam } from \"./sarvam-provider\";\nexport type { SarvamProvider, SarvamProviderSettings } from \"./sarvam-provider\";\n","import {\n LanguageModelV1,\n SpeechModelV1,\n NoSuchModelError,\n ProviderV1,\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 { SarvamTranscriptionCallOptions, SarvamTranscriptionModelId } from \"./sarvam-transcription-settings\";\nimport {\n SarvamTranscriptionModel,\n} from \"./sarvam-transcription-model\";\nimport { SarvamSpeechModelId, SarvamSpeechSettings } from \"./sarvam-speech-settings\";\nimport {\n SarvamSpeechModel,\n} from \"./sarvam-speech-model\";\nimport { SarvamLanguageCode } from \"./sarvam-config\";\nimport { SarvamTransliterateModel } from \"./sarvam-transliterate-model\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\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 languageCode?: SarvamLanguageCode | \"unknown\",\n settings?: SarvamTranscriptionCallOptions,\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 for transliterate.\n */\n transliterate(settings: SarvamTransliterateSettings): 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 ApiKey = loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"SARVAM_API_KEY\",\n description: \"Sarvam\",\n });\n\n const getHeaders = () => ({\n Authorization: `Bearer ${ApiKey}`,\n \"api-subscription-key\": ApiKey,\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 ) => {\n return 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\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 {\n to: settings.to,\n from: settings.from,\n },\n {\n provider: \"sarvam.transliterate\",\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.speech = createSpeechModel;\n provider.transliterate = createTransliterateModel;\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 prepareTools,\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\n const warnings: LanguageModelV1CallWarning[] = [];\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 fakeToolSystemPrompt?: 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, fakeToolSystemPrompt),\n });\n\n console.log(type, mode)\n\n switch (type) {\n case \"regular\": {\n const { tools, tool_choice, toolWarnings } = prepareTools({\n mode,\n });\n\n const fakeSystemPrompt =\n tools && this.settings.simulateToolCalling\n ? await simulateToolCalling(tools)\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, fakeSystemPrompt),\n tools,\n tool_choice,\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n case \"object-json\": {\n return {\n args: {\n ...baseArgs(prompt),\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 fake tool calling\n if (this.settings.simulateToolCalling) {\n if (\n text &&\n text.length !== 0 &&\n (!toolCalls || toolCalls?.length === 0)\n ) {\n const newTools = extractToolCallData(text);\n if (newTools) {\n toolCalls = [newTools];\n text = undefined;\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 text: string,\n): LanguageModelV1FunctionToolCall | void => {\n const jsonRegex = /\\{(?:[^{}]*|\\{[^{}]*\\})*\\}/g;\n const jsonMatches = text.match(jsonRegex);\n\n if (jsonMatches && jsonMatches[0]) {\n try {\n type ToolFunction = {\n toolName: string;\n toolData: any;\n };\n const toolFunction = JSON.parse(jsonMatches[0]) 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 } catch (error) {}\n }\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 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 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 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 { getResponseMetadata } from \"./get-response-metadata\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\nimport {\n sarvamErrorDataSchema,\n sarvamFailedResponseHandler,\n} from \"./sarvam-error\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\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 { 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"],"mappings":"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","names":["import_provider_utils","import_provider","import_provider_utils","import_zod","import_provider_utils","import_provider","import_provider_utils","prompt","_a","toolCall","import_provider_utils","import_zod","import_zod","import_provider_utils","import_zod","SarvamProviderOptionsSchema","import_zod","SarvamProviderOptionsSchema","import_provider_utils","import_zod","import_zod"]}
1
+ {"version":3,"sources":["../src/index.ts","../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-transcription-model.ts","../src/sarvam-transcription-settings.ts","../src/sarvam-speech-model.ts","../src/sarvam-speech-settings.ts","../src/sarvam-transliterate-model.ts","../src/sarvam-config.ts"],"sourcesContent":["export { createSarvam, sarvam } from \"./sarvam-provider\";\nexport type { SarvamProvider, SarvamProviderSettings } from \"./sarvam-provider\";\n","import {\n LanguageModelV1,\n SpeechModelV1,\n NoSuchModelError,\n ProviderV1,\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 { SarvamTranscriptionCallOptions, SarvamTranscriptionModelId } from \"./sarvam-transcription-settings\";\nimport {\n SarvamTranscriptionModel,\n} from \"./sarvam-transcription-model\";\nimport { SarvamSpeechModelId, SarvamSpeechSettings } from \"./sarvam-speech-settings\";\nimport {\n SarvamSpeechModel,\n} from \"./sarvam-speech-model\";\nimport { SarvamLanguageCode } from \"./sarvam-config\";\nimport { SarvamTransliterateModel } from \"./sarvam-transliterate-model\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\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 languageCode?: SarvamLanguageCode | \"unknown\",\n settings?: SarvamTranscriptionCallOptions,\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 for transliterate.\n */\n transliterate(settings: SarvamTransliterateSettings): 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 ApiKey = loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"SARVAM_API_KEY\",\n description: \"Sarvam\",\n });\n\n const getHeaders = () => ({\n Authorization: `Bearer ${ApiKey}`,\n \"api-subscription-key\": ApiKey,\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 ) => {\n return 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\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 {\n to: settings.to,\n from: settings.from,\n },\n {\n provider: \"sarvam.transliterate\",\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.speech = createSpeechModel;\n provider.transliterate = createTransliterateModel;\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 prepareTools,\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\n const warnings: LanguageModelV1CallWarning[] = [];\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 fakeToolSystemPrompt?: 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, fakeToolSystemPrompt),\n });\n\n switch (type) {\n case \"regular\": {\n const { tools, tool_choice, toolWarnings } = prepareTools({\n mode,\n });\n\n const fakeSystemPrompt =\n tools && this.settings.simulateToolCalling\n ? await simulateToolCalling(tools)\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, fakeSystemPrompt),\n tools,\n tool_choice,\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n case \"object-json\": {\n return {\n args: {\n ...baseArgs(prompt),\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 fake tool calling\n if (this.settings.simulateToolCalling) {\n if (\n text &&\n text.length !== 0 &&\n (!toolCalls || toolCalls?.length === 0)\n ) {\n const newTools = extractToolCallData(text);\n if (newTools) {\n toolCalls = [newTools];\n text = undefined;\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 text: string,\n): LanguageModelV1FunctionToolCall | void => {\n const jsonRegex = /\\{(?:[^{}]*|\\{[^{}]*\\})*\\}/g;\n const jsonMatches = text.match(jsonRegex);\n\n if (jsonMatches && jsonMatches[0]) {\n try {\n type ToolFunction = {\n toolName: string;\n toolData: any;\n };\n const toolFunction = JSON.parse(jsonMatches[0]) 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 } catch (error) {}\n }\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 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 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 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 { getResponseMetadata } from \"./get-response-metadata\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\nimport {\n sarvamErrorDataSchema,\n sarvamFailedResponseHandler,\n} from \"./sarvam-error\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\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 { 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"],"mappings":"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","names":["import_provider_utils","import_provider","import_provider_utils","import_zod","import_provider_utils","import_provider","import_provider_utils","prompt","_a","toolCall","import_provider_utils","import_zod","import_zod","import_provider_utils","import_zod","SarvamProviderOptionsSchema","import_zod","SarvamProviderOptionsSchema","import_provider_utils","import_zod","import_zod"]}
package/dist/index.js CHANGED
@@ -389,7 +389,6 @@ var SarvamChatLanguageModel = class {
389
389
  // messages:
390
390
  messages: convertToSarvamChatMessages(prompt2, fakeToolSystemPrompt)
391
391
  });
392
- console.log(type, mode);
393
392
  switch (type) {
394
393
  case "regular": {
395
394
  const { tools, tool_choice, toolWarnings } = prepareTools({
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"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-transcription-model.ts","../src/sarvam-transcription-settings.ts","../src/sarvam-speech-model.ts","../src/sarvam-speech-settings.ts","../src/sarvam-transliterate-model.ts","../src/sarvam-config.ts"],"sourcesContent":["import {\n LanguageModelV1,\n SpeechModelV1,\n NoSuchModelError,\n ProviderV1,\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 { SarvamTranscriptionCallOptions, SarvamTranscriptionModelId } from \"./sarvam-transcription-settings\";\nimport {\n SarvamTranscriptionModel,\n} from \"./sarvam-transcription-model\";\nimport { SarvamSpeechModelId, SarvamSpeechSettings } from \"./sarvam-speech-settings\";\nimport {\n SarvamSpeechModel,\n} from \"./sarvam-speech-model\";\nimport { SarvamLanguageCode } from \"./sarvam-config\";\nimport { SarvamTransliterateModel } from \"./sarvam-transliterate-model\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\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 languageCode?: SarvamLanguageCode | \"unknown\",\n settings?: SarvamTranscriptionCallOptions,\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 for transliterate.\n */\n transliterate(settings: SarvamTransliterateSettings): 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 ApiKey = loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"SARVAM_API_KEY\",\n description: \"Sarvam\",\n });\n\n const getHeaders = () => ({\n Authorization: `Bearer ${ApiKey}`,\n \"api-subscription-key\": ApiKey,\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 ) => {\n return 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\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 {\n to: settings.to,\n from: settings.from,\n },\n {\n provider: \"sarvam.transliterate\",\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.speech = createSpeechModel;\n provider.transliterate = createTransliterateModel;\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 prepareTools,\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\n const warnings: LanguageModelV1CallWarning[] = [];\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 fakeToolSystemPrompt?: 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, fakeToolSystemPrompt),\n });\n\n console.log(type, mode)\n\n switch (type) {\n case \"regular\": {\n const { tools, tool_choice, toolWarnings } = prepareTools({\n mode,\n });\n\n const fakeSystemPrompt =\n tools && this.settings.simulateToolCalling\n ? await simulateToolCalling(tools)\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, fakeSystemPrompt),\n tools,\n tool_choice,\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n case \"object-json\": {\n return {\n args: {\n ...baseArgs(prompt),\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 fake tool calling\n if (this.settings.simulateToolCalling) {\n if (\n text &&\n text.length !== 0 &&\n (!toolCalls || toolCalls?.length === 0)\n ) {\n const newTools = extractToolCallData(text);\n if (newTools) {\n toolCalls = [newTools];\n text = undefined;\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 text: string,\n): LanguageModelV1FunctionToolCall | void => {\n const jsonRegex = /\\{(?:[^{}]*|\\{[^{}]*\\})*\\}/g;\n const jsonMatches = text.match(jsonRegex);\n\n if (jsonMatches && jsonMatches[0]) {\n try {\n type ToolFunction = {\n toolName: string;\n toolData: any;\n };\n const toolFunction = JSON.parse(jsonMatches[0]) 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 } catch (error) {}\n }\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 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 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 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 { getResponseMetadata } from \"./get-response-metadata\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\nimport {\n sarvamErrorDataSchema,\n sarvamFailedResponseHandler,\n} from \"./sarvam-error\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\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 { 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"],"mappings":"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","names":["generateId","z","UnsupportedFunctionalityError","z","prompt","_a","generateId","toolCall","combineHeaders","createJsonResponseHandler","parseProviderOptions","z","z","parseProviderOptions","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","SarvamProviderOptionsSchema","z","parseProviderOptions","SarvamProviderOptionsSchema","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postJsonToApi","z","z","postJsonToApi","combineHeaders","createJsonResponseHandler","z"]}
1
+ {"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-transcription-model.ts","../src/sarvam-transcription-settings.ts","../src/sarvam-speech-model.ts","../src/sarvam-speech-settings.ts","../src/sarvam-transliterate-model.ts","../src/sarvam-config.ts"],"sourcesContent":["import {\n LanguageModelV1,\n SpeechModelV1,\n NoSuchModelError,\n ProviderV1,\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 { SarvamTranscriptionCallOptions, SarvamTranscriptionModelId } from \"./sarvam-transcription-settings\";\nimport {\n SarvamTranscriptionModel,\n} from \"./sarvam-transcription-model\";\nimport { SarvamSpeechModelId, SarvamSpeechSettings } from \"./sarvam-speech-settings\";\nimport {\n SarvamSpeechModel,\n} from \"./sarvam-speech-model\";\nimport { SarvamLanguageCode } from \"./sarvam-config\";\nimport { SarvamTransliterateModel } from \"./sarvam-transliterate-model\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\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 languageCode?: SarvamLanguageCode | \"unknown\",\n settings?: SarvamTranscriptionCallOptions,\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 for transliterate.\n */\n transliterate(settings: SarvamTransliterateSettings): 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 ApiKey = loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"SARVAM_API_KEY\",\n description: \"Sarvam\",\n });\n\n const getHeaders = () => ({\n Authorization: `Bearer ${ApiKey}`,\n \"api-subscription-key\": ApiKey,\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 ) => {\n return 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\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 {\n to: settings.to,\n from: settings.from,\n },\n {\n provider: \"sarvam.transliterate\",\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.speech = createSpeechModel;\n provider.transliterate = createTransliterateModel;\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 prepareTools,\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\n const warnings: LanguageModelV1CallWarning[] = [];\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 fakeToolSystemPrompt?: 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, fakeToolSystemPrompt),\n });\n\n switch (type) {\n case \"regular\": {\n const { tools, tool_choice, toolWarnings } = prepareTools({\n mode,\n });\n\n const fakeSystemPrompt =\n tools && this.settings.simulateToolCalling\n ? await simulateToolCalling(tools)\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, fakeSystemPrompt),\n tools,\n tool_choice,\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n case \"object-json\": {\n return {\n args: {\n ...baseArgs(prompt),\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 fake tool calling\n if (this.settings.simulateToolCalling) {\n if (\n text &&\n text.length !== 0 &&\n (!toolCalls || toolCalls?.length === 0)\n ) {\n const newTools = extractToolCallData(text);\n if (newTools) {\n toolCalls = [newTools];\n text = undefined;\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 text: string,\n): LanguageModelV1FunctionToolCall | void => {\n const jsonRegex = /\\{(?:[^{}]*|\\{[^{}]*\\})*\\}/g;\n const jsonMatches = text.match(jsonRegex);\n\n if (jsonMatches && jsonMatches[0]) {\n try {\n type ToolFunction = {\n toolName: string;\n toolData: any;\n };\n const toolFunction = JSON.parse(jsonMatches[0]) 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 } catch (error) {}\n }\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 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 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 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 { getResponseMetadata } from \"./get-response-metadata\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\nimport {\n sarvamErrorDataSchema,\n sarvamFailedResponseHandler,\n} from \"./sarvam-error\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\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 { 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"],"mappings":"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","names":["generateId","z","UnsupportedFunctionalityError","z","prompt","_a","generateId","toolCall","combineHeaders","createJsonResponseHandler","parseProviderOptions","z","z","parseProviderOptions","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","SarvamProviderOptionsSchema","z","parseProviderOptions","SarvamProviderOptionsSchema","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postJsonToApi","z","z","postJsonToApi","combineHeaders","createJsonResponseHandler","z"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sarvam-ai-sdk",
3
3
  "description": "Sarvam AI Provider support for AI-SDK",
4
- "version": "0.0.3",
4
+ "version": "0.0.4",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
7
7
  "main": "./dist/index.js",