sarvam-ai-sdk 0.0.1
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/CHANGELOG.md +7 -0
- package/README.md +74 -0
- package/dist/index.cjs +1035 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +131 -0
- package/dist/index.d.ts +131 -0
- package/dist/index.js +1037 -0
- package/dist/index.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +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/sarvam-error.ts","../src/sarvam-prepare-tools.ts","../src/map-sarvam-finish-reason.ts","../src/sarvam-transcription-model.ts","../src/sarvam-transcription-settings.ts","../src/sarvam-speech-model.ts","../src/sarvam-speech-settings.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 { SarvamTranscriptionModelId } from \"./sarvam-transcription-settings\";\nimport {\n SarvamTranscriptionCallOptions,\n SarvamTranscriptionModel,\n} from \"./sarvam-transcription-model\";\nimport { SarvamSpeechModelId } from \"./sarvam-speech-settings\";\nimport {\n SarvamSpeechCallOptions,\n SarvamSpeechModel,\n} from \"./sarvam-speech-model\";\nimport { SarvamLanguageCode } from \"./sarvam-config\";\n\nexport interface SarvamProvider {\n /**\nCreates a model for text generation.\n*/\n (\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates an Sarvam chat model for text generation.\n */\n languageModel(\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a model for transcription.\n */\n transcription(\n modelId: SarvamTranscriptionModelId,\n languageCode?: SarvamLanguageCode | \"unknown\",\n settings?: SarvamTranscriptionCallOptions,\n ): TranscriptionModelV1;\n\n /**\nCreates a model for speech.\n */\n speech(\n modelId: SarvamSpeechModelId,\n languageCode: SarvamLanguageCode,\n settings?: SarvamSpeechCallOptions,\n ): SpeechModelV1;\n}\n\nexport interface SarvamProviderSettings {\n /**\nBase URL for the Sarvam API calls.\n@default https://api.sarvam.ai\n */\n baseURL?: string;\n\n /**\nAPI key for authenticating requests.\n@default process.env.SARVAM_API_KEY\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n@default Authorization: `Bearer ${process.env.SARVAM_API_KEY}`, \"api-subscription-key\": process.env.SARVAM_API_KEY\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\nCreate 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?: SarvamSpeechCallOptions,\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 provider = (\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ) => createLanguageModel(modelId, settings);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createChatModel;\n // provider.textEmbeddingModel = (modelId: string) => {\n // throw new NoSuchModelError({\n // modelId,\n // modelType: \"textEmbeddingModel\",\n // });\n // };\n provider.transcription = createTranscriptionModel;\n provider.speech = createSpeechModel;\n\n return provider;\n}\n\n/**\nDefault Sarvam provider instance.\n */\nexport const sarvam = createSarvam();\n","import {\n InvalidResponseDataError,\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\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 { SarvamChatModelId, SarvamChatSettings } from \"./sarvam-chat-settings\";\nimport { sarvamErrorDataSchema, sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport { prepareTools } from \"./sarvam-prepare-tools\";\nimport { mapSarvamFinishReason } from \"./map-sarvam-finish-reason\";\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 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 // 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),\n };\n\n switch (type) {\n case \"regular\": {\n const { tools, tool_choice, toolWarnings } = prepareTools({\n mode,\n });\n return {\n args: {\n ...baseArgs,\n tools,\n tool_choice,\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n case \"object-json\": {\n return {\n args: {\n ...baseArgs,\n response_format:\n // json object response format is not supported for streaming:\n stream === false\n ? { type: \"json_object\" }\n : undefined,\n },\n warnings,\n };\n }\n\n case \"object-tool\": {\n return {\n args: {\n ...baseArgs,\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 } = this.getArgs({ ...options, stream: false });\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 return {\n text: choice.message.content ?? undefined,\n reasoning: choice.message.reasoning ?? undefined,\n 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 })),\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 } = 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:\n createEventSourceResponseHandler(sarvamChatChunkSchema),\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:\n value.x_sarvam.usage.prompt_tokens ??\n undefined,\n completionTokens:\n value.x_sarvam.usage.completion_tokens ??\n undefined,\n };\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = mapSarvamFinishReason(\n choice.finish_reason,\n );\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n\n if (\n delta.reasoning != null &&\n delta.reasoning.length > 0\n ) {\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:\n toolCallDelta.function\n .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 (\n toolCall.function.arguments.length >\n 0\n ) {\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: toolCall.id,\n toolName:\n toolCall.function.name,\n argsTextDelta:\n 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 (\n isParsableJson(\n toolCall.function.arguments,\n )\n ) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId:\n toolCall.id ?? generateId(),\n toolName:\n toolCall.function.name,\n args: toolCall.function\n .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:\n 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\n ? { providerMetadata }\n : {}),\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): SarvamChatPrompt {\n const messages: SarvamChatPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case \"system\": {\n messages.push({ role: \"system\", content });\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 ??\n \"image/jpeg\"\n };base64,${convertUint8ArrayToBase64(part.image)}`,\n },\n };\n }\n case \"file\": {\n throw new UnsupportedFunctionalityError({\n functionality:\n \"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 { 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 UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\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} {\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: Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }> = [];\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","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 {\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 SarvamTranscriptionModelId,\n} from \"./sarvam-transcription-settings\";\n\n// https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe\n\nexport type SarvamTranscriptionCallOptions = z.infer<\n typeof SarvamProviderOptionsSchema\n>;\n\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 /**\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: z.boolean().nullish().default(false),\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: z.number().int().nullish(),\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 SpeakerSchema,\n type SarvamSpeechModelId,\n} from \"./sarvam-speech-settings\";\nimport type { SarvamSpeechAPITypes } from \"./sarvam-api-types\";\nimport { z } from \"zod\";\n\nexport type SarvamSpeechCallOptions = z.infer<\n typeof SarvamProviderOptionsSchema\n>;\n\ninterface SarvamSpeechModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n speech?: SarvamSpeechCallOptions;\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"],"mappings":"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","names":["z","UnsupportedFunctionalityError","z","_a","toolCall","combineHeaders","createJsonResponseHandler","parseProviderOptions","z","z","parseProviderOptions","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","SarvamProviderOptionsSchema","z","parseProviderOptions","SarvamProviderOptionsSchema","postJsonToApi","combineHeaders","createJsonResponseHandler","z"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sarvam-ai-sdk",
|
|
3
|
+
"description": "Sarvam AI Provider support for AI-SDK",
|
|
4
|
+
"version": "0.0.1",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"module": "./dist/index.mjs",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"files": ["dist/**/*", "CHANGELOG.md"],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsup",
|
|
13
|
+
"build:watch": "tsup --watch",
|
|
14
|
+
"clean": "rm -rf dist",
|
|
15
|
+
"lint": "eslint \"./**/*.ts*\"",
|
|
16
|
+
"type-check": "tsc --noEmit",
|
|
17
|
+
"prettier-check": "prettier --check \"./**/*.ts*\"",
|
|
18
|
+
"test": "pnpm test:node && pnpm test:edge",
|
|
19
|
+
"test:edge": "vitest --config vitest.edge.config.js --run",
|
|
20
|
+
"test:node": "vitest --config vitest.node.config.js --run",
|
|
21
|
+
"test:node:watch": "vitest --config vitest.node.config.js"
|
|
22
|
+
},
|
|
23
|
+
"exports": {
|
|
24
|
+
"./package.json": "./package.json",
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"import": "./dist/index.mjs",
|
|
28
|
+
"require": "./dist/index.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@ai-sdk/provider": "1.1.3",
|
|
33
|
+
"@ai-sdk/provider-utils": "2.2.8"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "20.17.24",
|
|
37
|
+
"tsup": "^8",
|
|
38
|
+
"typescript": "5.6.3",
|
|
39
|
+
"zod": "3.23.8"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"zod": "^3.0.0"
|
|
43
|
+
},
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=18"
|
|
46
|
+
},
|
|
47
|
+
"publishConfig": {
|
|
48
|
+
"access": "public"
|
|
49
|
+
},
|
|
50
|
+
"homepage": "https://ai-sdk.dev/docs",
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "git+https://github.com/rajatsandeepsen/sarvam-ai-sdk.git"
|
|
54
|
+
},
|
|
55
|
+
"bugs": {
|
|
56
|
+
"url": "https://github.com/rajatsandeepsen/sarvam-ai-sdk/issues"
|
|
57
|
+
},
|
|
58
|
+
"keywords": ["ai"],
|
|
59
|
+
"type": "module"
|
|
60
|
+
}
|