sarvam-ai-sdk 0.1.0 → 0.1.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/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1484,14 +1484,14 @@ var sarvamTranscriptionResponseSchema2 = import_zod11.z.object({
|
|
|
1484
1484
|
function createSarvam(options = {}) {
|
|
1485
1485
|
var _a;
|
|
1486
1486
|
const baseURL = (_a = (0, import_provider_utils11.withoutTrailingSlash)(options.baseURL)) != null ? _a : "https://api.sarvam.ai";
|
|
1487
|
-
const
|
|
1487
|
+
const getApiKey = () => (0, import_provider_utils11.loadApiKey)({
|
|
1488
1488
|
apiKey: options.apiKey,
|
|
1489
1489
|
environmentVariableName: "SARVAM_API_KEY",
|
|
1490
1490
|
description: "Sarvam"
|
|
1491
1491
|
});
|
|
1492
1492
|
const getHeaders = () => ({
|
|
1493
|
-
Authorization: `Bearer ${
|
|
1494
|
-
"api-subscription-key":
|
|
1493
|
+
Authorization: `Bearer ${getApiKey()}`,
|
|
1494
|
+
"api-subscription-key": getApiKey(),
|
|
1495
1495
|
...options.headers
|
|
1496
1496
|
});
|
|
1497
1497
|
const createChatModel = (modelId, settings = {}) => new SarvamChatLanguageModel(modelId, settings, {
|
package/dist/index.js.map
CHANGED
|
@@ -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-speech-model.ts","../src/sarvam-speech-settings.ts","../src/sarvam-transcription-model.ts","../src/sarvam-transcription-settings.ts","../src/sarvam-translation-model.ts","../src/sarvam-config.ts","../src/sarvam-transliterate-model.ts","../src/sarvam-lid-model.ts","../src/sarvam-speech-translation-model.ts"],"sourcesContent":["export { createSarvam, sarvam } from \"./sarvam-provider\";\nexport type { SarvamProvider, SarvamProviderSettings } from \"./sarvam-provider\";\n","import {\n LanguageModelV1,\n SpeechModelV1,\n TranscriptionModelV1\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from \"@ai-sdk/provider-utils\";\nimport { SarvamChatLanguageModel } from \"./sarvam-chat-language-model\";\nimport { SarvamChatModelId, SarvamChatSettings } from \"./sarvam-chat-settings\";\nimport { SarvamLanguageCode } from \"./sarvam-config\";\nimport {\n SarvamSpeechModel,\n} from \"./sarvam-speech-model\";\nimport { SarvamSpeechModelId, SarvamSpeechSettings } from \"./sarvam-speech-settings\";\nimport {\n SarvamTranscriptionModel,\n} from \"./sarvam-transcription-model\";\nimport { SarvamSpeechTranslationModelId, SarvamTranscriptionCallOptions, SarvamTranscriptionModelId } from \"./sarvam-transcription-settings\";\nimport { SarvamTranslationModel } from \"./sarvam-translation-model\";\nimport { SarvamTranslationSettings } from \"./sarvam-translation-settings\";\nimport { SarvamTransliterateModel } from \"./sarvam-transliterate-model\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\nimport { SarvamLidModel } from \"./sarvam-lid-model\";\nimport { SarvamSpeechTranslationModel } from \"./sarvam-speech-translation-model\";\n\nexport interface SarvamProvider {\n /**\n * Creates a model for text generation.\n */\n (modelId: SarvamChatModelId, settings?: SarvamChatSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam chat model for text generation.\n */\n languageModel(\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ): LanguageModelV1;\n\n /**\n * Creates a Sarvam model for transcription.\n */\n transcription(\n modelId: SarvamTranscriptionModelId,\n /**\n * Audio source language code\n *\n * @default unknown\n */\n languageCode?: SarvamLanguageCode | \"unknown\",\n settings?: SarvamTranscriptionCallOptions,\n ): TranscriptionModelV1;\n\n /**\n * Creates a Sarvam model for Speech translation.\n */\n speechTranslation(\n modelId: SarvamSpeechTranslationModelId,\n ): TranscriptionModelV1;\n\n /**\n * Creates a Sarvam model for speech.\n */\n speech(\n modelId: SarvamSpeechModelId,\n languageCode: SarvamLanguageCode,\n settings?: SarvamSpeechSettings,\n ): SpeechModelV1;\n\n /**\n * Creates an Sarvam model for transliterate.\n */\n transliterate(settings: SarvamTransliterateSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam model for translation.\n */\n translation(settings: SarvamTranslationSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam model for language identification.\n */\n languageIdentification(): LanguageModelV1;\n}\n\nexport interface SarvamProviderSettings {\n /**\n * URL for the Sarvam API calls.\n * @default https://api.sarvam.ai\n */\n baseURL?: string;\n\n /**\n * API key for authenticating requests.\n * @default process.env.SARVAM_API_KEY\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n * @default\n Authorization: `Bearer ${process.env.SARVAM_API_KEY}`,\n \"api-subscription-key\": process.env.SARVAM_API_KEY\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n* Create an Sarvam provider instance.\n*/\nexport function createSarvam(\n options: SarvamProviderSettings = {},\n): SarvamProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? \"https://api.sarvam.ai\";\n\n const 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 ) => new SarvamTranscriptionModel(modelId, languageCode, {\n provider: \"sarvam.transcription\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n transcription: settings,\n });\n\n const createSpeechTranslation = (\n modelId: SarvamTranscriptionModelId\n ) => new SarvamSpeechTranslationModel(modelId, {\n provider: \"sarvam.transcription\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createSpeechModel = (\n modelId: SarvamSpeechModelId,\n languageCode: SarvamLanguageCode,\n settings?: SarvamSpeechSettings,\n ) =>\n new SarvamSpeechModel(modelId, languageCode, {\n provider: \"sarvam.speech\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n speech: settings,\n });\n\n const createTransliterateModel = (settings: SarvamTransliterateSettings) =>\n new SarvamTransliterateModel(\n settings,\n {\n provider: \"sarvam.transliterate\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const createTranslationModel = (settings: SarvamTranslationSettings) =>\n new SarvamTranslationModel(\n settings,\n {\n provider: \"sarvam.translation\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const createLidModel = () =>\n new SarvamLidModel(\n {\n provider: \"sarvam.lid\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const provider = (\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ) => createLanguageModel(modelId, settings);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createChatModel;\n provider.transcription = createTranscriptionModel;\n provider.speechTranslation = createSpeechTranslation;\n provider.speech = createSpeechModel;\n provider.transliterate = createTransliterateModel;\n provider.translation = createTranslationModel;\n provider.languageIdentification = createLidModel;\n\n return provider;\n}\n\n/**\n* Default Sarvam provider instance.\n*/\nexport const sarvam = createSarvam();\n","import {\n InvalidResponseDataError,\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1FunctionToolCall,\n LanguageModelV1Prompt,\n LanguageModelV1ProviderMetadata,\n LanguageModelV1StreamPart,\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n ParseResult,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { getResponseMetadata } from \"./get-response-metadata\";\nimport { mapSarvamFinishReason } from \"./map-sarvam-finish-reason\";\nimport { SarvamChatModelId, SarvamChatSettings } from \"./sarvam-chat-settings\";\nimport {\n sarvamErrorDataSchema,\n sarvamFailedResponseHandler,\n} from \"./sarvam-error\";\nimport {\n extractToolCallData,\n parseJSON,\n prepareTools,\n simulateJsonSchema,\n simulateToolCalling,\n} from \"./sarvam-prepare-tools\";\n\ntype SarvamChatConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: SarvamChatModelId;\n readonly settings: SarvamChatSettings;\n\n private readonly config: SarvamChatConfig;\n\n constructor(\n modelId: SarvamChatModelId,\n settings: SarvamChatSettings,\n config: SarvamChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return !this.settings.downloadImages;\n }\n\n private async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n stream,\n providerMetadata,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n const simulate = this.settings.simulate\n\n if (type === \"object-json\" && simulate === \"tool-calling\")\n throw new Error('Use { simulate: \"json-object\" } with generateObject()')\n\n if (type === \"regular\" && simulate === \"json-object\")\n throw new Error('Use { simulate: \"tool-calling\" } with generateText()')\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (stream) {\n warnings.push({\n type: \"other\",\n message: \"Streaming is still experimental for Sarvam\",\n });\n }\n\n if (topK != null) {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"topK\",\n });\n }\n\n if (\n responseFormat != null &&\n responseFormat.type === \"json\" &&\n responseFormat.schema != null\n ) {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"responseFormat\",\n details: \"JSON response format schema is not supported\",\n });\n }\n\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: providerMetadata,\n schema: z.object({\n reasoningFormat: z.enum([\"parsed\", \"raw\", \"hidden\"]).nullish(),\n }),\n });\n\n const baseArgs = (\n prompt: LanguageModelV1Prompt,\n extraSystemPrompt?: string,\n ) => ({\n // model id:\n model: this.modelId,\n\n // model specific settings:\n user: this.settings.user,\n parallel_tool_calls: this.settings.parallelToolCalls,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n\n // response format:\n response_format:\n // json object response format is not supported for streaming:\n stream === false && responseFormat?.type === \"json\"\n ? { type: \"json_object\" }\n : undefined,\n\n // provider options:\n reasoning_format: sarvamOptions?.reasoningFormat,\n\n // messages:\n messages: convertToSarvamChatMessages(prompt, extraSystemPrompt),\n });\n\n switch (type) {\n case \"regular\": {\n const { tools, tool_choice, toolWarnings } = prepareTools({\n mode,\n });\n\n const extraSystemPrompt =\n tools && simulate === \"tool-calling\"\n ? await simulateToolCalling(tools)\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, extraSystemPrompt),\n tools,\n tool_choice,\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n case \"object-json\": {\n const extraSystemPrompt = simulate === \"json-object\"\n ? simulateJsonSchema()\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, extraSystemPrompt),\n response_format:\n // json object response format is not supported for streaming:\n stream === false ? { type: \"json_object\" } : undefined,\n },\n warnings,\n };\n }\n\n case \"object-tool\": {\n return {\n args: {\n ...baseArgs(prompt),\n tool_choice: {\n type: \"function\",\n function: { name: mode.tool.name },\n },\n tools: [\n {\n type: \"function\",\n function: {\n name: mode.tool.name,\n description: mode.tool.description,\n parameters: mode.tool.parameters,\n },\n },\n ],\n },\n warnings,\n };\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings } = await this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n const choice = response.choices[0];\n\n let text = choice.message.content ?? undefined;\n\n let toolCalls = choice.message.tool_calls?.map((toolCall) => ({\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments!,\n })) as LanguageModelV1FunctionToolCall[] | undefined;\n\n // simulate tool calling through prompt engineering\n if (this.settings.simulate === \"tool-calling\") {\n if (text && text.length !== 0) {\n const jsonObject = parseJSON(text);\n if (jsonObject) {\n const newTools = extractToolCallData(jsonObject);\n if (newTools) {\n toolCalls = [newTools];\n text = undefined;\n }\n }\n }\n }\n\n // simulate JSON object generation through prompt engineering\n if (this.settings.simulate === \"json-object\") {\n if (text && text.length !== 0) {\n const jsonObject = parseJSON(text);\n if (jsonObject) {\n const newTools = extractToolCallData(jsonObject);\n text = JSON.stringify(jsonObject);\n }\n }\n }\n\n return {\n text,\n toolCalls,\n reasoning: choice.message.reasoning ?? undefined,\n finishReason: mapSarvamFinishReason(choice.finish_reason),\n usage: {\n promptTokens: response.usage?.prompt_tokens ?? NaN,\n completionTokens: response.usage?.completion_tokens ?? NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: getResponseMetadata(response),\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n const { args, warnings } = await this.getArgs({ ...options, stream: true });\n\n const body = JSON.stringify({ ...args, stream: true });\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...args,\n stream: true,\n },\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n sarvamChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const toolCalls: Array<{\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n let finishReason: LanguageModelV1FinishReason = \"unknown\";\n let usage: {\n promptTokens: number | undefined;\n completionTokens: number | undefined;\n } = {\n promptTokens: undefined,\n completionTokens: undefined,\n };\n let isFirstChunk = true;\n\n let providerMetadata: LanguageModelV1ProviderMetadata | undefined;\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof sarvamChatChunkSchema>>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = \"error\";\n controller.enqueue({\n type: \"error\",\n error: chunk.error,\n });\n return;\n }\n\n const value = chunk.value;\n\n // handle error chunks:\n if (\"error\" in value) {\n finishReason = \"error\";\n controller.enqueue({\n type: \"error\",\n error: value.error,\n });\n return;\n }\n\n if (isFirstChunk) {\n isFirstChunk = false;\n\n controller.enqueue({\n type: \"response-metadata\",\n ...getResponseMetadata(value),\n });\n }\n\n if (value.x_sarvam?.usage != null) {\n usage = {\n promptTokens: value.x_sarvam.usage.prompt_tokens ?? undefined,\n completionTokens:\n value.x_sarvam.usage.completion_tokens ?? undefined,\n };\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = mapSarvamFinishReason(choice.finish_reason);\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.reasoning != null && delta.reasoning.length > 0) {\n controller.enqueue({\n type: \"reasoning\",\n textDelta: delta.reasoning,\n });\n }\n\n if (delta.content != null && delta.content.length > 0) {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: delta.content,\n });\n }\n\n if (delta.tool_calls != null) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n if (toolCalls[index] == null) {\n if (toolCallDelta.type !== \"function\") {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: \"function\",\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? \"\",\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function!.arguments +=\n toolCallDelta.function?.arguments ?? \"\";\n }\n\n // send delta\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCallDelta.function.arguments ?? \"\",\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: {\n promptTokens: usage.promptTokens ?? NaN,\n completionTokens: usage.completionTokens ?? NaN,\n },\n ...(providerMetadata != null ? { providerMetadata } : {}),\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings,\n request: { body },\n };\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst sarvamChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n content: z.string().nullish(),\n reasoning: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n index: z.number(),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst sarvamChatChunkSchema = z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z\n .object({\n content: z.string().nullish(),\n reasoning: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z.literal(\"function\").optional(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullable().optional(),\n index: z.number(),\n }),\n ),\n x_sarvam: z\n .object({\n usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n })\n .nullish(),\n })\n .nullish(),\n }),\n sarvamErrorDataSchema,\n]);\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { convertUint8ArrayToBase64 } from \"@ai-sdk/provider-utils\";\nimport { SarvamChatPrompt } from \"./sarvam-api-types\";\n\nexport function convertToSarvamChatMessages(\n prompt: LanguageModelV1Prompt,\n fakeToolSystemPrompt?: string,\n): SarvamChatPrompt {\n const messages: SarvamChatPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case \"system\": {\n const contentData = fakeToolSystemPrompt\n ? `${content}\\n\\n${fakeToolSystemPrompt}`\n : content;\n messages.push({ role: \"system\", content: contentData });\n break;\n }\n\n case \"user\": {\n if (content.length === 1 && content[0].type === \"text\") {\n messages.push({ role: \"user\", content: content[0].text });\n break;\n }\n\n messages.push({\n role: \"user\",\n content: content.map((part) => {\n switch (part.type) {\n case \"text\": {\n return { type: \"text\", text: part.text };\n }\n case \"image\": {\n return {\n type: \"image_url\",\n image_url: {\n url:\n part.image instanceof URL\n ? part.image.toString()\n : `data:${\n part.mimeType ?? \"image/jpeg\"\n };base64,${convertUint8ArrayToBase64(part.image)}`,\n },\n };\n }\n case \"file\": {\n throw new UnsupportedFunctionalityError({\n functionality: \"File content parts in user messages\",\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case \"assistant\": {\n let text = \"\";\n const toolCalls: Array<{\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case \"text\": {\n text += part.text;\n break;\n }\n case \"tool-call\": {\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.args),\n },\n });\n break;\n }\n }\n }\n\n messages.push({\n role: \"assistant\",\n content: text,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case \"tool\": {\n for (const toolResponse of content) {\n messages.push({\n role: \"tool\",\n tool_call_id: toolResponse.toolCallId,\n content: JSON.stringify(toolResponse.result),\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import { LanguageModelV1FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapSarvamFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n return \"length\";\n case \"content_filter\":\n return \"content-filter\";\n case \"function_call\":\n case \"tool_calls\":\n return \"tool-calls\";\n default:\n return \"unknown\";\n }\n}\n","import { z } from \"zod\";\nimport { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\n\nexport const sarvamErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n }),\n});\n\nexport type SarvamErrorData = z.infer<typeof sarvamErrorDataSchema>;\n\nexport const sarvamFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: sarvamErrorDataSchema,\n errorToMessage: (data) => data.error.message,\n});\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FunctionToolCall,\n UnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\n\ntype SarvamTools = Array<{\n type: \"function\";\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n}>;\n\nexport function prepareTools({\n mode,\n}: {\n mode: Parameters<LanguageModelV1[\"doGenerate\"]>[0][\"mode\"] & {\n type: \"regular\";\n };\n}): {\n tools:\n | undefined\n | Array<{\n type: \"function\";\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n tool_choice:\n | { type: \"function\"; function: { name: string } }\n | \"auto\"\n | \"none\"\n | \"required\"\n | undefined;\n toolWarnings: LanguageModelV1CallWarning[];\n fakeTools?: string;\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n const toolWarnings: LanguageModelV1CallWarning[] = [];\n\n if (tools == null) {\n return { tools: undefined, tool_choice: undefined, toolWarnings };\n }\n\n const toolChoice = mode.toolChoice;\n\n const sarvamTools: SarvamTools = [];\n\n for (const tool of tools) {\n if (tool.type === \"provider-defined\") {\n toolWarnings.push({ type: \"unsupported-tool\", tool });\n } else {\n sarvamTools.push({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: sarvamTools, tool_choice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case \"auto\":\n case \"none\":\n case \"required\":\n return { tools: sarvamTools, tool_choice: type, toolWarnings };\n case \"tool\":\n return {\n tools: sarvamTools,\n tool_choice: {\n type: \"function\",\n function: {\n name: toolChoice.toolName,\n },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `Unsupported tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n\nimport { compile } from \"json-schema-to-typescript\";\n\nexport const simulateToolCalling = async (\n tools: SarvamTools,\n): Promise<string> => {\n const context = [];\n const names = [];\n\n for (const tool of tools) {\n names.push(tool.function.name);\n\n const tsType = await compile(\n tool.function.parameters as object,\n tool.function.name,\n {\n bannerComment: \"\",\n format: false,\n declareExternallyReferenced: true,\n enableConstEnums: true,\n unreachableDefinitions: false,\n strictIndexSignatures: false,\n },\n );\n const toolContext = tsType\n .replace(\n /export interface (\\w+) \\{/,\n (_: any, name: string) => `type ${tool.function.name} = {`,\n )\n .replace(/\\/\\*\\*\\s*\\n\\s*\\*\\s*(.*?)\\s*\\n\\s*\\*\\//, \"// $1\");\n context.push(`// ${tool.function.description}\\n${toolContext}`);\n }\n\n const text = `These are the available tool you can execute.\n\n${context.join(\"\\n\")}\n\ntype YourToolChoices = {\n 'toolName': '${names.join(\"' | '\")}',\n 'toolData': ${names.join(\" | \")}\n}\n\nRespond normally.\nIf user request to execute any tool, respond with pure JSON format\nMake sure to translate toolData to English.\n\neg:\nconst myChoice: YourToolChoices = {\n \"toolName\": <name>,\n \"toolData\": <data>\n}`;\n\n return text;\n};\n\nexport const extractToolCallData = (\n jsonObject: object,\n): LanguageModelV1FunctionToolCall | void => {\n\n type ToolFunction = {\n toolName: string;\n toolData: any;\n };\n const toolFunction = jsonObject as ToolFunction\n\n if (!(\"toolName\" in toolFunction)) return;\n if (!(\"toolData\" in toolFunction)) return;\n\n return {\n args: JSON.stringify(toolFunction.toolData),\n toolCallId: generateId(),\n toolCallType: \"function\",\n toolName: toolFunction.toolName,\n };\n\n};\n\nexport const parseJSON = <T extends object>(\n text: string,\n):T | void => {\n const jsonRegex = /\\{(?:[^{}]*|\\{[^{}]*\\})*\\}/g;\n const jsonMatches = text.match(jsonRegex);\n\n if (jsonMatches && jsonMatches[0]) {\n try {\n const jsonObject = JSON.parse(jsonMatches[0])\n return jsonObject\n }\n catch (error) {}\n }\n}\n\nexport const simulateJsonSchema = () => \"If user doen't specify, make sure to translate json data content into pure English.\"\n","import type { SpeechModelV1, SpeechModelV1CallWarning } from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type { SarvamConfig, SarvamLanguageCode } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport {\n SarvamProviderOptionsSchema,\n SarvamSpeechSettings,\n SpeakerSchema,\n type SarvamSpeechModelId,\n} from \"./sarvam-speech-settings\";\nimport type { SarvamSpeechAPITypes } from \"./sarvam-api-types\";\nimport { z } from \"zod\";\n\ninterface SarvamSpeechModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n speech?: SarvamSpeechSettings;\n}\n\nexport class SarvamSpeechModel implements SpeechModelV1 {\n readonly specificationVersion = \"v1\";\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: SarvamSpeechModelId,\n readonly languageCode: SarvamLanguageCode,\n private readonly config: SarvamSpeechModelConfig,\n ) {}\n\n private getArgs({\n text,\n voice,\n outputFormat = \"wav\",\n // speed,\n // instructions,\n providerOptions,\n }: Parameters<SpeechModelV1[\"doGenerate\"]>[0]) {\n const warnings: SpeechModelV1CallWarning[] = [];\n\n // Parse provider options\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: {\n sarvam: {\n ...providerOptions?.sarvam,\n ...this.config.speech,\n },\n },\n schema: SarvamProviderOptionsSchema,\n });\n\n const getSpeaker = (): SarvamSpeechCallOptions[\"speaker\"] => {\n if (sarvamOptions?.speaker) return sarvamOptions.speaker;\n if (voice) {\n return SpeakerSchema.parse(voice);\n }\n\n switch (this.modelId) {\n case \"bulbul:v1\":\n return \"meera\";\n case \"bulbul:v2\":\n return \"manisha\";\n }\n\n return \"meera\";\n };\n\n // Create request body\n const requestBody: Record<string, unknown> = {\n model: this.modelId,\n text: text,\n target_language_code: this.languageCode,\n speaker: getSpeaker(),\n // response_format: \"wav\",\n // speed,\n // instructions,\n };\n\n if (outputFormat) {\n if (\n [\"mp3\", \"opus\", \"aac\", \"flac\", \"wav\", \"pcm\"].includes(\n outputFormat,\n )\n ) {\n requestBody.response_format = outputFormat;\n } else {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"outputFormat\",\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`,\n });\n }\n }\n\n // Add provider-specific options\n if (sarvamOptions) {\n const speechModelOptions: SarvamSpeechAPITypes = {};\n\n for (const key in speechModelOptions) {\n const value =\n speechModelOptions[key as keyof SarvamSpeechAPITypes];\n if (value !== undefined) {\n requestBody[key] = value;\n }\n }\n }\n\n return {\n requestBody,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV1[\"doGenerate\"]>>> {\n const currentDate =\n this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = this.getArgs(options);\n\n const {\n value,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/text-to-speech\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n z.object({\n request_id: z.string(),\n audios: z.array(z.string()),\n }),\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const audio = value.audios[0];\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import { z } from \"zod\";\n\nexport type SarvamSpeechModelId = \"bulbul:v1\" | \"bulbul:v2\" | (string & {});\n\nexport type SarvamSpeechVoices = z.infer<typeof SpeakerSchema>;\n\nexport const SpeakerSchema = z\n .enum([\n \"meera\",\n \"pavithra\",\n \"maitreyi\",\n \"arvind\",\n \"amol\",\n \"amartya\",\n \"diya\",\n \"neel\",\n \"misha\",\n \"vian\",\n \"arjun\",\n \"maya\",\n \"anushka\",\n \"abhilash\",\n \"manisha\",\n \"vidya\",\n \"arya\",\n \"karun\",\n \"hitesh\",\n ])\n .default(\"meera\");\n\n// https://docs.sarvam.ai/api-reference-docs/text-to-speech/convert\nexport const SarvamProviderOptionsSchema = z\n .object({\n speaker: SpeakerSchema,\n pitch: z.number().min(-0.75).max(0.75).default(0.0),\n pace: z.number().min(0.5).max(2.0).default(1.0),\n loudness: z.number().min(0.3).max(3.0).default(1.0),\n speech_sample_rate: z\n .union([\n z.literal(8000),\n z.literal(16000),\n z.literal(22050),\n z.literal(24000),\n ])\n .default(22050),\n enable_preprocessing: z.boolean().default(false),\n })\n .partial();\n\n/**\n * Configuration settings for Sarvam Text-to-Speech API.\n *\n * This type defines the customizable options for generating speech audio\n * using the Sarvam Text-to-Speech API. Each property corresponds to a specific\n * feature or parameter supported by the API.\n */\nexport type SarvamSpeechSettings = {\n /**\n * The speaker voice to be used for the output audio.\n *\n * @default \"meera\"\n * @example \"meera\" (Default female voice for bulbul:v1)\n * @example \"arvind\" (Male voice for bulbul:v1)\n * @example \"anushka\" (Female voice for bulbul:v2)\n */\n speaker?: SarvamSpeechVoices;\n\n /**\n * Controls the pitch of the audio.\n *\n * @default 0.0\n * @example -0.5 (Deeper voice)\n * @example 0.5 (Sharper voice)\n */\n pitch?: number;\n\n /**\n * Controls the speed of the audio.\n *\n * @default 1.0\n * @example 0.5 (Slower speech)\n * @example 2.0 (Faster speech)\n */\n pace?: number;\n\n /**\n * Controls the loudness of the audio.\n *\n * @default 1.0\n * @example 0.3 (Quieter audio)\n * @example 2.5 (Louder audio)\n */\n loudness?: number;\n\n /**\n * Specifies the sample rate of the output audio.\n *\n * @default 22050\n * @example 8000 (Low-quality audio)\n * @example 24000 (High-quality audio)\n */\n speech_sample_rate?: 8000 | 16000 | 22050 | 24000;\n\n /**\n * Enables preprocessing for normalization of English words and numeric entities\n * (e.g., numbers, dates) in the input text.\n *\n * @default false\n * @example true (Enable preprocessing)\n * @example false (Disable preprocessing)\n */\n enable_preprocessing?: boolean;\n};\n","import {\n TranscriptionModelV1,\n TranscriptionModelV1CallWarning,\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postFormDataToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { SarvamConfig, SarvamLanguageCode } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport {\n SarvamProviderOptionsSchema,\n SarvamTranscriptionCallOptions,\n SarvamTranscriptionModelId,\n} from \"./sarvam-transcription-settings\";\n\n// https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe\ninterface SarvamTranscriptionModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n transcription?: SarvamTranscriptionCallOptions;\n}\n\nexport class SarvamTranscriptionModel implements TranscriptionModelV1 {\n readonly specificationVersion = \"v1\";\n\n constructor(\n readonly modelId: SarvamTranscriptionModelId,\n readonly languageCode: SarvamLanguageCode | \"unknown\",\n private readonly config: SarvamTranscriptionModelConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0]) {\n const warnings: TranscriptionModelV1CallWarning[] = [];\n\n if (this.modelId === \"saarika:v1\" && this.languageCode === \"unknown\")\n throw new Error(\n \"Language code unknown is not supported for model saarika:v1\",\n );\n\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: {\n sarvam: {\n ...providerOptions?.sarvam,\n ...this.config.transcription,\n },\n },\n schema: SarvamProviderOptionsSchema,\n });\n\n const formData = new FormData();\n const blob =\n audio instanceof Blob\n ? audio\n : new Blob([audio], { type: mediaType });\n\n formData.append(\"file\", blob);\n formData.append(\"model\", this.modelId);\n if (sarvamOptions) {\n formData.append(\"language_code\", this.languageCode);\n formData.append(\n \"with_timestamps\",\n sarvamOptions.with_timestamps ? \"true\" : \"false\",\n );\n formData.append(\n \"with_diarization\",\n sarvamOptions.with_diarization ? \"true\" : \"false\",\n );\n if (\n sarvamOptions.num_speakers !== null &&\n sarvamOptions.num_speakers !== undefined\n ) {\n formData.append(\n \"num_speakers\",\n sarvamOptions.num_speakers.toString(),\n );\n }\n }\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV1[\"doGenerate\"]>>> {\n const currentDate =\n this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: this.config.url({\n path: \"/speech-to-text\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text: response.transcript,\n segments: response.timestamps\n ? response.timestamps.words.map((word, index) => ({\n text: word,\n startSecond:\n response.timestamps!.start_time_seconds[index],\n endSecond: response.timestamps!.end_time_seconds[index],\n }))\n : [],\n language: response.language_code\n ? response.language_code\n : undefined,\n durationInSeconds:\n response.timestamps?.end_time_seconds[\n response.timestamps.end_time_seconds.length - 1\n ] ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst sarvamTranscriptionResponseSchema = z.object({\n request_id: z.string().nullable(),\n transcript: z.string(),\n language_code: z.string().nullable(),\n timestamps: z\n .object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n words: z.array(z.string()),\n })\n .optional(),\n diarized_transcript: z\n .object({\n entries: z.array(\n z.object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n transcript: z.string(),\n speaker_id: z.string(),\n }),\n ),\n })\n .optional(),\n});\n","import { z } from \"zod\";\n\nexport type SarvamTranscriptionModelId =\n | \"saarika:v2\"\n | \"saarika:v1\"\n | \"saarika:flash\"\n | (string & {});\n\nexport type SarvamSpeechTranslationModelId =\n | \"saaras:v1\"\n | \"saaras:v2\"\n | \"saaras:turbo\"\n | \"saaras:flash\"\n | (string & {});\n\nexport const SarvamProviderOptionsSchema = z.object({\n with_timestamps: z.boolean().nullish().default(false),\n with_diarization: z.boolean().nullish().default(false),\n num_speakers: z.number().int().nullish(),\n});\n\nexport type SarvamTranscriptionCallOptions = {\n with_timestamps?: boolean,\n /**\n * Enables speaker diarization, which identifies and separates different speakers in the audio.\n * When set to true, the API will provide speaker-specific segments in the response.\n * Note: This parameter is currently in Beta mode.\n */\n with_diarization?: boolean,\n /**\n * Number of speakers to be detected in the audio.\n * This is used when with_diarization is set to true.\n * Can be null.\n */\n num_speakers?: number,\n}\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\nimport { SarvamTranslationSettings } from \"./sarvam-translation-settings\";\n\ntype SarvamTranslationConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamTranslationModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: NonNullable<SarvamTranslationSettings[\"model\"]>\n readonly settings: SarvamTranslationSettings;\n\n private readonly config: SarvamTranslationConfig;\n\n constructor(\n settings: SarvamTranslationSettings,\n config: SarvamTranslationConfig,\n ) {\n this.modelId = settings.model ?? \"mayura:v1\";\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (this.settings.from === this.settings.to) {\n throw new Error(\n \"Source and target languages code must be different.\",\n );\n }\n\n if (this.modelId === \"sarvam-translate:v1\") {\n if ((this.settings.mode ?? \"formal\") !== \"formal\")\n throw new Error(\n \"Sarvam 'sarvam-translate:v1' only support mode formal.\",\n );\n if ((this.settings.from ?? \"auto\") === \"auto\")\n throw new Error(\n \"Sarvam 'sarvam-translate:v1' requires source language code.\",\n );\n }\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n source_language_code: this.settings.from ?? \"auto\",\n target_language_code: this.settings.to,\n numerals_format: this.settings.numerals_format ?? \"international\",\n enable_preprocessing: this.settings.enable_preprocessing ?? false,\n output_script: this.settings.output_script ?? null,\n speaker_gender: this.settings.speaker_gender ?? \"Male\",\n mode: this.settings.mode ?? \"formal\",\n model: this.modelId,\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/translate\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranslationResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n const text = response.translated_text ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Translation feature doesn't support streaming yet\");\n }\n}\n\nconst sarvamTranslationResponseSchema = z.object({\n translated_text: z.string().nullish(),\n source_language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import { FetchFunction } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\n\nexport type SarvamConfig = {\n provider: string;\n url: (options: { modelId: string; path: string }) => string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n generateId?: () => string;\n};\n\nexport type SarvamLanguageCode = z.infer<typeof SarvamLanguageCodeSchema>;\n\nexport const SarvamLanguageCodeSchema = z.enum([\n \"hi-IN\",\n \"bn-IN\",\n \"kn-IN\",\n \"ml-IN\",\n \"mr-IN\",\n \"od-IN\",\n \"pa-IN\",\n \"ta-IN\",\n \"te-IN\",\n \"en-IN\",\n \"gu-IN\",\n]);\n\nexport type SarvamScriptCode = z.infer<typeof SarvamScriptCodeSchema>\n\nexport const SarvamScriptCodeSchema = z.enum([\n \"Latn\",\n \"Deva\",\n \"Beng\",\n \"Gujr\",\n \"Knda\",\n \"Mlym\",\n \"Orya\",\n \"Guru\",\n \"Taml\",\n \"Telu\",\n])\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\n\ntype SarvamTransliterateConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamTransliterateModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: \"unknown\";\n readonly settings: SarvamTransliterateSettings;\n\n private readonly config: SarvamTransliterateConfig;\n\n constructor(\n settings: SarvamTransliterateSettings,\n config: SarvamTransliterateConfig,\n ) {\n this.modelId = \"unknown\";\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (this.settings.from !== \"auto\") {\n if (this.settings.to !== \"en-IN\" && this.settings.from !== \"en-IN\")\n throw new Error(\n \"Sarvam doesn't support Indic-Indic Transliteration yet\",\n );\n }\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n source_language_code: this.settings.from ?? \"auto\",\n target_language_code: this.settings.to,\n numerals_format: this.settings.numerals_format ?? \"international\",\n ...(this.settings.spoken_form\n ? {\n spoken_form: this.settings.spoken_form,\n spoken_form_numerals_language:\n this.settings.spoken_form_numerals_language ?? \"english\",\n }\n : {}),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/transliterate\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTransliterateResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n let text = response.transliterated_text ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Transliterate feature doesn't streaming yet\");\n }\n}\n\nconst sarvamTransliterateResponseSchema = z.object({\n transliterated_text: z.string().nullish(),\n source_language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema, SarvamScriptCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\n\ntype SarvamLidConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamLidModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: \"unknown\";\n\n private readonly config: SarvamLidConfig;\n\n constructor(\n config: SarvamLidConfig,\n ) {\n this.modelId = \"unknown\";\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/text-lid\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamLidResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n const text = response.language_code ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Language Identification feature doesn't streaming yet\");\n }\n}\n\nconst sarvamLidResponseSchema = z.object({\n script_code: SarvamScriptCodeSchema.nullish(),\n language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import {\n TranscriptionModelV1,\n TranscriptionModelV1CallWarning,\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postFormDataToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { SarvamConfig } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport { SarvamSpeechTranslationModelId } from \"./sarvam-transcription-settings\";\n\n// https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe\ninterface SarvamSpeechTranslationModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class SarvamSpeechTranslationModel implements TranscriptionModelV1 {\n readonly specificationVersion = \"v1\";\n\n constructor(\n readonly modelId: SarvamSpeechTranslationModelId,\n private readonly config: SarvamSpeechTranslationModelConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0]) {\n const warnings: TranscriptionModelV1CallWarning[] = [];\n\n const formData = new FormData();\n const blob =\n audio instanceof Blob ? audio : new Blob([audio], { type: mediaType });\n\n formData.append(\"file\", blob);\n formData.append(\"model\", this.modelId);\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV1[\"doGenerate\"]>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: this.config.url({\n path: \"/speech-to-text-translate\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text: response.transcript,\n segments: [],\n language: response.language_code ? response.language_code : undefined,\n durationInSeconds: undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst sarvamTranscriptionResponseSchema = z.object({\n request_id: z.string().nullable(),\n transcript: z.string(),\n language_code: z.string().nullable(),\n // timestamps: z\n // .object({\n // end_time_seconds: z.array(z.number()),\n // start_time_seconds: z.array(z.number()),\n // words: z.array(z.string()),\n // })\n // .optional(),\n diarized_transcript: z\n .object({\n entries: z.array(\n z.object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n transcript: z.string(),\n speaker_id: z.string(),\n }),\n ),\n })\n .nullable()\n .optional(),\n});\n"],"mappings":"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","names":["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","import_zod","SarvamProviderOptionsSchema","SarvamProviderOptionsSchema","import_provider_utils","import_zod","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod","sarvamTranscriptionResponseSchema"]}
|
|
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-speech-model.ts","../src/sarvam-speech-settings.ts","../src/sarvam-transcription-model.ts","../src/sarvam-transcription-settings.ts","../src/sarvam-translation-model.ts","../src/sarvam-config.ts","../src/sarvam-transliterate-model.ts","../src/sarvam-lid-model.ts","../src/sarvam-speech-translation-model.ts"],"sourcesContent":["export { createSarvam, sarvam } from \"./sarvam-provider\";\nexport type { SarvamProvider, SarvamProviderSettings } from \"./sarvam-provider\";\n","import {\n LanguageModelV1,\n SpeechModelV1,\n TranscriptionModelV1\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from \"@ai-sdk/provider-utils\";\nimport { SarvamChatLanguageModel } from \"./sarvam-chat-language-model\";\nimport { SarvamChatModelId, SarvamChatSettings } from \"./sarvam-chat-settings\";\nimport { SarvamLanguageCode } from \"./sarvam-config\";\nimport {\n SarvamSpeechModel,\n} from \"./sarvam-speech-model\";\nimport { SarvamSpeechModelId, SarvamSpeechSettings } from \"./sarvam-speech-settings\";\nimport {\n SarvamTranscriptionModel,\n} from \"./sarvam-transcription-model\";\nimport { SarvamSpeechTranslationModelId, SarvamTranscriptionCallOptions, SarvamTranscriptionModelId } from \"./sarvam-transcription-settings\";\nimport { SarvamTranslationModel } from \"./sarvam-translation-model\";\nimport { SarvamTranslationSettings } from \"./sarvam-translation-settings\";\nimport { SarvamTransliterateModel } from \"./sarvam-transliterate-model\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\nimport { SarvamLidModel } from \"./sarvam-lid-model\";\nimport { SarvamSpeechTranslationModel } from \"./sarvam-speech-translation-model\";\n\nexport interface SarvamProvider {\n /**\n * Creates a model for text generation.\n */\n (modelId: SarvamChatModelId, settings?: SarvamChatSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam chat model for text generation.\n */\n languageModel(\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ): LanguageModelV1;\n\n /**\n * Creates a Sarvam model for transcription.\n */\n transcription(\n modelId: SarvamTranscriptionModelId,\n /**\n * Audio source language code\n *\n * @default unknown\n */\n languageCode?: SarvamLanguageCode | \"unknown\",\n settings?: SarvamTranscriptionCallOptions,\n ): TranscriptionModelV1;\n\n /**\n * Creates a Sarvam model for Speech translation.\n */\n speechTranslation(\n modelId: SarvamSpeechTranslationModelId,\n ): TranscriptionModelV1;\n\n /**\n * Creates a Sarvam model for speech.\n */\n speech(\n modelId: SarvamSpeechModelId,\n languageCode: SarvamLanguageCode,\n settings?: SarvamSpeechSettings,\n ): SpeechModelV1;\n\n /**\n * Creates an Sarvam model for transliterate.\n */\n transliterate(settings: SarvamTransliterateSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam model for translation.\n */\n translation(settings: SarvamTranslationSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam model for language identification.\n */\n languageIdentification(): LanguageModelV1;\n}\n\nexport interface SarvamProviderSettings {\n /**\n * URL for the Sarvam API calls.\n * @default https://api.sarvam.ai\n */\n baseURL?: string;\n\n /**\n * API key for authenticating requests.\n * @default process.env.SARVAM_API_KEY\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n * @default\n Authorization: `Bearer ${process.env.SARVAM_API_KEY}`,\n \"api-subscription-key\": process.env.SARVAM_API_KEY\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n* Create an Sarvam provider instance.\n*/\nexport function createSarvam(\n options: SarvamProviderSettings = {},\n): SarvamProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? \"https://api.sarvam.ai\";\n\n const getApiKey = () => loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"SARVAM_API_KEY\",\n description: \"Sarvam\",\n });\n\n const getHeaders = () => ({\n Authorization: `Bearer ${getApiKey()}`,\n \"api-subscription-key\": getApiKey(),\n ...options.headers,\n });\n\n const createChatModel = (\n modelId: SarvamChatModelId,\n settings: SarvamChatSettings = {},\n ) =>\n new SarvamChatLanguageModel(modelId, settings, {\n provider: \"sarvam.chat\",\n url: ({ path }) => `${baseURL}/v1${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createLanguageModel = (\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ) => {\n if (new.target) {\n throw new Error(\n \"The Sarvam model function cannot be called with the new keyword.\",\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n const createTranscriptionModel = (\n modelId: SarvamTranscriptionModelId,\n languageCode: SarvamLanguageCode | \"unknown\" = \"unknown\",\n settings?: SarvamTranscriptionCallOptions,\n ) => new SarvamTranscriptionModel(modelId, languageCode, {\n provider: \"sarvam.transcription\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n transcription: settings,\n });\n\n const createSpeechTranslation = (\n modelId: SarvamTranscriptionModelId\n ) => new SarvamSpeechTranslationModel(modelId, {\n provider: \"sarvam.transcription\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createSpeechModel = (\n modelId: SarvamSpeechModelId,\n languageCode: SarvamLanguageCode,\n settings?: SarvamSpeechSettings,\n ) =>\n new SarvamSpeechModel(modelId, languageCode, {\n provider: \"sarvam.speech\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n speech: settings,\n });\n\n const createTransliterateModel = (settings: SarvamTransliterateSettings) =>\n new SarvamTransliterateModel(\n settings,\n {\n provider: \"sarvam.transliterate\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const createTranslationModel = (settings: SarvamTranslationSettings) =>\n new SarvamTranslationModel(\n settings,\n {\n provider: \"sarvam.translation\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const createLidModel = () =>\n new SarvamLidModel(\n {\n provider: \"sarvam.lid\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const provider = (\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ) => createLanguageModel(modelId, settings);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createChatModel;\n provider.transcription = createTranscriptionModel;\n provider.speechTranslation = createSpeechTranslation;\n provider.speech = createSpeechModel;\n provider.transliterate = createTransliterateModel;\n provider.translation = createTranslationModel;\n provider.languageIdentification = createLidModel;\n\n return provider;\n}\n\n/**\n* Default Sarvam provider instance.\n*/\nexport const sarvam = createSarvam();\n","import {\n InvalidResponseDataError,\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1FunctionToolCall,\n LanguageModelV1Prompt,\n LanguageModelV1ProviderMetadata,\n LanguageModelV1StreamPart,\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n ParseResult,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { getResponseMetadata } from \"./get-response-metadata\";\nimport { mapSarvamFinishReason } from \"./map-sarvam-finish-reason\";\nimport { SarvamChatModelId, SarvamChatSettings } from \"./sarvam-chat-settings\";\nimport {\n sarvamErrorDataSchema,\n sarvamFailedResponseHandler,\n} from \"./sarvam-error\";\nimport {\n extractToolCallData,\n parseJSON,\n prepareTools,\n simulateJsonSchema,\n simulateToolCalling,\n} from \"./sarvam-prepare-tools\";\n\ntype SarvamChatConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: SarvamChatModelId;\n readonly settings: SarvamChatSettings;\n\n private readonly config: SarvamChatConfig;\n\n constructor(\n modelId: SarvamChatModelId,\n settings: SarvamChatSettings,\n config: SarvamChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return !this.settings.downloadImages;\n }\n\n private async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n stream,\n providerMetadata,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n const simulate = this.settings.simulate\n\n if (type === \"object-json\" && simulate === \"tool-calling\")\n throw new Error('Use { simulate: \"json-object\" } with generateObject()')\n\n if (type === \"regular\" && simulate === \"json-object\")\n throw new Error('Use { simulate: \"tool-calling\" } with generateText()')\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (stream) {\n warnings.push({\n type: \"other\",\n message: \"Streaming is still experimental for Sarvam\",\n });\n }\n\n if (topK != null) {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"topK\",\n });\n }\n\n if (\n responseFormat != null &&\n responseFormat.type === \"json\" &&\n responseFormat.schema != null\n ) {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"responseFormat\",\n details: \"JSON response format schema is not supported\",\n });\n }\n\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: providerMetadata,\n schema: z.object({\n reasoningFormat: z.enum([\"parsed\", \"raw\", \"hidden\"]).nullish(),\n }),\n });\n\n const baseArgs = (\n prompt: LanguageModelV1Prompt,\n extraSystemPrompt?: string,\n ) => ({\n // model id:\n model: this.modelId,\n\n // model specific settings:\n user: this.settings.user,\n parallel_tool_calls: this.settings.parallelToolCalls,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n\n // response format:\n response_format:\n // json object response format is not supported for streaming:\n stream === false && responseFormat?.type === \"json\"\n ? { type: \"json_object\" }\n : undefined,\n\n // provider options:\n reasoning_format: sarvamOptions?.reasoningFormat,\n\n // messages:\n messages: convertToSarvamChatMessages(prompt, extraSystemPrompt),\n });\n\n switch (type) {\n case \"regular\": {\n const { tools, tool_choice, toolWarnings } = prepareTools({\n mode,\n });\n\n const extraSystemPrompt =\n tools && simulate === \"tool-calling\"\n ? await simulateToolCalling(tools)\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, extraSystemPrompt),\n tools,\n tool_choice,\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n case \"object-json\": {\n const extraSystemPrompt = simulate === \"json-object\"\n ? simulateJsonSchema()\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, extraSystemPrompt),\n response_format:\n // json object response format is not supported for streaming:\n stream === false ? { type: \"json_object\" } : undefined,\n },\n warnings,\n };\n }\n\n case \"object-tool\": {\n return {\n args: {\n ...baseArgs(prompt),\n tool_choice: {\n type: \"function\",\n function: { name: mode.tool.name },\n },\n tools: [\n {\n type: \"function\",\n function: {\n name: mode.tool.name,\n description: mode.tool.description,\n parameters: mode.tool.parameters,\n },\n },\n ],\n },\n warnings,\n };\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings } = await this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n const choice = response.choices[0];\n\n let text = choice.message.content ?? undefined;\n\n let toolCalls = choice.message.tool_calls?.map((toolCall) => ({\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments!,\n })) as LanguageModelV1FunctionToolCall[] | undefined;\n\n // simulate tool calling through prompt engineering\n if (this.settings.simulate === \"tool-calling\") {\n if (text && text.length !== 0) {\n const jsonObject = parseJSON(text);\n if (jsonObject) {\n const newTools = extractToolCallData(jsonObject);\n if (newTools) {\n toolCalls = [newTools];\n text = undefined;\n }\n }\n }\n }\n\n // simulate JSON object generation through prompt engineering\n if (this.settings.simulate === \"json-object\") {\n if (text && text.length !== 0) {\n const jsonObject = parseJSON(text);\n if (jsonObject) {\n const newTools = extractToolCallData(jsonObject);\n text = JSON.stringify(jsonObject);\n }\n }\n }\n\n return {\n text,\n toolCalls,\n reasoning: choice.message.reasoning ?? undefined,\n finishReason: mapSarvamFinishReason(choice.finish_reason),\n usage: {\n promptTokens: response.usage?.prompt_tokens ?? NaN,\n completionTokens: response.usage?.completion_tokens ?? NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: getResponseMetadata(response),\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n const { args, warnings } = await this.getArgs({ ...options, stream: true });\n\n const body = JSON.stringify({ ...args, stream: true });\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...args,\n stream: true,\n },\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n sarvamChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const toolCalls: Array<{\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n let finishReason: LanguageModelV1FinishReason = \"unknown\";\n let usage: {\n promptTokens: number | undefined;\n completionTokens: number | undefined;\n } = {\n promptTokens: undefined,\n completionTokens: undefined,\n };\n let isFirstChunk = true;\n\n let providerMetadata: LanguageModelV1ProviderMetadata | undefined;\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof sarvamChatChunkSchema>>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = \"error\";\n controller.enqueue({\n type: \"error\",\n error: chunk.error,\n });\n return;\n }\n\n const value = chunk.value;\n\n // handle error chunks:\n if (\"error\" in value) {\n finishReason = \"error\";\n controller.enqueue({\n type: \"error\",\n error: value.error,\n });\n return;\n }\n\n if (isFirstChunk) {\n isFirstChunk = false;\n\n controller.enqueue({\n type: \"response-metadata\",\n ...getResponseMetadata(value),\n });\n }\n\n if (value.x_sarvam?.usage != null) {\n usage = {\n promptTokens: value.x_sarvam.usage.prompt_tokens ?? undefined,\n completionTokens:\n value.x_sarvam.usage.completion_tokens ?? undefined,\n };\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = mapSarvamFinishReason(choice.finish_reason);\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.reasoning != null && delta.reasoning.length > 0) {\n controller.enqueue({\n type: \"reasoning\",\n textDelta: delta.reasoning,\n });\n }\n\n if (delta.content != null && delta.content.length > 0) {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: delta.content,\n });\n }\n\n if (delta.tool_calls != null) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n if (toolCalls[index] == null) {\n if (toolCallDelta.type !== \"function\") {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: \"function\",\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? \"\",\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function!.arguments +=\n toolCallDelta.function?.arguments ?? \"\";\n }\n\n // send delta\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCallDelta.function.arguments ?? \"\",\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: {\n promptTokens: usage.promptTokens ?? NaN,\n completionTokens: usage.completionTokens ?? NaN,\n },\n ...(providerMetadata != null ? { providerMetadata } : {}),\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings,\n request: { body },\n };\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst sarvamChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n content: z.string().nullish(),\n reasoning: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n index: z.number(),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst sarvamChatChunkSchema = z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z\n .object({\n content: z.string().nullish(),\n reasoning: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z.literal(\"function\").optional(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullable().optional(),\n index: z.number(),\n }),\n ),\n x_sarvam: z\n .object({\n usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n })\n .nullish(),\n })\n .nullish(),\n }),\n sarvamErrorDataSchema,\n]);\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { convertUint8ArrayToBase64 } from \"@ai-sdk/provider-utils\";\nimport { SarvamChatPrompt } from \"./sarvam-api-types\";\n\nexport function convertToSarvamChatMessages(\n prompt: LanguageModelV1Prompt,\n fakeToolSystemPrompt?: string,\n): SarvamChatPrompt {\n const messages: SarvamChatPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case \"system\": {\n const contentData = fakeToolSystemPrompt\n ? `${content}\\n\\n${fakeToolSystemPrompt}`\n : content;\n messages.push({ role: \"system\", content: contentData });\n break;\n }\n\n case \"user\": {\n if (content.length === 1 && content[0].type === \"text\") {\n messages.push({ role: \"user\", content: content[0].text });\n break;\n }\n\n messages.push({\n role: \"user\",\n content: content.map((part) => {\n switch (part.type) {\n case \"text\": {\n return { type: \"text\", text: part.text };\n }\n case \"image\": {\n return {\n type: \"image_url\",\n image_url: {\n url:\n part.image instanceof URL\n ? part.image.toString()\n : `data:${\n part.mimeType ?? \"image/jpeg\"\n };base64,${convertUint8ArrayToBase64(part.image)}`,\n },\n };\n }\n case \"file\": {\n throw new UnsupportedFunctionalityError({\n functionality: \"File content parts in user messages\",\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case \"assistant\": {\n let text = \"\";\n const toolCalls: Array<{\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case \"text\": {\n text += part.text;\n break;\n }\n case \"tool-call\": {\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.args),\n },\n });\n break;\n }\n }\n }\n\n messages.push({\n role: \"assistant\",\n content: text,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case \"tool\": {\n for (const toolResponse of content) {\n messages.push({\n role: \"tool\",\n tool_call_id: toolResponse.toolCallId,\n content: JSON.stringify(toolResponse.result),\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import { LanguageModelV1FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapSarvamFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n return \"length\";\n case \"content_filter\":\n return \"content-filter\";\n case \"function_call\":\n case \"tool_calls\":\n return \"tool-calls\";\n default:\n return \"unknown\";\n }\n}\n","import { z } from \"zod\";\nimport { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\n\nexport const sarvamErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n }),\n});\n\nexport type SarvamErrorData = z.infer<typeof sarvamErrorDataSchema>;\n\nexport const sarvamFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: sarvamErrorDataSchema,\n errorToMessage: (data) => data.error.message,\n});\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FunctionToolCall,\n UnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\n\ntype SarvamTools = Array<{\n type: \"function\";\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n}>;\n\nexport function prepareTools({\n mode,\n}: {\n mode: Parameters<LanguageModelV1[\"doGenerate\"]>[0][\"mode\"] & {\n type: \"regular\";\n };\n}): {\n tools:\n | undefined\n | Array<{\n type: \"function\";\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n tool_choice:\n | { type: \"function\"; function: { name: string } }\n | \"auto\"\n | \"none\"\n | \"required\"\n | undefined;\n toolWarnings: LanguageModelV1CallWarning[];\n fakeTools?: string;\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n const toolWarnings: LanguageModelV1CallWarning[] = [];\n\n if (tools == null) {\n return { tools: undefined, tool_choice: undefined, toolWarnings };\n }\n\n const toolChoice = mode.toolChoice;\n\n const sarvamTools: SarvamTools = [];\n\n for (const tool of tools) {\n if (tool.type === \"provider-defined\") {\n toolWarnings.push({ type: \"unsupported-tool\", tool });\n } else {\n sarvamTools.push({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: sarvamTools, tool_choice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case \"auto\":\n case \"none\":\n case \"required\":\n return { tools: sarvamTools, tool_choice: type, toolWarnings };\n case \"tool\":\n return {\n tools: sarvamTools,\n tool_choice: {\n type: \"function\",\n function: {\n name: toolChoice.toolName,\n },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `Unsupported tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n\nimport { compile } from \"json-schema-to-typescript\";\n\nexport const simulateToolCalling = async (\n tools: SarvamTools,\n): Promise<string> => {\n const context = [];\n const names = [];\n\n for (const tool of tools) {\n names.push(tool.function.name);\n\n const tsType = await compile(\n tool.function.parameters as object,\n tool.function.name,\n {\n bannerComment: \"\",\n format: false,\n declareExternallyReferenced: true,\n enableConstEnums: true,\n unreachableDefinitions: false,\n strictIndexSignatures: false,\n },\n );\n const toolContext = tsType\n .replace(\n /export interface (\\w+) \\{/,\n (_: any, name: string) => `type ${tool.function.name} = {`,\n )\n .replace(/\\/\\*\\*\\s*\\n\\s*\\*\\s*(.*?)\\s*\\n\\s*\\*\\//, \"// $1\");\n context.push(`// ${tool.function.description}\\n${toolContext}`);\n }\n\n const text = `These are the available tool you can execute.\n\n${context.join(\"\\n\")}\n\ntype YourToolChoices = {\n 'toolName': '${names.join(\"' | '\")}',\n 'toolData': ${names.join(\" | \")}\n}\n\nRespond normally.\nIf user request to execute any tool, respond with pure JSON format\nMake sure to translate toolData to English.\n\neg:\nconst myChoice: YourToolChoices = {\n \"toolName\": <name>,\n \"toolData\": <data>\n}`;\n\n return text;\n};\n\nexport const extractToolCallData = (\n jsonObject: object,\n): LanguageModelV1FunctionToolCall | void => {\n\n type ToolFunction = {\n toolName: string;\n toolData: any;\n };\n const toolFunction = jsonObject as ToolFunction\n\n if (!(\"toolName\" in toolFunction)) return;\n if (!(\"toolData\" in toolFunction)) return;\n\n return {\n args: JSON.stringify(toolFunction.toolData),\n toolCallId: generateId(),\n toolCallType: \"function\",\n toolName: toolFunction.toolName,\n };\n\n};\n\nexport const parseJSON = <T extends object>(\n text: string,\n):T | void => {\n const jsonRegex = /\\{(?:[^{}]*|\\{[^{}]*\\})*\\}/g;\n const jsonMatches = text.match(jsonRegex);\n\n if (jsonMatches && jsonMatches[0]) {\n try {\n const jsonObject = JSON.parse(jsonMatches[0])\n return jsonObject\n }\n catch (error) {}\n }\n}\n\nexport const simulateJsonSchema = () => \"If user doen't specify, make sure to translate json data content into pure English.\"\n","import type { SpeechModelV1, SpeechModelV1CallWarning } from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type { SarvamConfig, SarvamLanguageCode } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport {\n SarvamProviderOptionsSchema,\n SarvamSpeechSettings,\n SpeakerSchema,\n type SarvamSpeechModelId,\n} from \"./sarvam-speech-settings\";\nimport type { SarvamSpeechAPITypes } from \"./sarvam-api-types\";\nimport { z } from \"zod\";\n\ninterface SarvamSpeechModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n speech?: SarvamSpeechSettings;\n}\n\nexport class SarvamSpeechModel implements SpeechModelV1 {\n readonly specificationVersion = \"v1\";\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: SarvamSpeechModelId,\n readonly languageCode: SarvamLanguageCode,\n private readonly config: SarvamSpeechModelConfig,\n ) {}\n\n private getArgs({\n text,\n voice,\n outputFormat = \"wav\",\n // speed,\n // instructions,\n providerOptions,\n }: Parameters<SpeechModelV1[\"doGenerate\"]>[0]) {\n const warnings: SpeechModelV1CallWarning[] = [];\n\n // Parse provider options\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: {\n sarvam: {\n ...providerOptions?.sarvam,\n ...this.config.speech,\n },\n },\n schema: SarvamProviderOptionsSchema,\n });\n\n const getSpeaker = (): SarvamSpeechCallOptions[\"speaker\"] => {\n if (sarvamOptions?.speaker) return sarvamOptions.speaker;\n if (voice) {\n return SpeakerSchema.parse(voice);\n }\n\n switch (this.modelId) {\n case \"bulbul:v1\":\n return \"meera\";\n case \"bulbul:v2\":\n return \"manisha\";\n }\n\n return \"meera\";\n };\n\n // Create request body\n const requestBody: Record<string, unknown> = {\n model: this.modelId,\n text: text,\n target_language_code: this.languageCode,\n speaker: getSpeaker(),\n // response_format: \"wav\",\n // speed,\n // instructions,\n };\n\n if (outputFormat) {\n if (\n [\"mp3\", \"opus\", \"aac\", \"flac\", \"wav\", \"pcm\"].includes(\n outputFormat,\n )\n ) {\n requestBody.response_format = outputFormat;\n } else {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"outputFormat\",\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`,\n });\n }\n }\n\n // Add provider-specific options\n if (sarvamOptions) {\n const speechModelOptions: SarvamSpeechAPITypes = {};\n\n for (const key in speechModelOptions) {\n const value =\n speechModelOptions[key as keyof SarvamSpeechAPITypes];\n if (value !== undefined) {\n requestBody[key] = value;\n }\n }\n }\n\n return {\n requestBody,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV1[\"doGenerate\"]>>> {\n const currentDate =\n this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = this.getArgs(options);\n\n const {\n value,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/text-to-speech\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n z.object({\n request_id: z.string(),\n audios: z.array(z.string()),\n }),\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const audio = value.audios[0];\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import { z } from \"zod\";\n\nexport type SarvamSpeechModelId = \"bulbul:v1\" | \"bulbul:v2\" | (string & {});\n\nexport type SarvamSpeechVoices = z.infer<typeof SpeakerSchema>;\n\nexport const SpeakerSchema = z\n .enum([\n \"meera\",\n \"pavithra\",\n \"maitreyi\",\n \"arvind\",\n \"amol\",\n \"amartya\",\n \"diya\",\n \"neel\",\n \"misha\",\n \"vian\",\n \"arjun\",\n \"maya\",\n \"anushka\",\n \"abhilash\",\n \"manisha\",\n \"vidya\",\n \"arya\",\n \"karun\",\n \"hitesh\",\n ])\n .default(\"meera\");\n\n// https://docs.sarvam.ai/api-reference-docs/text-to-speech/convert\nexport const SarvamProviderOptionsSchema = z\n .object({\n speaker: SpeakerSchema,\n pitch: z.number().min(-0.75).max(0.75).default(0.0),\n pace: z.number().min(0.5).max(2.0).default(1.0),\n loudness: z.number().min(0.3).max(3.0).default(1.0),\n speech_sample_rate: z\n .union([\n z.literal(8000),\n z.literal(16000),\n z.literal(22050),\n z.literal(24000),\n ])\n .default(22050),\n enable_preprocessing: z.boolean().default(false),\n })\n .partial();\n\n/**\n * Configuration settings for Sarvam Text-to-Speech API.\n *\n * This type defines the customizable options for generating speech audio\n * using the Sarvam Text-to-Speech API. Each property corresponds to a specific\n * feature or parameter supported by the API.\n */\nexport type SarvamSpeechSettings = {\n /**\n * The speaker voice to be used for the output audio.\n *\n * @default \"meera\"\n * @example \"meera\" (Default female voice for bulbul:v1)\n * @example \"arvind\" (Male voice for bulbul:v1)\n * @example \"anushka\" (Female voice for bulbul:v2)\n */\n speaker?: SarvamSpeechVoices;\n\n /**\n * Controls the pitch of the audio.\n *\n * @default 0.0\n * @example -0.5 (Deeper voice)\n * @example 0.5 (Sharper voice)\n */\n pitch?: number;\n\n /**\n * Controls the speed of the audio.\n *\n * @default 1.0\n * @example 0.5 (Slower speech)\n * @example 2.0 (Faster speech)\n */\n pace?: number;\n\n /**\n * Controls the loudness of the audio.\n *\n * @default 1.0\n * @example 0.3 (Quieter audio)\n * @example 2.5 (Louder audio)\n */\n loudness?: number;\n\n /**\n * Specifies the sample rate of the output audio.\n *\n * @default 22050\n * @example 8000 (Low-quality audio)\n * @example 24000 (High-quality audio)\n */\n speech_sample_rate?: 8000 | 16000 | 22050 | 24000;\n\n /**\n * Enables preprocessing for normalization of English words and numeric entities\n * (e.g., numbers, dates) in the input text.\n *\n * @default false\n * @example true (Enable preprocessing)\n * @example false (Disable preprocessing)\n */\n enable_preprocessing?: boolean;\n};\n","import {\n TranscriptionModelV1,\n TranscriptionModelV1CallWarning,\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postFormDataToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { SarvamConfig, SarvamLanguageCode } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport {\n SarvamProviderOptionsSchema,\n SarvamTranscriptionCallOptions,\n SarvamTranscriptionModelId,\n} from \"./sarvam-transcription-settings\";\n\n// https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe\ninterface SarvamTranscriptionModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n transcription?: SarvamTranscriptionCallOptions;\n}\n\nexport class SarvamTranscriptionModel implements TranscriptionModelV1 {\n readonly specificationVersion = \"v1\";\n\n constructor(\n readonly modelId: SarvamTranscriptionModelId,\n readonly languageCode: SarvamLanguageCode | \"unknown\",\n private readonly config: SarvamTranscriptionModelConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0]) {\n const warnings: TranscriptionModelV1CallWarning[] = [];\n\n if (this.modelId === \"saarika:v1\" && this.languageCode === \"unknown\")\n throw new Error(\n \"Language code unknown is not supported for model saarika:v1\",\n );\n\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: {\n sarvam: {\n ...providerOptions?.sarvam,\n ...this.config.transcription,\n },\n },\n schema: SarvamProviderOptionsSchema,\n });\n\n const formData = new FormData();\n const blob =\n audio instanceof Blob\n ? audio\n : new Blob([audio], { type: mediaType });\n\n formData.append(\"file\", blob);\n formData.append(\"model\", this.modelId);\n if (sarvamOptions) {\n formData.append(\"language_code\", this.languageCode);\n formData.append(\n \"with_timestamps\",\n sarvamOptions.with_timestamps ? \"true\" : \"false\",\n );\n formData.append(\n \"with_diarization\",\n sarvamOptions.with_diarization ? \"true\" : \"false\",\n );\n if (\n sarvamOptions.num_speakers !== null &&\n sarvamOptions.num_speakers !== undefined\n ) {\n formData.append(\n \"num_speakers\",\n sarvamOptions.num_speakers.toString(),\n );\n }\n }\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV1[\"doGenerate\"]>>> {\n const currentDate =\n this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: this.config.url({\n path: \"/speech-to-text\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text: response.transcript,\n segments: response.timestamps\n ? response.timestamps.words.map((word, index) => ({\n text: word,\n startSecond:\n response.timestamps!.start_time_seconds[index],\n endSecond: response.timestamps!.end_time_seconds[index],\n }))\n : [],\n language: response.language_code\n ? response.language_code\n : undefined,\n durationInSeconds:\n response.timestamps?.end_time_seconds[\n response.timestamps.end_time_seconds.length - 1\n ] ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst sarvamTranscriptionResponseSchema = z.object({\n request_id: z.string().nullable(),\n transcript: z.string(),\n language_code: z.string().nullable(),\n timestamps: z\n .object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n words: z.array(z.string()),\n })\n .optional(),\n diarized_transcript: z\n .object({\n entries: z.array(\n z.object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n transcript: z.string(),\n speaker_id: z.string(),\n }),\n ),\n })\n .optional(),\n});\n","import { z } from \"zod\";\n\nexport type SarvamTranscriptionModelId =\n | \"saarika:v2\"\n | \"saarika:v1\"\n | \"saarika:flash\"\n | (string & {});\n\nexport type SarvamSpeechTranslationModelId =\n | \"saaras:v1\"\n | \"saaras:v2\"\n | \"saaras:turbo\"\n | \"saaras:flash\"\n | (string & {});\n\nexport const SarvamProviderOptionsSchema = z.object({\n with_timestamps: z.boolean().nullish().default(false),\n with_diarization: z.boolean().nullish().default(false),\n num_speakers: z.number().int().nullish(),\n});\n\nexport type SarvamTranscriptionCallOptions = {\n with_timestamps?: boolean,\n /**\n * Enables speaker diarization, which identifies and separates different speakers in the audio.\n * When set to true, the API will provide speaker-specific segments in the response.\n * Note: This parameter is currently in Beta mode.\n */\n with_diarization?: boolean,\n /**\n * Number of speakers to be detected in the audio.\n * This is used when with_diarization is set to true.\n * Can be null.\n */\n num_speakers?: number,\n}\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\nimport { SarvamTranslationSettings } from \"./sarvam-translation-settings\";\n\ntype SarvamTranslationConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamTranslationModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: NonNullable<SarvamTranslationSettings[\"model\"]>\n readonly settings: SarvamTranslationSettings;\n\n private readonly config: SarvamTranslationConfig;\n\n constructor(\n settings: SarvamTranslationSettings,\n config: SarvamTranslationConfig,\n ) {\n this.modelId = settings.model ?? \"mayura:v1\";\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (this.settings.from === this.settings.to) {\n throw new Error(\n \"Source and target languages code must be different.\",\n );\n }\n\n if (this.modelId === \"sarvam-translate:v1\") {\n if ((this.settings.mode ?? \"formal\") !== \"formal\")\n throw new Error(\n \"Sarvam 'sarvam-translate:v1' only support mode formal.\",\n );\n if ((this.settings.from ?? \"auto\") === \"auto\")\n throw new Error(\n \"Sarvam 'sarvam-translate:v1' requires source language code.\",\n );\n }\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n source_language_code: this.settings.from ?? \"auto\",\n target_language_code: this.settings.to,\n numerals_format: this.settings.numerals_format ?? \"international\",\n enable_preprocessing: this.settings.enable_preprocessing ?? false,\n output_script: this.settings.output_script ?? null,\n speaker_gender: this.settings.speaker_gender ?? \"Male\",\n mode: this.settings.mode ?? \"formal\",\n model: this.modelId,\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/translate\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranslationResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n const text = response.translated_text ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Translation feature doesn't support streaming yet\");\n }\n}\n\nconst sarvamTranslationResponseSchema = z.object({\n translated_text: z.string().nullish(),\n source_language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import { FetchFunction } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\n\nexport type SarvamConfig = {\n provider: string;\n url: (options: { modelId: string; path: string }) => string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n generateId?: () => string;\n};\n\nexport type SarvamLanguageCode = z.infer<typeof SarvamLanguageCodeSchema>;\n\nexport const SarvamLanguageCodeSchema = z.enum([\n \"hi-IN\",\n \"bn-IN\",\n \"kn-IN\",\n \"ml-IN\",\n \"mr-IN\",\n \"od-IN\",\n \"pa-IN\",\n \"ta-IN\",\n \"te-IN\",\n \"en-IN\",\n \"gu-IN\",\n]);\n\nexport type SarvamScriptCode = z.infer<typeof SarvamScriptCodeSchema>\n\nexport const SarvamScriptCodeSchema = z.enum([\n \"Latn\",\n \"Deva\",\n \"Beng\",\n \"Gujr\",\n \"Knda\",\n \"Mlym\",\n \"Orya\",\n \"Guru\",\n \"Taml\",\n \"Telu\",\n])\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\n\ntype SarvamTransliterateConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamTransliterateModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: \"unknown\";\n readonly settings: SarvamTransliterateSettings;\n\n private readonly config: SarvamTransliterateConfig;\n\n constructor(\n settings: SarvamTransliterateSettings,\n config: SarvamTransliterateConfig,\n ) {\n this.modelId = \"unknown\";\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (this.settings.from !== \"auto\") {\n if (this.settings.to !== \"en-IN\" && this.settings.from !== \"en-IN\")\n throw new Error(\n \"Sarvam doesn't support Indic-Indic Transliteration yet\",\n );\n }\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n source_language_code: this.settings.from ?? \"auto\",\n target_language_code: this.settings.to,\n numerals_format: this.settings.numerals_format ?? \"international\",\n ...(this.settings.spoken_form\n ? {\n spoken_form: this.settings.spoken_form,\n spoken_form_numerals_language:\n this.settings.spoken_form_numerals_language ?? \"english\",\n }\n : {}),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/transliterate\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTransliterateResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n let text = response.transliterated_text ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Transliterate feature doesn't streaming yet\");\n }\n}\n\nconst sarvamTransliterateResponseSchema = z.object({\n transliterated_text: z.string().nullish(),\n source_language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema, SarvamScriptCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\n\ntype SarvamLidConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamLidModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: \"unknown\";\n\n private readonly config: SarvamLidConfig;\n\n constructor(\n config: SarvamLidConfig,\n ) {\n this.modelId = \"unknown\";\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/text-lid\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamLidResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n const text = response.language_code ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Language Identification feature doesn't streaming yet\");\n }\n}\n\nconst sarvamLidResponseSchema = z.object({\n script_code: SarvamScriptCodeSchema.nullish(),\n language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import {\n TranscriptionModelV1,\n TranscriptionModelV1CallWarning,\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postFormDataToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { SarvamConfig } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport { SarvamSpeechTranslationModelId } from \"./sarvam-transcription-settings\";\n\n// https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe\ninterface SarvamSpeechTranslationModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class SarvamSpeechTranslationModel implements TranscriptionModelV1 {\n readonly specificationVersion = \"v1\";\n\n constructor(\n readonly modelId: SarvamSpeechTranslationModelId,\n private readonly config: SarvamSpeechTranslationModelConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0]) {\n const warnings: TranscriptionModelV1CallWarning[] = [];\n\n const formData = new FormData();\n const blob =\n audio instanceof Blob ? audio : new Blob([audio], { type: mediaType });\n\n formData.append(\"file\", blob);\n formData.append(\"model\", this.modelId);\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV1[\"doGenerate\"]>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: this.config.url({\n path: \"/speech-to-text-translate\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text: response.transcript,\n segments: [],\n language: response.language_code ? response.language_code : undefined,\n durationInSeconds: undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst sarvamTranscriptionResponseSchema = z.object({\n request_id: z.string().nullable(),\n transcript: z.string(),\n language_code: z.string().nullable(),\n // timestamps: z\n // .object({\n // end_time_seconds: z.array(z.number()),\n // start_time_seconds: z.array(z.number()),\n // words: z.array(z.string()),\n // })\n // .optional(),\n diarized_transcript: z\n .object({\n entries: z.array(\n z.object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n transcript: z.string(),\n speaker_id: z.string(),\n }),\n ),\n })\n .nullable()\n .optional(),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKA,IAAAA,0BAIO;;;ACTP,IAAAC,mBASO;AACP,IAAAC,yBAUO;AACP,IAAAC,cAAkB;;;ACrBlB,sBAGO;AACP,4BAA0C;AAGnC,SAAS,4BACd,QACA,sBACkB;AAClB,QAAM,WAA6B,CAAC;AAEpC,aAAW,EAAE,MAAM,QAAQ,KAAK,QAAQ;AACtC,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,cAAM,cAAc,uBAChB,GAAG,OAAO;AAAA;AAAA,EAAO,oBAAoB,KACrC;AACJ,iBAAS,KAAK,EAAE,MAAM,UAAU,SAAS,YAAY,CAAC;AACtD;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,YAAI,QAAQ,WAAW,KAAK,QAAQ,CAAC,EAAE,SAAS,QAAQ;AACtD,mBAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,QAAQ,CAAC,EAAE,KAAK,CAAC;AACxD;AAAA,QACF;AAEA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,QAAQ,IAAI,CAAC,SAAS;AA/BzC;AAgCY,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK,QAAQ;AACX,uBAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,cACzC;AAAA,cACA,KAAK,SAAS;AACZ,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,WAAW;AAAA,oBACT,KACE,KAAK,iBAAiB,MAClB,KAAK,MAAM,SAAS,IACpB,SACE,UAAK,aAAL,YAAiB,YACnB,eAAW,iDAA0B,KAAK,KAAK,CAAC;AAAA,kBACxD;AAAA,gBACF;AAAA,cACF;AAAA,cACA,KAAK,QAAQ;AACX,sBAAM,IAAI,8CAA8B;AAAA,kBACtC,eAAe;AAAA,gBACjB,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAED;AAAA,MACF;AAAA,MAEA,KAAK,aAAa;AAChB,YAAI,OAAO;AACX,cAAM,YAID,CAAC;AAEN,mBAAW,QAAQ,SAAS;AAC1B,kBAAQ,KAAK,MAAM;AAAA,YACjB,KAAK,QAAQ;AACX,sBAAQ,KAAK;AACb;AAAA,YACF;AAAA,YACA,KAAK,aAAa;AAChB,wBAAU,KAAK;AAAA,gBACb,IAAI,KAAK;AAAA,gBACT,MAAM;AAAA,gBACN,UAAU;AAAA,kBACR,MAAM,KAAK;AAAA,kBACX,WAAW,KAAK,UAAU,KAAK,IAAI;AAAA,gBACrC;AAAA,cACF,CAAC;AACD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,YAAY,UAAU,SAAS,IAAI,YAAY;AAAA,QACjD,CAAC;AAED;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,mBAAW,gBAAgB,SAAS;AAClC,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,cAAc,aAAa;AAAA,YAC3B,SAAS,KAAK,UAAU,aAAa,MAAM;AAAA,UAC7C,CAAC;AAAA,QACH;AACA;AAAA,MACF;AAAA,MAEA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACrHO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO;AAAA,IACL,IAAI,kBAAM;AAAA,IACV,SAAS,wBAAS;AAAA,IAClB,WAAW,WAAW,OAAO,IAAI,KAAK,UAAU,GAAI,IAAI;AAAA,EAC1D;AACF;;;ACZO,SAAS,sBACZ,cAC2B;AAC3B,UAAQ,cAAc;AAAA,IAClB,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AACD,aAAO;AAAA,IACX;AACI,aAAO;AAAA,EACf;AACJ;;;AClBA,iBAAkB;AAClB,IAAAC,yBAA+C;AAExC,IAAM,wBAAwB,aAAE,OAAO;AAAA,EAC1C,OAAO,aAAE,OAAO;AAAA,IACZ,SAAS,aAAE,OAAO;AAAA,IAClB,MAAM,aAAE,OAAO;AAAA,EACnB,CAAC;AACL,CAAC;AAIM,IAAM,kCAA8B,uDAA+B;AAAA,EACtE,aAAa;AAAA,EACb,gBAAgB,CAAC,SAAS,KAAK,MAAM;AACzC,CAAC;;;ACfD,IAAAC,mBAKO;AACP,IAAAC,yBAA2B;AA+F3B,uCAAwB;AApFjB,SAAS,aAAa;AAAA,EAC3B;AACF,GAuBE;AA1CF;AA4CE,QAAM,UAAQ,UAAK,UAAL,mBAAY,UAAS,KAAK,QAAQ;AAChD,QAAM,eAA6C,CAAC;AAEpD,MAAI,SAAS,MAAM;AACjB,WAAO,EAAE,OAAO,QAAW,aAAa,QAAW,aAAa;AAAA,EAClE;AAEA,QAAM,aAAa,KAAK;AAExB,QAAM,cAA2B,CAAC;AAElC,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,SAAS,oBAAoB;AACpC,mBAAa,KAAK,EAAE,MAAM,oBAAoB,KAAK,CAAC;AAAA,IACtD,OAAO;AACL,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,UAAU;AAAA,UACR,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,cAAc,MAAM;AACtB,WAAO,EAAE,OAAO,aAAa,aAAa,QAAW,aAAa;AAAA,EACpE;AAEA,QAAM,OAAO,WAAW;AAExB,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,EAAE,OAAO,aAAa,aAAa,MAAM,aAAa;AAAA,IAC/D,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,UACX,MAAM;AAAA,UACN,UAAU;AAAA,YACR,MAAM,WAAW;AAAA,UACnB;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI,+CAA8B;AAAA,QACtC,eAAe,iCAAiC,gBAAgB;AAAA,MAClE,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAIO,IAAM,sBAAsB,OACjC,UACoB;AACpB,QAAM,UAAU,CAAC;AACjB,QAAM,QAAQ,CAAC;AAEf,aAAW,QAAQ,OAAO;AACxB,UAAM,KAAK,KAAK,SAAS,IAAI;AAE7B,UAAM,SAAS,UAAM;AAAA,MACnB,KAAK,SAAS;AAAA,MACd,KAAK,SAAS;AAAA,MACd;AAAA,QACE,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,6BAA6B;AAAA,QAC7B,kBAAkB;AAAA,QAClB,wBAAwB;AAAA,QACxB,uBAAuB;AAAA,MACzB;AAAA,IACF;AACA,UAAM,cAAc,OACjB;AAAA,MACC;AAAA,MACA,CAAC,GAAQ,SAAiB,QAAQ,KAAK,SAAS,IAAI;AAAA,IACtD,EACC,QAAQ,wCAAwC,OAAO;AAC1D,YAAQ,KAAK,MAAM,KAAK,SAAS,WAAW;AAAA,EAAK,WAAW,EAAE;AAAA,EAChE;AAEA,QAAM,OAAO;AAAA;AAAA,EAEb,QAAQ,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,gBAGJ,MAAM,KAAK,OAAO,CAAC;AAAA,eACpB,MAAM,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAa9B,SAAO;AACT;AAEO,IAAM,sBAAsB,CACjC,eAC2C;AAMzC,QAAM,eAAe;AAErB,MAAI,EAAE,cAAc,cAAe;AACnC,MAAI,EAAE,cAAc,cAAe;AAEnC,SAAO;AAAA,IACH,MAAM,KAAK,UAAU,aAAa,QAAQ;AAAA,IAC1C,gBAAY,mCAAW;AAAA,IACvB,cAAc;AAAA,IACd,UAAU,aAAa;AAAA,EAC3B;AAEJ;AAEO,IAAM,YAAY,CACrB,SACU;AACV,QAAM,YAAY;AAClB,QAAM,cAAc,KAAK,MAAM,SAAS;AAExC,MAAI,eAAe,YAAY,CAAC,GAAG;AAC/B,QAAI;AACA,YAAM,aAAa,KAAK,MAAM,YAAY,CAAC,CAAC;AAC5C,aAAO;AAAA,IACX,SACO,OAAO;AAAA,IAAC;AAAA,EACnB;AACJ;AAEO,IAAM,qBAAqB,MAAM;;;ALnJjC,IAAM,0BAAN,MAAyD;AAAA,EAW9D,YACE,SACA,UACA,QACA;AAdF,SAAS,uBAAuB;AAEhC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AAYrC,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,oBAA6B;AAE/B,WAAO,CAAC,KAAK,SAAS;AAAA,EACxB;AAAA,EAEA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEG;AACD,UAAM,OAAO,KAAK;AAClB,UAAM,WAAW,KAAK,SAAS;AAE/B,QAAI,SAAS,iBAAiB,aAAa;AACvC,YAAM,IAAI,MAAM,uDAAuD;AAE3E,QAAI,SAAS,aAAa,aAAa;AACnC,YAAM,IAAI,MAAM,sDAAsD;AAE1E,UAAM,WAAyC,CAAC;AAEhD,QAAI,QAAQ;AACV,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,MAAM;AAChB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QACE,kBAAkB,QAClB,eAAe,SAAS,UACxB,eAAe,UAAU,MACzB;AACA,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,UAAM,oBAAgB,6CAAqB;AAAA,MACzC,UAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,QAAQ,cAAE,OAAO;AAAA,QACf,iBAAiB,cAAE,KAAK,CAAC,UAAU,OAAO,QAAQ,CAAC,EAAE,QAAQ;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAED,UAAM,WAAW,CACfC,SACA,uBACI;AAAA;AAAA,MAEJ,OAAO,KAAK;AAAA;AAAA,MAGZ,MAAM,KAAK,SAAS;AAAA,MACpB,qBAAqB,KAAK,SAAS;AAAA;AAAA,MAGnC,YAAY;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,MAAM;AAAA,MACN;AAAA;AAAA,MAGA;AAAA;AAAA,QAEE,WAAW,UAAS,iDAAgB,UAAS,SACzC,EAAE,MAAM,cAAc,IACtB;AAAA;AAAA;AAAA,MAGN,kBAAkB,+CAAe;AAAA;AAAA,MAGjC,UAAU,4BAA4BA,SAAQ,iBAAiB;AAAA,IACjE;AAEA,YAAQ,MAAM;AAAA,MACZ,KAAK,WAAW;AACd,cAAM,EAAE,OAAO,aAAa,aAAa,IAAI,aAAa;AAAA,UACxD;AAAA,QACF,CAAC;AAED,cAAM,oBACJ,SAAS,aAAa,iBAClB,MAAM,oBAAoB,KAAK,IAC/B;AAEN,eAAO;AAAA,UACL,MAAM;AAAA,YACJ,GAAG,SAAS,QAAQ,iBAAiB;AAAA,YACrC;AAAA,YACA;AAAA,UACF;AAAA,UACA,UAAU,CAAC,GAAG,UAAU,GAAG,YAAY;AAAA,QACzC;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAClB,cAAM,oBAAoB,aAAa,gBACnC,mBAAmB,IACnB;AAEJ,eAAO;AAAA,UACL,MAAM;AAAA,YACJ,GAAG,SAAS,QAAQ,iBAAiB;AAAA,YACrC;AAAA;AAAA,cAEE,WAAW,QAAQ,EAAE,MAAM,cAAc,IAAI;AAAA;AAAA,UACjD;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAClB,eAAO;AAAA,UACL,MAAM;AAAA,YACJ,GAAG,SAAS,MAAM;AAAA,YAClB,aAAa;AAAA,cACX,MAAM;AAAA,cACN,UAAU,EAAE,MAAM,KAAK,KAAK,KAAK;AAAA,YACnC;AAAA,YACA,OAAO;AAAA,cACL;AAAA,gBACE,MAAM;AAAA,gBACN,UAAU;AAAA,kBACR,MAAM,KAAK,KAAK;AAAA,kBAChB,aAAa,KAAK,KAAK;AAAA,kBACvB,YAAY,KAAK,KAAK;AAAA,gBACxB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AAhPjE;AAiPI,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ;AAAA,MAC5C,GAAG;AAAA,MACH,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,OAAO,KAAK,UAAU,IAAI;AAEhC,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,IAAI,UAAM,sCAAc;AAAA,MACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,aAAS,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,UAAU,WAAW,GAAG,YAAY,IAAI;AAChD,UAAM,SAAS,SAAS,QAAQ,CAAC;AAEjC,QAAI,QAAO,YAAO,QAAQ,YAAf,YAA0B;AAErC,QAAI,aAAY,YAAO,QAAQ,eAAf,mBAA2B,IAAI,CAAC,aAAU;AAhR9D,UAAAC;AAgRkE;AAAA,QAC5D,cAAc;AAAA,QACd,aAAYA,MAAA,SAAS,OAAT,OAAAA,UAAe,mCAAW;AAAA,QACtC,UAAU,SAAS,SAAS;AAAA,QAC5B,MAAM,SAAS,SAAS;AAAA,MAC1B;AAAA;AAGA,QAAI,KAAK,SAAS,aAAa,gBAAgB;AAC3C,UAAI,QAAQ,KAAK,WAAW,GAAG;AAC7B,cAAM,aAAa,UAAU,IAAI;AACjC,YAAI,YAAY;AACd,gBAAM,WAAW,oBAAoB,UAAU;AAC/C,cAAI,UAAU;AACZ,wBAAY,CAAC,QAAQ;AACrB,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACJ;AAGA,QAAI,KAAK,SAAS,aAAa,eAAe;AAC5C,UAAI,QAAQ,KAAK,WAAW,GAAG;AAC7B,cAAM,aAAa,UAAU,IAAI;AACjC,YAAI,YAAY;AACd,gBAAM,WAAW,oBAAoB,UAAU;AAC7C,iBAAO,KAAK,UAAU,UAAU;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAW,YAAO,QAAQ,cAAf,YAA4B;AAAA,MACvC,cAAc,sBAAsB,OAAO,aAAa;AAAA,MACxD,OAAO;AAAA,QACL,eAAc,oBAAS,UAAT,mBAAgB,kBAAhB,YAAiC;AAAA,QAC/C,mBAAkB,oBAAS,UAAT,mBAAgB,sBAAhB,YAAqC;AAAA,MACzD;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,aAAa,EAAE,SAAS,iBAAiB,MAAM,YAAY;AAAA,MAC3D,UAAU,oBAAoB,QAAQ;AAAA,MACtC;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE,GAAG,SAAS,QAAQ,KAAK,CAAC;AAE1E,UAAM,OAAO,KAAK,UAAU,EAAE,GAAG,MAAM,QAAQ,KAAK,CAAC;AAErD,UAAM,EAAE,iBAAiB,OAAO,SAAS,IAAI,UAAM,sCAAc;AAAA,MAC/D,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,aAAS,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,QAAQ;AAAA,MACV;AAAA,MACA,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,UAAU,WAAW,GAAG,YAAY,IAAI;AAEhD,UAAM,YAQD,CAAC;AAEN,QAAI,eAA4C;AAChD,QAAI,QAGA;AAAA,MACF,cAAc;AAAA,MACd,kBAAkB;AAAA,IACpB;AACA,QAAI,eAAe;AAEnB,QAAI;AACJ,WAAO;AAAA,MACL,QAAQ,SAAS;AAAA,QACf,IAAI,gBAGF;AAAA,UACA,UAAU,OAAO,YAAY;AAvXvC;AAyXY,gBAAI,CAAC,MAAM,SAAS;AAClB,6BAAe;AACf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,OAAO,MAAM;AAAA,cACf,CAAC;AACD;AAAA,YACF;AAEA,kBAAM,QAAQ,MAAM;AAGpB,gBAAI,WAAW,OAAO;AACpB,6BAAe;AACf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,OAAO,MAAM;AAAA,cACf,CAAC;AACD;AAAA,YACF;AAEA,gBAAI,cAAc;AAChB,6BAAe;AAEf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,GAAG,oBAAoB,KAAK;AAAA,cAC9B,CAAC;AAAA,YACH;AAEA,kBAAI,WAAM,aAAN,mBAAgB,UAAS,MAAM;AACjC,sBAAQ;AAAA,gBACN,eAAc,WAAM,SAAS,MAAM,kBAArB,YAAsC;AAAA,gBACpD,mBACE,WAAM,SAAS,MAAM,sBAArB,YAA0C;AAAA,cAC9C;AAAA,YACF;AAEA,kBAAM,SAAS,MAAM,QAAQ,CAAC;AAE9B,iBAAI,iCAAQ,kBAAiB,MAAM;AACjC,6BAAe,sBAAsB,OAAO,aAAa;AAAA,YAC3D;AAEA,iBAAI,iCAAQ,UAAS,MAAM;AACzB;AAAA,YACF;AAEA,kBAAM,QAAQ,OAAO;AAErB,gBAAI,MAAM,aAAa,QAAQ,MAAM,UAAU,SAAS,GAAG;AACzD,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,WAAW,MAAM;AAAA,cACnB,CAAC;AAAA,YACH;AAEA,gBAAI,MAAM,WAAW,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACrD,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,WAAW,MAAM;AAAA,cACnB,CAAC;AAAA,YACH;AAEA,gBAAI,MAAM,cAAc,MAAM;AAC5B,yBAAW,iBAAiB,MAAM,YAAY;AAC5C,sBAAM,QAAQ,cAAc;AAE5B,oBAAI,UAAU,KAAK,KAAK,MAAM;AAC5B,sBAAI,cAAc,SAAS,YAAY;AACrC,0BAAM,IAAI,0CAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,sBAAI,cAAc,MAAM,MAAM;AAC5B,0BAAM,IAAI,0CAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,wBAAI,mBAAc,aAAd,mBAAwB,SAAQ,MAAM;AACxC,0BAAM,IAAI,0CAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,4BAAU,KAAK,IAAI;AAAA,oBACjB,IAAI,cAAc;AAAA,oBAClB,MAAM;AAAA,oBACN,UAAU;AAAA,sBACR,MAAM,cAAc,SAAS;AAAA,sBAC7B,YAAW,mBAAc,SAAS,cAAvB,YAAoC;AAAA,oBACjD;AAAA,oBACA,aAAa;AAAA,kBACf;AAEA,wBAAMC,YAAW,UAAU,KAAK;AAEhC,wBACE,KAAAA,UAAS,aAAT,mBAAmB,SAAQ,UAC3B,KAAAA,UAAS,aAAT,mBAAmB,cAAa,MAChC;AAEA,wBAAIA,UAAS,SAAS,UAAU,SAAS,GAAG;AAC1C,iCAAW,QAAQ;AAAA,wBACjB,MAAM;AAAA,wBACN,cAAc;AAAA,wBACd,YAAYA,UAAS;AAAA,wBACrB,UAAUA,UAAS,SAAS;AAAA,wBAC5B,eAAeA,UAAS,SAAS;AAAA,sBACnC,CAAC;AAAA,oBACH;AAIA,4BAAI,uCAAeA,UAAS,SAAS,SAAS,GAAG;AAC/C,iCAAW,QAAQ;AAAA,wBACjB,MAAM;AAAA,wBACN,cAAc;AAAA,wBACd,aAAY,KAAAA,UAAS,OAAT,gBAAe,mCAAW;AAAA,wBACtC,UAAUA,UAAS,SAAS;AAAA,wBAC5B,MAAMA,UAAS,SAAS;AAAA,sBAC1B,CAAC;AACD,sBAAAA,UAAS,cAAc;AAAA,oBACzB;AAAA,kBACF;AAEA;AAAA,gBACF;AAGA,sBAAM,WAAW,UAAU,KAAK;AAEhC,oBAAI,SAAS,aAAa;AACxB;AAAA,gBACF;AAEA,sBAAI,mBAAc,aAAd,mBAAwB,cAAa,MAAM;AAC7C,2BAAS,SAAU,cACjB,yBAAc,aAAd,mBAAwB,cAAxB,YAAqC;AAAA,gBACzC;AAGA,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,cAAc;AAAA,kBACd,YAAY,SAAS;AAAA,kBACrB,UAAU,SAAS,SAAS;AAAA,kBAC5B,gBAAe,mBAAc,SAAS,cAAvB,YAAoC;AAAA,gBACrD,CAAC;AAGD,sBACE,cAAS,aAAT,mBAAmB,SAAQ,UAC3B,cAAS,aAAT,mBAAmB,cAAa,YAChC,uCAAe,SAAS,SAAS,SAAS,GAC1C;AACA,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,cAAc;AAAA,oBACd,aAAY,cAAS,OAAT,gBAAe,mCAAW;AAAA,oBACtC,UAAU,SAAS,SAAS;AAAA,oBAC5B,MAAM,SAAS,SAAS;AAAA,kBAC1B,CAAC;AACD,2BAAS,cAAc;AAAA,gBACzB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UAEA,MAAM,YAAY;AAviB5B;AAwiBY,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN;AAAA,cACA,OAAO;AAAA,gBACL,eAAc,WAAM,iBAAN,YAAsB;AAAA,gBACpC,mBAAkB,WAAM,qBAAN,YAA0B;AAAA,cAC9C;AAAA,cACA,GAAI,oBAAoB,OAAO,EAAE,iBAAiB,IAAI,CAAC;AAAA,YACzD,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,aAAa,EAAE,SAAS,gBAAgB;AAAA,MACxC;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AACF;AAIA,IAAM,2BAA2B,cAAE,OAAO;AAAA,EACxC,IAAI,cAAE,OAAO,EAAE,QAAQ;AAAA,EACvB,SAAS,cAAE,OAAO,EAAE,QAAQ;AAAA,EAC5B,OAAO,cAAE,OAAO,EAAE,QAAQ;AAAA,EAC1B,SAAS,cAAE;AAAA,IACT,cAAE,OAAO;AAAA,MACP,SAAS,cAAE,OAAO;AAAA,QAChB,SAAS,cAAE,OAAO,EAAE,QAAQ;AAAA,QAC5B,WAAW,cAAE,OAAO,EAAE,QAAQ;AAAA,QAC9B,YAAY,cACT;AAAA,UACC,cAAE,OAAO;AAAA,YACP,IAAI,cAAE,OAAO,EAAE,QAAQ;AAAA,YACvB,MAAM,cAAE,QAAQ,UAAU;AAAA,YAC1B,UAAU,cAAE,OAAO;AAAA,cACjB,MAAM,cAAE,OAAO;AAAA,cACf,WAAW,cAAE,OAAO;AAAA,YACtB,CAAC;AAAA,UACH,CAAC;AAAA,QACH,EACC,QAAQ;AAAA,MACb,CAAC;AAAA,MACD,OAAO,cAAE,OAAO;AAAA,MAChB,eAAe,cAAE,OAAO,EAAE,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH;AAAA,EACA,OAAO,cACJ,OAAO;AAAA,IACN,eAAe,cAAE,OAAO,EAAE,QAAQ;AAAA,IAClC,mBAAmB,cAAE,OAAO,EAAE,QAAQ;AAAA,EACxC,CAAC,EACA,QAAQ;AACb,CAAC;AAID,IAAM,wBAAwB,cAAE,MAAM;AAAA,EACpC,cAAE,OAAO;AAAA,IACP,IAAI,cAAE,OAAO,EAAE,QAAQ;AAAA,IACvB,SAAS,cAAE,OAAO,EAAE,QAAQ;AAAA,IAC5B,OAAO,cAAE,OAAO,EAAE,QAAQ;AAAA,IAC1B,SAAS,cAAE;AAAA,MACT,cAAE,OAAO;AAAA,QACP,OAAO,cACJ,OAAO;AAAA,UACN,SAAS,cAAE,OAAO,EAAE,QAAQ;AAAA,UAC5B,WAAW,cAAE,OAAO,EAAE,QAAQ;AAAA,UAC9B,YAAY,cACT;AAAA,YACC,cAAE,OAAO;AAAA,cACP,OAAO,cAAE,OAAO;AAAA,cAChB,IAAI,cAAE,OAAO,EAAE,QAAQ;AAAA,cACvB,MAAM,cAAE,QAAQ,UAAU,EAAE,SAAS;AAAA,cACrC,UAAU,cAAE,OAAO;AAAA,gBACjB,MAAM,cAAE,OAAO,EAAE,QAAQ;AAAA,gBACzB,WAAW,cAAE,OAAO,EAAE,QAAQ;AAAA,cAChC,CAAC;AAAA,YACH,CAAC;AAAA,UACH,EACC,QAAQ;AAAA,QACb,CAAC,EACA,QAAQ;AAAA,QACX,eAAe,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,QAC9C,OAAO,cAAE,OAAO;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,UAAU,cACP,OAAO;AAAA,MACN,OAAO,cACJ,OAAO;AAAA,QACN,eAAe,cAAE,OAAO,EAAE,QAAQ;AAAA,QAClC,mBAAmB,cAAE,OAAO,EAAE,QAAQ;AAAA,MACxC,CAAC,EACA,QAAQ;AAAA,IACb,CAAC,EACA,QAAQ;AAAA,EACb,CAAC;AAAA,EACD;AACF,CAAC;;;AM3oBD,IAAAC,yBAMO;;;ACPP,IAAAC,cAAkB;AAMX,IAAM,gBAAgB,cACxB,KAAK;AAAA,EACF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC,EACA,QAAQ,OAAO;AAGb,IAAM,8BAA8B,cACtC,OAAO;AAAA,EACJ,SAAS;AAAA,EACT,OAAO,cAAE,OAAO,EAAE,IAAI,KAAK,EAAE,IAAI,IAAI,EAAE,QAAQ,CAAG;AAAA,EAClD,MAAM,cAAE,OAAO,EAAE,IAAI,GAAG,EAAE,IAAI,CAAG,EAAE,QAAQ,CAAG;AAAA,EAC9C,UAAU,cAAE,OAAO,EAAE,IAAI,GAAG,EAAE,IAAI,CAAG,EAAE,QAAQ,CAAG;AAAA,EAClD,oBAAoB,cACf,MAAM;AAAA,IACH,cAAE,QAAQ,GAAI;AAAA,IACd,cAAE,QAAQ,IAAK;AAAA,IACf,cAAE,QAAQ,KAAK;AAAA,IACf,cAAE,QAAQ,IAAK;AAAA,EACnB,CAAC,EACA,QAAQ,KAAK;AAAA,EAClB,sBAAsB,cAAE,QAAQ,EAAE,QAAQ,KAAK;AACnD,CAAC,EACA,QAAQ;;;AD9Bb,IAAAC,cAAkB;AASX,IAAM,oBAAN,MAAiD;AAAA,EAOpD,YACa,SACA,cACQ,QACnB;AAHW;AACA;AACQ;AATrB,SAAS,uBAAuB;AAAA,EAU7B;AAAA,EARH,IAAI,WAAmB;AACnB,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAQQ,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA,eAAe;AAAA;AAAA;AAAA,IAGf;AAAA,EACJ,GAA+C;AAC3C,UAAM,WAAuC,CAAC;AAG9C,UAAM,oBAAgB,6CAAqB;AAAA,MACvC,UAAU;AAAA,MACV,iBAAiB;AAAA,QACb,QAAQ;AAAA,UACJ,GAAG,mDAAiB;AAAA,UACpB,GAAG,KAAK,OAAO;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,QAAQ;AAAA,IACZ,CAAC;AAED,UAAM,aAAa,MAA0C;AACzD,UAAI,+CAAe,QAAS,QAAO,cAAc;AACjD,UAAI,OAAO;AACP,eAAO,cAAc,MAAM,KAAK;AAAA,MACpC;AAEA,cAAQ,KAAK,SAAS;AAAA,QAClB,KAAK;AACD,iBAAO;AAAA,QACX,KAAK;AACD,iBAAO;AAAA,MACf;AAEA,aAAO;AAAA,IACX;AAGA,UAAM,cAAuC;AAAA,MACzC,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,sBAAsB,KAAK;AAAA,MAC3B,SAAS,WAAW;AAAA;AAAA;AAAA;AAAA,IAIxB;AAEA,QAAI,cAAc;AACd,UACI,CAAC,OAAO,QAAQ,OAAO,QAAQ,OAAO,KAAK,EAAE;AAAA,QACzC;AAAA,MACJ,GACF;AACE,oBAAY,kBAAkB;AAAA,MAClC,OAAO;AACH,iBAAS,KAAK;AAAA,UACV,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS,8BAA8B,YAAY;AAAA,QACvD,CAAC;AAAA,MACL;AAAA,IACJ;AAGA,QAAI,eAAe;AACf,YAAM,qBAA2C,CAAC;AAElD,iBAAW,OAAO,oBAAoB;AAClC,cAAM,QACF,mBAAmB,GAAiC;AACxD,YAAI,UAAU,QAAW;AACrB,sBAAY,GAAG,IAAI;AAAA,QACvB;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,MACH;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,WACF,SACyD;AA7HjE;AA8HQ,UAAM,eACF,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvD,UAAM,EAAE,aAAa,SAAS,IAAI,KAAK,QAAQ,OAAO;AAEtD,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IACd,IAAI,UAAM,sCAAc;AAAA,MACpB,KAAK,KAAK,OAAO,IAAI;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAClB,CAAC;AAAA,MACD,aAAS,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACvB,cAAE,OAAO;AAAA,UACL,YAAY,cAAE,OAAO;AAAA,UACrB,QAAQ,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,QAC9B,CAAC;AAAA,MACL;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACvB,CAAC;AAED,UAAM,QAAQ,MAAM,OAAO,CAAC;AAE5B,WAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA,SAAS;AAAA,QACL,MAAM,KAAK,UAAU,WAAW;AAAA,MACpC;AAAA,MACA,UAAU;AAAA,QACN,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AACJ;;;AEpKA,IAAAC,yBAKO;AACP,IAAAC,cAAkB;;;ACVlB,IAAAC,cAAkB;AAeX,IAAMC,+BAA8B,cAAE,OAAO;AAAA,EAChD,iBAAiB,cAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpD,kBAAkB,cAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACrD,cAAc,cAAE,OAAO,EAAE,IAAI,EAAE,QAAQ;AAC3C,CAAC;;;ADQM,IAAM,2BAAN,MAA+D;AAAA,EAGlE,YACa,SACA,cACQ,QACnB;AAHW;AACA;AACQ;AALrB,SAAS,uBAAuB;AAAA,EAM7B;AAAA,EAEH,IAAI,WAAmB;AACnB,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEQ,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAAsD;AAClD,UAAM,WAA8C,CAAC;AAErD,QAAI,KAAK,YAAY,gBAAgB,KAAK,iBAAiB;AACvD,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAEJ,UAAM,oBAAgB,6CAAqB;AAAA,MACvC,UAAU;AAAA,MACV,iBAAiB;AAAA,QACb,QAAQ;AAAA,UACJ,GAAG,mDAAiB;AAAA,UACpB,GAAG,KAAK,OAAO;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,QAAQC;AAAA,IACZ,CAAC;AAED,UAAM,WAAW,IAAI,SAAS;AAC9B,UAAM,OACF,iBAAiB,OACX,QACA,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/C,aAAS,OAAO,QAAQ,IAAI;AAC5B,aAAS,OAAO,SAAS,KAAK,OAAO;AACrC,QAAI,eAAe;AACf,eAAS,OAAO,iBAAiB,KAAK,YAAY;AAClD,eAAS;AAAA,QACL;AAAA,QACA,cAAc,kBAAkB,SAAS;AAAA,MAC7C;AACA,eAAS;AAAA,QACL;AAAA,QACA,cAAc,mBAAmB,SAAS;AAAA,MAC9C;AACA,UACI,cAAc,iBAAiB,QAC/B,cAAc,iBAAiB,QACjC;AACE,iBAAS;AAAA,UACL;AAAA,UACA,cAAc,aAAa,SAAS;AAAA,QACxC;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,MACH;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,WACF,SACgE;AApGxE;AAqGQ,UAAM,eACF,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvD,UAAM,EAAE,UAAU,SAAS,IAAI,KAAK,QAAQ,OAAO;AAEnD,UAAM;AAAA,MACF,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,IACd,IAAI,UAAM,0CAAkB;AAAA,MACxB,KAAK,KAAK,OAAO,IAAI;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAClB,CAAC;AAAA,MACD,aAAS,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D;AAAA,MACA,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACvB;AAAA,MACJ;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACvB,CAAC;AAED,WAAO;AAAA,MACH,MAAM,SAAS;AAAA,MACf,UAAU,SAAS,aACb,SAAS,WAAW,MAAM,IAAI,CAAC,MAAM,WAAW;AAAA,QAC5C,MAAM;AAAA,QACN,aACI,SAAS,WAAY,mBAAmB,KAAK;AAAA,QACjD,WAAW,SAAS,WAAY,iBAAiB,KAAK;AAAA,MAC1D,EAAE,IACF,CAAC;AAAA,MACP,UAAU,SAAS,gBACb,SAAS,gBACT;AAAA,MACN,oBACI,oBAAS,eAAT,mBAAqB,iBACjB,SAAS,WAAW,iBAAiB,SAAS,OADlD,YAEK;AAAA,MACT;AAAA,MACA,UAAU;AAAA,QACN,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,IAAM,oCAAoC,cAAE,OAAO;AAAA,EAC/C,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAY,cAAE,OAAO;AAAA,EACrB,eAAe,cAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAY,cACP,OAAO;AAAA,IACJ,kBAAkB,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,IACpC,oBAAoB,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,IACtC,OAAO,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,EAC7B,CAAC,EACA,SAAS;AAAA,EACd,qBAAqB,cAChB,OAAO;AAAA,IACJ,SAAS,cAAE;AAAA,MACP,cAAE,OAAO;AAAA,QACL,kBAAkB,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,QACpC,oBAAoB,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,QACtC,YAAY,cAAE,OAAO;AAAA,QACrB,YAAY,cAAE,OAAO;AAAA,MACzB,CAAC;AAAA,IACL;AAAA,EACJ,CAAC,EACA,SAAS;AAClB,CAAC;;;AE3KD,IAAAC,yBAKO;AACP,IAAAC,cAAkB;;;ACTlB,IAAAC,cAAkB;AAYX,IAAM,2BAA2B,cAAE,KAAK;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AAIM,IAAM,yBAAyB,cAAE,KAAK;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;;;ADfM,IAAM,yBAAN,MAAwD;AAAA,EAW7D,YACE,UACA,QACA;AAbF,SAAS,uBAAuB;AAEhC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AA7BzC;AAwCI,SAAK,WAAU,cAAS,UAAT,YAAkB;AACjC,SAAK,WAAW;AAChB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,oBAA6B;AAE/B,WAAO;AAAA,EACT;AAAA,EAEQ,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,EACF,GAEG;AA3DL;AA4DI,UAAM,OAAO,KAAK;AAElB,UAAM,WAAyC,CAAC;AAEhD,QAAI,KAAK,SAAS,SAAS,KAAK,SAAS,IAAI;AACzC,YAAM,IAAI;AAAA,QACV;AAAA,MACA;AAAA,IACJ;AAEA,QAAI,KAAK,YAAY,uBAAuB;AACxC,YAAK,UAAK,SAAS,SAAd,YAAsB,cAAc;AACrC,cAAM,IAAI;AAAA,UACV;AAAA,QACA;AACJ,YAAK,UAAK,SAAS,SAAd,YAAsB,YAAY;AACnC,cAAM,IAAI;AAAA,UACV;AAAA,QACA;AAAA,IACR;AAEA,QAAI,SAAS,WAAW;AACtB,YAAM,mBAAmB;AACzB,YAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,IACzD;AAEA,UAAM,WAAW,4BAA4B,MAAM;AAEnD,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,SACJ,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,OAAO,EACpB,KAAK,IAAI;AAAA,QACZ,uBAAsB,UAAK,SAAS,SAAd,YAAsB;AAAA,QAC5C,sBAAsB,KAAK,SAAS;AAAA,QACpC,kBAAiB,UAAK,SAAS,oBAAd,YAAiC;AAAA,QAClD,uBAAsB,UAAK,SAAS,yBAAd,YAAsC;AAAA,QAC5D,gBAAe,UAAK,SAAS,kBAAd,YAA+B;AAAA,QAC9C,iBAAgB,UAAK,SAAS,mBAAd,YAAgC;AAAA,QAChD,OAAM,UAAK,SAAS,SAAd,YAAsB;AAAA,QAC5B,OAAO,KAAK;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AA9GjE;AA+GI,UAAM,EAAE,MAAM,UAAU,SAAS,IAAI,KAAK,QAAQ;AAAA,MAChD,GAAG;AAAA,MACH,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,OAAO,KAAK,UAAU,IAAI;AAEhC,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,IAAI,UAAM,sCAAc;AAAA,MACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,MACR,CAAC;AAAA,MACD,aAAS,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,OAAO,WAAW,GAAG,YAAY,IAAI;AAE7C,UAAM,QAAO,cAAS,oBAAT,YAA4B;AAEzC,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,MACX,cAAc;AAAA,MACd,OAAO;AAAA,QACL,cAAc;AAAA,QACd,kBAAkB;AAAA,MACpB;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,aAAa,EAAE,SAAS,iBAAiB,MAAM,YAAY;AAAA,MAC3D,UAAU;AAAA,MACV;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACF;AAEA,IAAM,kCAAkC,cAAE,OAAO;AAAA,EAC/C,iBAAiB,cAAE,OAAO,EAAE,QAAQ;AAAA,EACpC,sBAAsB,yBAAyB,SAAS;AAAA,EACxD,YAAY,cAAE,OAAO,EAAE,QAAQ;AACjC,CAAC;;;AEpKD,IAAAC,yBAKO;AACP,IAAAC,cAAkB;AAeX,IAAM,2BAAN,MAA0D;AAAA,EAW/D,YACE,UACA,QACA;AAbF,SAAS,uBAAuB;AAEhC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AAWrC,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,oBAA6B;AAE/B,WAAO;AAAA,EACT;AAAA,EAEQ,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,EACF,GAEG;AA3DL;AA4DI,UAAM,OAAO,KAAK;AAElB,UAAM,WAAyC,CAAC;AAEhD,QAAI,KAAK,SAAS,SAAS,QAAQ;AACjC,UAAI,KAAK,SAAS,OAAO,WAAW,KAAK,SAAS,SAAS;AACzD,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,IACJ;AAEA,QAAI,SAAS,WAAW;AACtB,YAAM,mBAAmB;AACzB,YAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,IACzD;AAEA,UAAM,WAAW,4BAA4B,MAAM;AAEnD,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,SACJ,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,OAAO,EACpB,KAAK,IAAI;AAAA,QACZ,uBAAsB,UAAK,SAAS,SAAd,YAAsB;AAAA,QAC5C,sBAAsB,KAAK,SAAS;AAAA,QACpC,kBAAiB,UAAK,SAAS,oBAAd,YAAiC;AAAA,QAClD,GAAI,KAAK,SAAS,cACd;AAAA,UACE,aAAa,KAAK,SAAS;AAAA,UAC3B,gCACE,UAAK,SAAS,kCAAd,YAA+C;AAAA,QACnD,IACA,CAAC;AAAA,MACP;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AAtGjE;AAuGI,UAAM,EAAE,MAAM,UAAU,SAAS,IAAI,KAAK,QAAQ;AAAA,MAChD,GAAG;AAAA,MACH,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,OAAO,KAAK,UAAU,IAAI;AAEhC,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,IAAI,UAAM,sCAAc;AAAA,MACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,MACR,CAAC;AAAA,MACD,aAAS,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,OAAO,WAAW,GAAG,YAAY,IAAI;AAE7C,QAAI,QAAO,cAAS,wBAAT,YAAgC;AAE3C,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,MACX,cAAc;AAAA,MACd,OAAO;AAAA,QACL,cAAc;AAAA,QACd,kBAAkB;AAAA,MACpB;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,aAAa,EAAE,SAAS,iBAAiB,MAAM,YAAY;AAAA,MAC3D,UAAU;AAAA,MACV;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AACF;AAEA,IAAM,oCAAoC,cAAE,OAAO;AAAA,EACjD,qBAAqB,cAAE,OAAO,EAAE,QAAQ;AAAA,EACxC,sBAAsB,yBAAyB,SAAS;AAAA,EACxD,YAAY,cAAE,OAAO,EAAE,QAAQ;AACjC,CAAC;;;AC5JD,IAAAC,yBAKO;AACP,IAAAC,eAAkB;AAcX,IAAM,iBAAN,MAAgD;AAAA,EAUrD,YACE,QACA;AAXF,SAAS,uBAAuB;AAEhC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AASrC,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,oBAA6B;AAE/B,WAAO;AAAA,EACT;AAAA,EAEQ,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,EACF,GAEG;AACD,UAAM,OAAO,KAAK;AAElB,UAAM,WAAyC,CAAC;AAEhD,QAAI,SAAS,WAAW;AACtB,YAAM,mBAAmB;AACzB,YAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,IACzD;AAEA,UAAM,WAAW,4BAA4B,MAAM;AAEnD,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,SACJ,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,OAAO,EACpB,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AAjFjE;AAkFI,UAAM,EAAE,MAAM,UAAU,SAAS,IAAI,KAAK,QAAQ;AAAA,MAChD,GAAG;AAAA,MACH,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,OAAO,KAAK,UAAU,IAAI;AAEhC,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,IAAI,UAAM,sCAAc;AAAA,MACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,MACR,CAAC;AAAA,MACD,aAAS,uCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,OAAO,WAAW,GAAG,YAAY,IAAI;AAE7C,UAAM,QAAO,cAAS,kBAAT,YAA0B;AAEvC,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,MACX,cAAc;AAAA,MACd,OAAO;AAAA,QACL,cAAc;AAAA,QACd,kBAAkB;AAAA,MACpB;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,aAAa,EAAE,SAAS,iBAAiB,MAAM,YAAY;AAAA,MAC3D,UAAU;AAAA,MACV;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AACF;AAEA,IAAM,0BAA0B,eAAE,OAAO;AAAA,EACvC,aAAa,uBAAuB,QAAQ;AAAA,EAC5C,eAAe,yBAAyB,SAAS;AAAA,EACjD,YAAY,eAAE,OAAO,EAAE,QAAQ;AACjC,CAAC;;;ACvID,IAAAC,0BAIO;AACP,IAAAC,eAAkB;AAYX,IAAM,+BAAN,MAAmE;AAAA,EAGxE,YACW,SACQ,QACjB;AAFS;AACQ;AAJnB,SAAS,uBAAuB;AAAA,EAK7B;AAAA,EAEH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEQ,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAsD;AACpD,UAAM,WAA8C,CAAC;AAErD,UAAM,WAAW,IAAI,SAAS;AAC9B,UAAM,OACJ,iBAAiB,OAAO,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAEvE,aAAS,OAAO,QAAQ,IAAI;AAC5B,aAAS,OAAO,SAAS,KAAK,OAAO;AAErC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SACkE;AAvDtE;AAwDI,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,EAAE,UAAU,SAAS,IAAI,KAAK,QAAQ,OAAO;AAEnD,UAAM;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,IACZ,IAAI,UAAM,2CAAkB;AAAA,MAC1B,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,aAAS,wCAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D;AAAA,MACA,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzBC;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACL,MAAM,SAAS;AAAA,MACf,UAAU,CAAC;AAAA,MACX,UAAU,SAAS,gBAAgB,SAAS,gBAAgB;AAAA,MAC5D,mBAAmB;AAAA,MACnB;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAMA,qCAAoC,eAAE,OAAO;AAAA,EACjD,YAAY,eAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAY,eAAE,OAAO;AAAA,EACrB,eAAe,eAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQnC,qBAAqB,eAClB,OAAO;AAAA,IACN,SAAS,eAAE;AAAA,MACT,eAAE,OAAO;AAAA,QACP,kBAAkB,eAAE,MAAM,eAAE,OAAO,CAAC;AAAA,QACpC,oBAAoB,eAAE,MAAM,eAAE,OAAO,CAAC;AAAA,QACtC,YAAY,eAAE,OAAO;AAAA,QACrB,YAAY,eAAE,OAAO;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,EACF,CAAC,EACA,SAAS,EACT,SAAS;AACd,CAAC;;;AfCM,SAAS,aACd,UAAkC,CAAC,GACnB;AAzHlB;AA0HE,QAAM,WACJ,uDAAqB,QAAQ,OAAO,MAApC,YAAyC;AAE3C,QAAM,YAAY,UAAM,oCAAW;AAAA,IACjC,QAAQ,QAAQ;AAAA,IAChB,yBAAyB;AAAA,IACzB,aAAa;AAAA,EACf,CAAC;AAED,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,UAAU,UAAU,CAAC;AAAA,IACpC,wBAAwB,UAAU;AAAA,IAClC,GAAG,QAAQ;AAAA,EACb;AAEA,QAAM,kBAAkB,CACtB,SACA,WAA+B,CAAC,MAEhC,IAAI,wBAAwB,SAAS,UAAU;AAAA,IAC7C,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,MAAM,IAAI;AAAA,IACvC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,sBAAsB,CAC1B,SACA,aACG;AACH,QAAI,YAAY;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO,gBAAgB,SAAS,QAAQ;AAAA,EAC1C;AAEA,QAAM,2BAA2B,CAC/B,SACA,eAA+C,WAC/C,aACG,IAAI,yBAAyB,SAAS,cAAc;AAAA,IACrD,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,IACpC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,IACf,eAAe;AAAA,EACjB,CAAC;AAEH,QAAM,0BAA0B,CAC9B,YACG,IAAI,6BAA6B,SAAS;AAAA,IAC3C,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,IACpC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,oBAAoB,CACxB,SACA,cACA,aAEA,IAAI,kBAAkB,SAAS,cAAc;AAAA,IAC3C,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,IACpC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,IACf,QAAQ;AAAA,EACV,CAAC;AAEH,QAAM,2BAA2B,CAAC,aAChC,IAAI;AAAA,IACA;AAAA,IACF;AAAA,MACE,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAEF,QAAM,yBAAyB,CAAC,aAC9B,IAAI;AAAA,IACA;AAAA,IACF;AAAA,MACE,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAEF,QAAM,iBAAiB,MACrB,IAAI;AAAA,IACF;AAAA,MACE,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAEF,QAAM,WAAW,CACf,SACA,aACG,oBAAoB,SAAS,QAAQ;AAE1C,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAChB,WAAS,gBAAgB;AACzB,WAAS,oBAAoB;AAC7B,WAAS,SAAS;AAClB,WAAS,gBAAgB;AACzB,WAAS,cAAc;AACvB,WAAS,yBAAyB;AAElC,SAAO;AACT;AAKO,IAAM,SAAS,aAAa;","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","import_zod","SarvamProviderOptionsSchema","SarvamProviderOptionsSchema","import_provider_utils","import_zod","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod","sarvamTranscriptionResponseSchema"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1500,14 +1500,14 @@ var sarvamTranscriptionResponseSchema2 = z11.object({
|
|
|
1500
1500
|
function createSarvam(options = {}) {
|
|
1501
1501
|
var _a;
|
|
1502
1502
|
const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : "https://api.sarvam.ai";
|
|
1503
|
-
const
|
|
1503
|
+
const getApiKey = () => loadApiKey({
|
|
1504
1504
|
apiKey: options.apiKey,
|
|
1505
1505
|
environmentVariableName: "SARVAM_API_KEY",
|
|
1506
1506
|
description: "Sarvam"
|
|
1507
1507
|
});
|
|
1508
1508
|
const getHeaders = () => ({
|
|
1509
|
-
Authorization: `Bearer ${
|
|
1510
|
-
"api-subscription-key":
|
|
1509
|
+
Authorization: `Bearer ${getApiKey()}`,
|
|
1510
|
+
"api-subscription-key": getApiKey(),
|
|
1511
1511
|
...options.headers
|
|
1512
1512
|
});
|
|
1513
1513
|
const createChatModel = (modelId, settings = {}) => new SarvamChatLanguageModel(modelId, settings, {
|
package/dist/index.mjs.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-speech-model.ts","../src/sarvam-speech-settings.ts","../src/sarvam-transcription-model.ts","../src/sarvam-transcription-settings.ts","../src/sarvam-translation-model.ts","../src/sarvam-config.ts","../src/sarvam-transliterate-model.ts","../src/sarvam-lid-model.ts","../src/sarvam-speech-translation-model.ts"],"sourcesContent":["import {\n LanguageModelV1,\n SpeechModelV1,\n TranscriptionModelV1\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from \"@ai-sdk/provider-utils\";\nimport { SarvamChatLanguageModel } from \"./sarvam-chat-language-model\";\nimport { SarvamChatModelId, SarvamChatSettings } from \"./sarvam-chat-settings\";\nimport { SarvamLanguageCode } from \"./sarvam-config\";\nimport {\n SarvamSpeechModel,\n} from \"./sarvam-speech-model\";\nimport { SarvamSpeechModelId, SarvamSpeechSettings } from \"./sarvam-speech-settings\";\nimport {\n SarvamTranscriptionModel,\n} from \"./sarvam-transcription-model\";\nimport { SarvamSpeechTranslationModelId, SarvamTranscriptionCallOptions, SarvamTranscriptionModelId } from \"./sarvam-transcription-settings\";\nimport { SarvamTranslationModel } from \"./sarvam-translation-model\";\nimport { SarvamTranslationSettings } from \"./sarvam-translation-settings\";\nimport { SarvamTransliterateModel } from \"./sarvam-transliterate-model\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\nimport { SarvamLidModel } from \"./sarvam-lid-model\";\nimport { SarvamSpeechTranslationModel } from \"./sarvam-speech-translation-model\";\n\nexport interface SarvamProvider {\n /**\n * Creates a model for text generation.\n */\n (modelId: SarvamChatModelId, settings?: SarvamChatSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam chat model for text generation.\n */\n languageModel(\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ): LanguageModelV1;\n\n /**\n * Creates a Sarvam model for transcription.\n */\n transcription(\n modelId: SarvamTranscriptionModelId,\n /**\n * Audio source language code\n *\n * @default unknown\n */\n languageCode?: SarvamLanguageCode | \"unknown\",\n settings?: SarvamTranscriptionCallOptions,\n ): TranscriptionModelV1;\n\n /**\n * Creates a Sarvam model for Speech translation.\n */\n speechTranslation(\n modelId: SarvamSpeechTranslationModelId,\n ): TranscriptionModelV1;\n\n /**\n * Creates a Sarvam model for speech.\n */\n speech(\n modelId: SarvamSpeechModelId,\n languageCode: SarvamLanguageCode,\n settings?: SarvamSpeechSettings,\n ): SpeechModelV1;\n\n /**\n * Creates an Sarvam model for transliterate.\n */\n transliterate(settings: SarvamTransliterateSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam model for translation.\n */\n translation(settings: SarvamTranslationSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam model for language identification.\n */\n languageIdentification(): LanguageModelV1;\n}\n\nexport interface SarvamProviderSettings {\n /**\n * URL for the Sarvam API calls.\n * @default https://api.sarvam.ai\n */\n baseURL?: string;\n\n /**\n * API key for authenticating requests.\n * @default process.env.SARVAM_API_KEY\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n * @default\n Authorization: `Bearer ${process.env.SARVAM_API_KEY}`,\n \"api-subscription-key\": process.env.SARVAM_API_KEY\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n* Create an Sarvam provider instance.\n*/\nexport function createSarvam(\n options: SarvamProviderSettings = {},\n): SarvamProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? \"https://api.sarvam.ai\";\n\n const 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 ) => new SarvamTranscriptionModel(modelId, languageCode, {\n provider: \"sarvam.transcription\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n transcription: settings,\n });\n\n const createSpeechTranslation = (\n modelId: SarvamTranscriptionModelId\n ) => new SarvamSpeechTranslationModel(modelId, {\n provider: \"sarvam.transcription\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createSpeechModel = (\n modelId: SarvamSpeechModelId,\n languageCode: SarvamLanguageCode,\n settings?: SarvamSpeechSettings,\n ) =>\n new SarvamSpeechModel(modelId, languageCode, {\n provider: \"sarvam.speech\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n speech: settings,\n });\n\n const createTransliterateModel = (settings: SarvamTransliterateSettings) =>\n new SarvamTransliterateModel(\n settings,\n {\n provider: \"sarvam.transliterate\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const createTranslationModel = (settings: SarvamTranslationSettings) =>\n new SarvamTranslationModel(\n settings,\n {\n provider: \"sarvam.translation\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const createLidModel = () =>\n new SarvamLidModel(\n {\n provider: \"sarvam.lid\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const provider = (\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ) => createLanguageModel(modelId, settings);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createChatModel;\n provider.transcription = createTranscriptionModel;\n provider.speechTranslation = createSpeechTranslation;\n provider.speech = createSpeechModel;\n provider.transliterate = createTransliterateModel;\n provider.translation = createTranslationModel;\n provider.languageIdentification = createLidModel;\n\n return provider;\n}\n\n/**\n* Default Sarvam provider instance.\n*/\nexport const sarvam = createSarvam();\n","import {\n InvalidResponseDataError,\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1FunctionToolCall,\n LanguageModelV1Prompt,\n LanguageModelV1ProviderMetadata,\n LanguageModelV1StreamPart,\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n ParseResult,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { getResponseMetadata } from \"./get-response-metadata\";\nimport { mapSarvamFinishReason } from \"./map-sarvam-finish-reason\";\nimport { SarvamChatModelId, SarvamChatSettings } from \"./sarvam-chat-settings\";\nimport {\n sarvamErrorDataSchema,\n sarvamFailedResponseHandler,\n} from \"./sarvam-error\";\nimport {\n extractToolCallData,\n parseJSON,\n prepareTools,\n simulateJsonSchema,\n simulateToolCalling,\n} from \"./sarvam-prepare-tools\";\n\ntype SarvamChatConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: SarvamChatModelId;\n readonly settings: SarvamChatSettings;\n\n private readonly config: SarvamChatConfig;\n\n constructor(\n modelId: SarvamChatModelId,\n settings: SarvamChatSettings,\n config: SarvamChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return !this.settings.downloadImages;\n }\n\n private async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n stream,\n providerMetadata,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n const simulate = this.settings.simulate\n\n if (type === \"object-json\" && simulate === \"tool-calling\")\n throw new Error('Use { simulate: \"json-object\" } with generateObject()')\n\n if (type === \"regular\" && simulate === \"json-object\")\n throw new Error('Use { simulate: \"tool-calling\" } with generateText()')\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (stream) {\n warnings.push({\n type: \"other\",\n message: \"Streaming is still experimental for Sarvam\",\n });\n }\n\n if (topK != null) {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"topK\",\n });\n }\n\n if (\n responseFormat != null &&\n responseFormat.type === \"json\" &&\n responseFormat.schema != null\n ) {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"responseFormat\",\n details: \"JSON response format schema is not supported\",\n });\n }\n\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: providerMetadata,\n schema: z.object({\n reasoningFormat: z.enum([\"parsed\", \"raw\", \"hidden\"]).nullish(),\n }),\n });\n\n const baseArgs = (\n prompt: LanguageModelV1Prompt,\n extraSystemPrompt?: string,\n ) => ({\n // model id:\n model: this.modelId,\n\n // model specific settings:\n user: this.settings.user,\n parallel_tool_calls: this.settings.parallelToolCalls,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n\n // response format:\n response_format:\n // json object response format is not supported for streaming:\n stream === false && responseFormat?.type === \"json\"\n ? { type: \"json_object\" }\n : undefined,\n\n // provider options:\n reasoning_format: sarvamOptions?.reasoningFormat,\n\n // messages:\n messages: convertToSarvamChatMessages(prompt, extraSystemPrompt),\n });\n\n switch (type) {\n case \"regular\": {\n const { tools, tool_choice, toolWarnings } = prepareTools({\n mode,\n });\n\n const extraSystemPrompt =\n tools && simulate === \"tool-calling\"\n ? await simulateToolCalling(tools)\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, extraSystemPrompt),\n tools,\n tool_choice,\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n case \"object-json\": {\n const extraSystemPrompt = simulate === \"json-object\"\n ? simulateJsonSchema()\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, extraSystemPrompt),\n response_format:\n // json object response format is not supported for streaming:\n stream === false ? { type: \"json_object\" } : undefined,\n },\n warnings,\n };\n }\n\n case \"object-tool\": {\n return {\n args: {\n ...baseArgs(prompt),\n tool_choice: {\n type: \"function\",\n function: { name: mode.tool.name },\n },\n tools: [\n {\n type: \"function\",\n function: {\n name: mode.tool.name,\n description: mode.tool.description,\n parameters: mode.tool.parameters,\n },\n },\n ],\n },\n warnings,\n };\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings } = await this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n const choice = response.choices[0];\n\n let text = choice.message.content ?? undefined;\n\n let toolCalls = choice.message.tool_calls?.map((toolCall) => ({\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments!,\n })) as LanguageModelV1FunctionToolCall[] | undefined;\n\n // simulate tool calling through prompt engineering\n if (this.settings.simulate === \"tool-calling\") {\n if (text && text.length !== 0) {\n const jsonObject = parseJSON(text);\n if (jsonObject) {\n const newTools = extractToolCallData(jsonObject);\n if (newTools) {\n toolCalls = [newTools];\n text = undefined;\n }\n }\n }\n }\n\n // simulate JSON object generation through prompt engineering\n if (this.settings.simulate === \"json-object\") {\n if (text && text.length !== 0) {\n const jsonObject = parseJSON(text);\n if (jsonObject) {\n const newTools = extractToolCallData(jsonObject);\n text = JSON.stringify(jsonObject);\n }\n }\n }\n\n return {\n text,\n toolCalls,\n reasoning: choice.message.reasoning ?? undefined,\n finishReason: mapSarvamFinishReason(choice.finish_reason),\n usage: {\n promptTokens: response.usage?.prompt_tokens ?? NaN,\n completionTokens: response.usage?.completion_tokens ?? NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: getResponseMetadata(response),\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n const { args, warnings } = await this.getArgs({ ...options, stream: true });\n\n const body = JSON.stringify({ ...args, stream: true });\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...args,\n stream: true,\n },\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n sarvamChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const toolCalls: Array<{\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n let finishReason: LanguageModelV1FinishReason = \"unknown\";\n let usage: {\n promptTokens: number | undefined;\n completionTokens: number | undefined;\n } = {\n promptTokens: undefined,\n completionTokens: undefined,\n };\n let isFirstChunk = true;\n\n let providerMetadata: LanguageModelV1ProviderMetadata | undefined;\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof sarvamChatChunkSchema>>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = \"error\";\n controller.enqueue({\n type: \"error\",\n error: chunk.error,\n });\n return;\n }\n\n const value = chunk.value;\n\n // handle error chunks:\n if (\"error\" in value) {\n finishReason = \"error\";\n controller.enqueue({\n type: \"error\",\n error: value.error,\n });\n return;\n }\n\n if (isFirstChunk) {\n isFirstChunk = false;\n\n controller.enqueue({\n type: \"response-metadata\",\n ...getResponseMetadata(value),\n });\n }\n\n if (value.x_sarvam?.usage != null) {\n usage = {\n promptTokens: value.x_sarvam.usage.prompt_tokens ?? undefined,\n completionTokens:\n value.x_sarvam.usage.completion_tokens ?? undefined,\n };\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = mapSarvamFinishReason(choice.finish_reason);\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.reasoning != null && delta.reasoning.length > 0) {\n controller.enqueue({\n type: \"reasoning\",\n textDelta: delta.reasoning,\n });\n }\n\n if (delta.content != null && delta.content.length > 0) {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: delta.content,\n });\n }\n\n if (delta.tool_calls != null) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n if (toolCalls[index] == null) {\n if (toolCallDelta.type !== \"function\") {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: \"function\",\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? \"\",\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function!.arguments +=\n toolCallDelta.function?.arguments ?? \"\";\n }\n\n // send delta\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCallDelta.function.arguments ?? \"\",\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: {\n promptTokens: usage.promptTokens ?? NaN,\n completionTokens: usage.completionTokens ?? NaN,\n },\n ...(providerMetadata != null ? { providerMetadata } : {}),\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings,\n request: { body },\n };\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst sarvamChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n content: z.string().nullish(),\n reasoning: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n index: z.number(),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst sarvamChatChunkSchema = z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z\n .object({\n content: z.string().nullish(),\n reasoning: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z.literal(\"function\").optional(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullable().optional(),\n index: z.number(),\n }),\n ),\n x_sarvam: z\n .object({\n usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n })\n .nullish(),\n })\n .nullish(),\n }),\n sarvamErrorDataSchema,\n]);\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { convertUint8ArrayToBase64 } from \"@ai-sdk/provider-utils\";\nimport { SarvamChatPrompt } from \"./sarvam-api-types\";\n\nexport function convertToSarvamChatMessages(\n prompt: LanguageModelV1Prompt,\n fakeToolSystemPrompt?: string,\n): SarvamChatPrompt {\n const messages: SarvamChatPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case \"system\": {\n const contentData = fakeToolSystemPrompt\n ? `${content}\\n\\n${fakeToolSystemPrompt}`\n : content;\n messages.push({ role: \"system\", content: contentData });\n break;\n }\n\n case \"user\": {\n if (content.length === 1 && content[0].type === \"text\") {\n messages.push({ role: \"user\", content: content[0].text });\n break;\n }\n\n messages.push({\n role: \"user\",\n content: content.map((part) => {\n switch (part.type) {\n case \"text\": {\n return { type: \"text\", text: part.text };\n }\n case \"image\": {\n return {\n type: \"image_url\",\n image_url: {\n url:\n part.image instanceof URL\n ? part.image.toString()\n : `data:${\n part.mimeType ?? \"image/jpeg\"\n };base64,${convertUint8ArrayToBase64(part.image)}`,\n },\n };\n }\n case \"file\": {\n throw new UnsupportedFunctionalityError({\n functionality: \"File content parts in user messages\",\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case \"assistant\": {\n let text = \"\";\n const toolCalls: Array<{\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case \"text\": {\n text += part.text;\n break;\n }\n case \"tool-call\": {\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.args),\n },\n });\n break;\n }\n }\n }\n\n messages.push({\n role: \"assistant\",\n content: text,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case \"tool\": {\n for (const toolResponse of content) {\n messages.push({\n role: \"tool\",\n tool_call_id: toolResponse.toolCallId,\n content: JSON.stringify(toolResponse.result),\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import { LanguageModelV1FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapSarvamFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n return \"length\";\n case \"content_filter\":\n return \"content-filter\";\n case \"function_call\":\n case \"tool_calls\":\n return \"tool-calls\";\n default:\n return \"unknown\";\n }\n}\n","import { z } from \"zod\";\nimport { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\n\nexport const sarvamErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n }),\n});\n\nexport type SarvamErrorData = z.infer<typeof sarvamErrorDataSchema>;\n\nexport const sarvamFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: sarvamErrorDataSchema,\n errorToMessage: (data) => data.error.message,\n});\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FunctionToolCall,\n UnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\n\ntype SarvamTools = Array<{\n type: \"function\";\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n}>;\n\nexport function prepareTools({\n mode,\n}: {\n mode: Parameters<LanguageModelV1[\"doGenerate\"]>[0][\"mode\"] & {\n type: \"regular\";\n };\n}): {\n tools:\n | undefined\n | Array<{\n type: \"function\";\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n tool_choice:\n | { type: \"function\"; function: { name: string } }\n | \"auto\"\n | \"none\"\n | \"required\"\n | undefined;\n toolWarnings: LanguageModelV1CallWarning[];\n fakeTools?: string;\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n const toolWarnings: LanguageModelV1CallWarning[] = [];\n\n if (tools == null) {\n return { tools: undefined, tool_choice: undefined, toolWarnings };\n }\n\n const toolChoice = mode.toolChoice;\n\n const sarvamTools: SarvamTools = [];\n\n for (const tool of tools) {\n if (tool.type === \"provider-defined\") {\n toolWarnings.push({ type: \"unsupported-tool\", tool });\n } else {\n sarvamTools.push({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: sarvamTools, tool_choice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case \"auto\":\n case \"none\":\n case \"required\":\n return { tools: sarvamTools, tool_choice: type, toolWarnings };\n case \"tool\":\n return {\n tools: sarvamTools,\n tool_choice: {\n type: \"function\",\n function: {\n name: toolChoice.toolName,\n },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `Unsupported tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n\nimport { compile } from \"json-schema-to-typescript\";\n\nexport const simulateToolCalling = async (\n tools: SarvamTools,\n): Promise<string> => {\n const context = [];\n const names = [];\n\n for (const tool of tools) {\n names.push(tool.function.name);\n\n const tsType = await compile(\n tool.function.parameters as object,\n tool.function.name,\n {\n bannerComment: \"\",\n format: false,\n declareExternallyReferenced: true,\n enableConstEnums: true,\n unreachableDefinitions: false,\n strictIndexSignatures: false,\n },\n );\n const toolContext = tsType\n .replace(\n /export interface (\\w+) \\{/,\n (_: any, name: string) => `type ${tool.function.name} = {`,\n )\n .replace(/\\/\\*\\*\\s*\\n\\s*\\*\\s*(.*?)\\s*\\n\\s*\\*\\//, \"// $1\");\n context.push(`// ${tool.function.description}\\n${toolContext}`);\n }\n\n const text = `These are the available tool you can execute.\n\n${context.join(\"\\n\")}\n\ntype YourToolChoices = {\n 'toolName': '${names.join(\"' | '\")}',\n 'toolData': ${names.join(\" | \")}\n}\n\nRespond normally.\nIf user request to execute any tool, respond with pure JSON format\nMake sure to translate toolData to English.\n\neg:\nconst myChoice: YourToolChoices = {\n \"toolName\": <name>,\n \"toolData\": <data>\n}`;\n\n return text;\n};\n\nexport const extractToolCallData = (\n jsonObject: object,\n): LanguageModelV1FunctionToolCall | void => {\n\n type ToolFunction = {\n toolName: string;\n toolData: any;\n };\n const toolFunction = jsonObject as ToolFunction\n\n if (!(\"toolName\" in toolFunction)) return;\n if (!(\"toolData\" in toolFunction)) return;\n\n return {\n args: JSON.stringify(toolFunction.toolData),\n toolCallId: generateId(),\n toolCallType: \"function\",\n toolName: toolFunction.toolName,\n };\n\n};\n\nexport const parseJSON = <T extends object>(\n text: string,\n):T | void => {\n const jsonRegex = /\\{(?:[^{}]*|\\{[^{}]*\\})*\\}/g;\n const jsonMatches = text.match(jsonRegex);\n\n if (jsonMatches && jsonMatches[0]) {\n try {\n const jsonObject = JSON.parse(jsonMatches[0])\n return jsonObject\n }\n catch (error) {}\n }\n}\n\nexport const simulateJsonSchema = () => \"If user doen't specify, make sure to translate json data content into pure English.\"\n","import type { SpeechModelV1, SpeechModelV1CallWarning } from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type { SarvamConfig, SarvamLanguageCode } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport {\n SarvamProviderOptionsSchema,\n SarvamSpeechSettings,\n SpeakerSchema,\n type SarvamSpeechModelId,\n} from \"./sarvam-speech-settings\";\nimport type { SarvamSpeechAPITypes } from \"./sarvam-api-types\";\nimport { z } from \"zod\";\n\ninterface SarvamSpeechModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n speech?: SarvamSpeechSettings;\n}\n\nexport class SarvamSpeechModel implements SpeechModelV1 {\n readonly specificationVersion = \"v1\";\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: SarvamSpeechModelId,\n readonly languageCode: SarvamLanguageCode,\n private readonly config: SarvamSpeechModelConfig,\n ) {}\n\n private getArgs({\n text,\n voice,\n outputFormat = \"wav\",\n // speed,\n // instructions,\n providerOptions,\n }: Parameters<SpeechModelV1[\"doGenerate\"]>[0]) {\n const warnings: SpeechModelV1CallWarning[] = [];\n\n // Parse provider options\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: {\n sarvam: {\n ...providerOptions?.sarvam,\n ...this.config.speech,\n },\n },\n schema: SarvamProviderOptionsSchema,\n });\n\n const getSpeaker = (): SarvamSpeechCallOptions[\"speaker\"] => {\n if (sarvamOptions?.speaker) return sarvamOptions.speaker;\n if (voice) {\n return SpeakerSchema.parse(voice);\n }\n\n switch (this.modelId) {\n case \"bulbul:v1\":\n return \"meera\";\n case \"bulbul:v2\":\n return \"manisha\";\n }\n\n return \"meera\";\n };\n\n // Create request body\n const requestBody: Record<string, unknown> = {\n model: this.modelId,\n text: text,\n target_language_code: this.languageCode,\n speaker: getSpeaker(),\n // response_format: \"wav\",\n // speed,\n // instructions,\n };\n\n if (outputFormat) {\n if (\n [\"mp3\", \"opus\", \"aac\", \"flac\", \"wav\", \"pcm\"].includes(\n outputFormat,\n )\n ) {\n requestBody.response_format = outputFormat;\n } else {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"outputFormat\",\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`,\n });\n }\n }\n\n // Add provider-specific options\n if (sarvamOptions) {\n const speechModelOptions: SarvamSpeechAPITypes = {};\n\n for (const key in speechModelOptions) {\n const value =\n speechModelOptions[key as keyof SarvamSpeechAPITypes];\n if (value !== undefined) {\n requestBody[key] = value;\n }\n }\n }\n\n return {\n requestBody,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV1[\"doGenerate\"]>>> {\n const currentDate =\n this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = this.getArgs(options);\n\n const {\n value,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/text-to-speech\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n z.object({\n request_id: z.string(),\n audios: z.array(z.string()),\n }),\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const audio = value.audios[0];\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import { z } from \"zod\";\n\nexport type SarvamSpeechModelId = \"bulbul:v1\" | \"bulbul:v2\" | (string & {});\n\nexport type SarvamSpeechVoices = z.infer<typeof SpeakerSchema>;\n\nexport const SpeakerSchema = z\n .enum([\n \"meera\",\n \"pavithra\",\n \"maitreyi\",\n \"arvind\",\n \"amol\",\n \"amartya\",\n \"diya\",\n \"neel\",\n \"misha\",\n \"vian\",\n \"arjun\",\n \"maya\",\n \"anushka\",\n \"abhilash\",\n \"manisha\",\n \"vidya\",\n \"arya\",\n \"karun\",\n \"hitesh\",\n ])\n .default(\"meera\");\n\n// https://docs.sarvam.ai/api-reference-docs/text-to-speech/convert\nexport const SarvamProviderOptionsSchema = z\n .object({\n speaker: SpeakerSchema,\n pitch: z.number().min(-0.75).max(0.75).default(0.0),\n pace: z.number().min(0.5).max(2.0).default(1.0),\n loudness: z.number().min(0.3).max(3.0).default(1.0),\n speech_sample_rate: z\n .union([\n z.literal(8000),\n z.literal(16000),\n z.literal(22050),\n z.literal(24000),\n ])\n .default(22050),\n enable_preprocessing: z.boolean().default(false),\n })\n .partial();\n\n/**\n * Configuration settings for Sarvam Text-to-Speech API.\n *\n * This type defines the customizable options for generating speech audio\n * using the Sarvam Text-to-Speech API. Each property corresponds to a specific\n * feature or parameter supported by the API.\n */\nexport type SarvamSpeechSettings = {\n /**\n * The speaker voice to be used for the output audio.\n *\n * @default \"meera\"\n * @example \"meera\" (Default female voice for bulbul:v1)\n * @example \"arvind\" (Male voice for bulbul:v1)\n * @example \"anushka\" (Female voice for bulbul:v2)\n */\n speaker?: SarvamSpeechVoices;\n\n /**\n * Controls the pitch of the audio.\n *\n * @default 0.0\n * @example -0.5 (Deeper voice)\n * @example 0.5 (Sharper voice)\n */\n pitch?: number;\n\n /**\n * Controls the speed of the audio.\n *\n * @default 1.0\n * @example 0.5 (Slower speech)\n * @example 2.0 (Faster speech)\n */\n pace?: number;\n\n /**\n * Controls the loudness of the audio.\n *\n * @default 1.0\n * @example 0.3 (Quieter audio)\n * @example 2.5 (Louder audio)\n */\n loudness?: number;\n\n /**\n * Specifies the sample rate of the output audio.\n *\n * @default 22050\n * @example 8000 (Low-quality audio)\n * @example 24000 (High-quality audio)\n */\n speech_sample_rate?: 8000 | 16000 | 22050 | 24000;\n\n /**\n * Enables preprocessing for normalization of English words and numeric entities\n * (e.g., numbers, dates) in the input text.\n *\n * @default false\n * @example true (Enable preprocessing)\n * @example false (Disable preprocessing)\n */\n enable_preprocessing?: boolean;\n};\n","import {\n TranscriptionModelV1,\n TranscriptionModelV1CallWarning,\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postFormDataToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { SarvamConfig, SarvamLanguageCode } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport {\n SarvamProviderOptionsSchema,\n SarvamTranscriptionCallOptions,\n SarvamTranscriptionModelId,\n} from \"./sarvam-transcription-settings\";\n\n// https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe\ninterface SarvamTranscriptionModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n transcription?: SarvamTranscriptionCallOptions;\n}\n\nexport class SarvamTranscriptionModel implements TranscriptionModelV1 {\n readonly specificationVersion = \"v1\";\n\n constructor(\n readonly modelId: SarvamTranscriptionModelId,\n readonly languageCode: SarvamLanguageCode | \"unknown\",\n private readonly config: SarvamTranscriptionModelConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0]) {\n const warnings: TranscriptionModelV1CallWarning[] = [];\n\n if (this.modelId === \"saarika:v1\" && this.languageCode === \"unknown\")\n throw new Error(\n \"Language code unknown is not supported for model saarika:v1\",\n );\n\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: {\n sarvam: {\n ...providerOptions?.sarvam,\n ...this.config.transcription,\n },\n },\n schema: SarvamProviderOptionsSchema,\n });\n\n const formData = new FormData();\n const blob =\n audio instanceof Blob\n ? audio\n : new Blob([audio], { type: mediaType });\n\n formData.append(\"file\", blob);\n formData.append(\"model\", this.modelId);\n if (sarvamOptions) {\n formData.append(\"language_code\", this.languageCode);\n formData.append(\n \"with_timestamps\",\n sarvamOptions.with_timestamps ? \"true\" : \"false\",\n );\n formData.append(\n \"with_diarization\",\n sarvamOptions.with_diarization ? \"true\" : \"false\",\n );\n if (\n sarvamOptions.num_speakers !== null &&\n sarvamOptions.num_speakers !== undefined\n ) {\n formData.append(\n \"num_speakers\",\n sarvamOptions.num_speakers.toString(),\n );\n }\n }\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV1[\"doGenerate\"]>>> {\n const currentDate =\n this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: this.config.url({\n path: \"/speech-to-text\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text: response.transcript,\n segments: response.timestamps\n ? response.timestamps.words.map((word, index) => ({\n text: word,\n startSecond:\n response.timestamps!.start_time_seconds[index],\n endSecond: response.timestamps!.end_time_seconds[index],\n }))\n : [],\n language: response.language_code\n ? response.language_code\n : undefined,\n durationInSeconds:\n response.timestamps?.end_time_seconds[\n response.timestamps.end_time_seconds.length - 1\n ] ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst sarvamTranscriptionResponseSchema = z.object({\n request_id: z.string().nullable(),\n transcript: z.string(),\n language_code: z.string().nullable(),\n timestamps: z\n .object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n words: z.array(z.string()),\n })\n .optional(),\n diarized_transcript: z\n .object({\n entries: z.array(\n z.object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n transcript: z.string(),\n speaker_id: z.string(),\n }),\n ),\n })\n .optional(),\n});\n","import { z } from \"zod\";\n\nexport type SarvamTranscriptionModelId =\n | \"saarika:v2\"\n | \"saarika:v1\"\n | \"saarika:flash\"\n | (string & {});\n\nexport type SarvamSpeechTranslationModelId =\n | \"saaras:v1\"\n | \"saaras:v2\"\n | \"saaras:turbo\"\n | \"saaras:flash\"\n | (string & {});\n\nexport const SarvamProviderOptionsSchema = z.object({\n with_timestamps: z.boolean().nullish().default(false),\n with_diarization: z.boolean().nullish().default(false),\n num_speakers: z.number().int().nullish(),\n});\n\nexport type SarvamTranscriptionCallOptions = {\n with_timestamps?: boolean,\n /**\n * Enables speaker diarization, which identifies and separates different speakers in the audio.\n * When set to true, the API will provide speaker-specific segments in the response.\n * Note: This parameter is currently in Beta mode.\n */\n with_diarization?: boolean,\n /**\n * Number of speakers to be detected in the audio.\n * This is used when with_diarization is set to true.\n * Can be null.\n */\n num_speakers?: number,\n}\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\nimport { SarvamTranslationSettings } from \"./sarvam-translation-settings\";\n\ntype SarvamTranslationConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamTranslationModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: NonNullable<SarvamTranslationSettings[\"model\"]>\n readonly settings: SarvamTranslationSettings;\n\n private readonly config: SarvamTranslationConfig;\n\n constructor(\n settings: SarvamTranslationSettings,\n config: SarvamTranslationConfig,\n ) {\n this.modelId = settings.model ?? \"mayura:v1\";\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (this.settings.from === this.settings.to) {\n throw new Error(\n \"Source and target languages code must be different.\",\n );\n }\n\n if (this.modelId === \"sarvam-translate:v1\") {\n if ((this.settings.mode ?? \"formal\") !== \"formal\")\n throw new Error(\n \"Sarvam 'sarvam-translate:v1' only support mode formal.\",\n );\n if ((this.settings.from ?? \"auto\") === \"auto\")\n throw new Error(\n \"Sarvam 'sarvam-translate:v1' requires source language code.\",\n );\n }\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n source_language_code: this.settings.from ?? \"auto\",\n target_language_code: this.settings.to,\n numerals_format: this.settings.numerals_format ?? \"international\",\n enable_preprocessing: this.settings.enable_preprocessing ?? false,\n output_script: this.settings.output_script ?? null,\n speaker_gender: this.settings.speaker_gender ?? \"Male\",\n mode: this.settings.mode ?? \"formal\",\n model: this.modelId,\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/translate\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranslationResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n const text = response.translated_text ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Translation feature doesn't support streaming yet\");\n }\n}\n\nconst sarvamTranslationResponseSchema = z.object({\n translated_text: z.string().nullish(),\n source_language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import { FetchFunction } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\n\nexport type SarvamConfig = {\n provider: string;\n url: (options: { modelId: string; path: string }) => string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n generateId?: () => string;\n};\n\nexport type SarvamLanguageCode = z.infer<typeof SarvamLanguageCodeSchema>;\n\nexport const SarvamLanguageCodeSchema = z.enum([\n \"hi-IN\",\n \"bn-IN\",\n \"kn-IN\",\n \"ml-IN\",\n \"mr-IN\",\n \"od-IN\",\n \"pa-IN\",\n \"ta-IN\",\n \"te-IN\",\n \"en-IN\",\n \"gu-IN\",\n]);\n\nexport type SarvamScriptCode = z.infer<typeof SarvamScriptCodeSchema>\n\nexport const SarvamScriptCodeSchema = z.enum([\n \"Latn\",\n \"Deva\",\n \"Beng\",\n \"Gujr\",\n \"Knda\",\n \"Mlym\",\n \"Orya\",\n \"Guru\",\n \"Taml\",\n \"Telu\",\n])\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\n\ntype SarvamTransliterateConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamTransliterateModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: \"unknown\";\n readonly settings: SarvamTransliterateSettings;\n\n private readonly config: SarvamTransliterateConfig;\n\n constructor(\n settings: SarvamTransliterateSettings,\n config: SarvamTransliterateConfig,\n ) {\n this.modelId = \"unknown\";\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (this.settings.from !== \"auto\") {\n if (this.settings.to !== \"en-IN\" && this.settings.from !== \"en-IN\")\n throw new Error(\n \"Sarvam doesn't support Indic-Indic Transliteration yet\",\n );\n }\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n source_language_code: this.settings.from ?? \"auto\",\n target_language_code: this.settings.to,\n numerals_format: this.settings.numerals_format ?? \"international\",\n ...(this.settings.spoken_form\n ? {\n spoken_form: this.settings.spoken_form,\n spoken_form_numerals_language:\n this.settings.spoken_form_numerals_language ?? \"english\",\n }\n : {}),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/transliterate\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTransliterateResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n let text = response.transliterated_text ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Transliterate feature doesn't streaming yet\");\n }\n}\n\nconst sarvamTransliterateResponseSchema = z.object({\n transliterated_text: z.string().nullish(),\n source_language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema, SarvamScriptCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\n\ntype SarvamLidConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamLidModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: \"unknown\";\n\n private readonly config: SarvamLidConfig;\n\n constructor(\n config: SarvamLidConfig,\n ) {\n this.modelId = \"unknown\";\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/text-lid\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamLidResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n const text = response.language_code ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Language Identification feature doesn't streaming yet\");\n }\n}\n\nconst sarvamLidResponseSchema = z.object({\n script_code: SarvamScriptCodeSchema.nullish(),\n language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import {\n TranscriptionModelV1,\n TranscriptionModelV1CallWarning,\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postFormDataToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { SarvamConfig } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport { SarvamSpeechTranslationModelId } from \"./sarvam-transcription-settings\";\n\n// https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe\ninterface SarvamSpeechTranslationModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class SarvamSpeechTranslationModel implements TranscriptionModelV1 {\n readonly specificationVersion = \"v1\";\n\n constructor(\n readonly modelId: SarvamSpeechTranslationModelId,\n private readonly config: SarvamSpeechTranslationModelConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0]) {\n const warnings: TranscriptionModelV1CallWarning[] = [];\n\n const formData = new FormData();\n const blob =\n audio instanceof Blob ? audio : new Blob([audio], { type: mediaType });\n\n formData.append(\"file\", blob);\n formData.append(\"model\", this.modelId);\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV1[\"doGenerate\"]>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: this.config.url({\n path: \"/speech-to-text-translate\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text: response.transcript,\n segments: [],\n language: response.language_code ? response.language_code : undefined,\n durationInSeconds: undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst sarvamTranscriptionResponseSchema = z.object({\n request_id: z.string().nullable(),\n transcript: z.string(),\n language_code: z.string().nullable(),\n // timestamps: z\n // .object({\n // end_time_seconds: z.array(z.number()),\n // start_time_seconds: z.array(z.number()),\n // words: z.array(z.string()),\n // })\n // .optional(),\n diarized_transcript: z\n .object({\n entries: z.array(\n z.object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n transcript: z.string(),\n speaker_id: z.string(),\n }),\n ),\n })\n .nullable()\n .optional(),\n});\n"],"mappings":"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","names":["generateId","z","UnsupportedFunctionalityError","z","prompt","_a","generateId","toolCall","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","z","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","combineHeaders","createJsonResponseHandler","parseProviderOptions","z","z","SarvamProviderOptionsSchema","parseProviderOptions","SarvamProviderOptionsSchema","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postJsonToApi","z","z","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postJsonToApi","z","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postJsonToApi","z","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postFormDataToApi","z","postFormDataToApi","combineHeaders","createJsonResponseHandler","sarvamTranscriptionResponseSchema","z"]}
|
|
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-speech-model.ts","../src/sarvam-speech-settings.ts","../src/sarvam-transcription-model.ts","../src/sarvam-transcription-settings.ts","../src/sarvam-translation-model.ts","../src/sarvam-config.ts","../src/sarvam-transliterate-model.ts","../src/sarvam-lid-model.ts","../src/sarvam-speech-translation-model.ts"],"sourcesContent":["import {\n LanguageModelV1,\n SpeechModelV1,\n TranscriptionModelV1\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from \"@ai-sdk/provider-utils\";\nimport { SarvamChatLanguageModel } from \"./sarvam-chat-language-model\";\nimport { SarvamChatModelId, SarvamChatSettings } from \"./sarvam-chat-settings\";\nimport { SarvamLanguageCode } from \"./sarvam-config\";\nimport {\n SarvamSpeechModel,\n} from \"./sarvam-speech-model\";\nimport { SarvamSpeechModelId, SarvamSpeechSettings } from \"./sarvam-speech-settings\";\nimport {\n SarvamTranscriptionModel,\n} from \"./sarvam-transcription-model\";\nimport { SarvamSpeechTranslationModelId, SarvamTranscriptionCallOptions, SarvamTranscriptionModelId } from \"./sarvam-transcription-settings\";\nimport { SarvamTranslationModel } from \"./sarvam-translation-model\";\nimport { SarvamTranslationSettings } from \"./sarvam-translation-settings\";\nimport { SarvamTransliterateModel } from \"./sarvam-transliterate-model\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\nimport { SarvamLidModel } from \"./sarvam-lid-model\";\nimport { SarvamSpeechTranslationModel } from \"./sarvam-speech-translation-model\";\n\nexport interface SarvamProvider {\n /**\n * Creates a model for text generation.\n */\n (modelId: SarvamChatModelId, settings?: SarvamChatSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam chat model for text generation.\n */\n languageModel(\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ): LanguageModelV1;\n\n /**\n * Creates a Sarvam model for transcription.\n */\n transcription(\n modelId: SarvamTranscriptionModelId,\n /**\n * Audio source language code\n *\n * @default unknown\n */\n languageCode?: SarvamLanguageCode | \"unknown\",\n settings?: SarvamTranscriptionCallOptions,\n ): TranscriptionModelV1;\n\n /**\n * Creates a Sarvam model for Speech translation.\n */\n speechTranslation(\n modelId: SarvamSpeechTranslationModelId,\n ): TranscriptionModelV1;\n\n /**\n * Creates a Sarvam model for speech.\n */\n speech(\n modelId: SarvamSpeechModelId,\n languageCode: SarvamLanguageCode,\n settings?: SarvamSpeechSettings,\n ): SpeechModelV1;\n\n /**\n * Creates an Sarvam model for transliterate.\n */\n transliterate(settings: SarvamTransliterateSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam model for translation.\n */\n translation(settings: SarvamTranslationSettings): LanguageModelV1;\n\n /**\n * Creates an Sarvam model for language identification.\n */\n languageIdentification(): LanguageModelV1;\n}\n\nexport interface SarvamProviderSettings {\n /**\n * URL for the Sarvam API calls.\n * @default https://api.sarvam.ai\n */\n baseURL?: string;\n\n /**\n * API key for authenticating requests.\n * @default process.env.SARVAM_API_KEY\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n * @default\n Authorization: `Bearer ${process.env.SARVAM_API_KEY}`,\n \"api-subscription-key\": process.env.SARVAM_API_KEY\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\n/**\n* Create an Sarvam provider instance.\n*/\nexport function createSarvam(\n options: SarvamProviderSettings = {},\n): SarvamProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? \"https://api.sarvam.ai\";\n\n const getApiKey = () => loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"SARVAM_API_KEY\",\n description: \"Sarvam\",\n });\n\n const getHeaders = () => ({\n Authorization: `Bearer ${getApiKey()}`,\n \"api-subscription-key\": getApiKey(),\n ...options.headers,\n });\n\n const createChatModel = (\n modelId: SarvamChatModelId,\n settings: SarvamChatSettings = {},\n ) =>\n new SarvamChatLanguageModel(modelId, settings, {\n provider: \"sarvam.chat\",\n url: ({ path }) => `${baseURL}/v1${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createLanguageModel = (\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ) => {\n if (new.target) {\n throw new Error(\n \"The Sarvam model function cannot be called with the new keyword.\",\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n const createTranscriptionModel = (\n modelId: SarvamTranscriptionModelId,\n languageCode: SarvamLanguageCode | \"unknown\" = \"unknown\",\n settings?: SarvamTranscriptionCallOptions,\n ) => new SarvamTranscriptionModel(modelId, languageCode, {\n provider: \"sarvam.transcription\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n transcription: settings,\n });\n\n const createSpeechTranslation = (\n modelId: SarvamTranscriptionModelId\n ) => new SarvamSpeechTranslationModel(modelId, {\n provider: \"sarvam.transcription\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createSpeechModel = (\n modelId: SarvamSpeechModelId,\n languageCode: SarvamLanguageCode,\n settings?: SarvamSpeechSettings,\n ) =>\n new SarvamSpeechModel(modelId, languageCode, {\n provider: \"sarvam.speech\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n speech: settings,\n });\n\n const createTransliterateModel = (settings: SarvamTransliterateSettings) =>\n new SarvamTransliterateModel(\n settings,\n {\n provider: \"sarvam.transliterate\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const createTranslationModel = (settings: SarvamTranslationSettings) =>\n new SarvamTranslationModel(\n settings,\n {\n provider: \"sarvam.translation\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const createLidModel = () =>\n new SarvamLidModel(\n {\n provider: \"sarvam.lid\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n },\n );\n\n const provider = (\n modelId: SarvamChatModelId,\n settings?: SarvamChatSettings,\n ) => createLanguageModel(modelId, settings);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createChatModel;\n provider.transcription = createTranscriptionModel;\n provider.speechTranslation = createSpeechTranslation;\n provider.speech = createSpeechModel;\n provider.transliterate = createTransliterateModel;\n provider.translation = createTranslationModel;\n provider.languageIdentification = createLidModel;\n\n return provider;\n}\n\n/**\n* Default Sarvam provider instance.\n*/\nexport const sarvam = createSarvam();\n","import {\n InvalidResponseDataError,\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1FunctionToolCall,\n LanguageModelV1Prompt,\n LanguageModelV1ProviderMetadata,\n LanguageModelV1StreamPart,\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n ParseResult,\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { getResponseMetadata } from \"./get-response-metadata\";\nimport { mapSarvamFinishReason } from \"./map-sarvam-finish-reason\";\nimport { SarvamChatModelId, SarvamChatSettings } from \"./sarvam-chat-settings\";\nimport {\n sarvamErrorDataSchema,\n sarvamFailedResponseHandler,\n} from \"./sarvam-error\";\nimport {\n extractToolCallData,\n parseJSON,\n prepareTools,\n simulateJsonSchema,\n simulateToolCalling,\n} from \"./sarvam-prepare-tools\";\n\ntype SarvamChatConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: SarvamChatModelId;\n readonly settings: SarvamChatSettings;\n\n private readonly config: SarvamChatConfig;\n\n constructor(\n modelId: SarvamChatModelId,\n settings: SarvamChatSettings,\n config: SarvamChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return !this.settings.downloadImages;\n }\n\n private async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n stream,\n providerMetadata,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n const simulate = this.settings.simulate\n\n if (type === \"object-json\" && simulate === \"tool-calling\")\n throw new Error('Use { simulate: \"json-object\" } with generateObject()')\n\n if (type === \"regular\" && simulate === \"json-object\")\n throw new Error('Use { simulate: \"tool-calling\" } with generateText()')\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (stream) {\n warnings.push({\n type: \"other\",\n message: \"Streaming is still experimental for Sarvam\",\n });\n }\n\n if (topK != null) {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"topK\",\n });\n }\n\n if (\n responseFormat != null &&\n responseFormat.type === \"json\" &&\n responseFormat.schema != null\n ) {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"responseFormat\",\n details: \"JSON response format schema is not supported\",\n });\n }\n\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: providerMetadata,\n schema: z.object({\n reasoningFormat: z.enum([\"parsed\", \"raw\", \"hidden\"]).nullish(),\n }),\n });\n\n const baseArgs = (\n prompt: LanguageModelV1Prompt,\n extraSystemPrompt?: string,\n ) => ({\n // model id:\n model: this.modelId,\n\n // model specific settings:\n user: this.settings.user,\n parallel_tool_calls: this.settings.parallelToolCalls,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n\n // response format:\n response_format:\n // json object response format is not supported for streaming:\n stream === false && responseFormat?.type === \"json\"\n ? { type: \"json_object\" }\n : undefined,\n\n // provider options:\n reasoning_format: sarvamOptions?.reasoningFormat,\n\n // messages:\n messages: convertToSarvamChatMessages(prompt, extraSystemPrompt),\n });\n\n switch (type) {\n case \"regular\": {\n const { tools, tool_choice, toolWarnings } = prepareTools({\n mode,\n });\n\n const extraSystemPrompt =\n tools && simulate === \"tool-calling\"\n ? await simulateToolCalling(tools)\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, extraSystemPrompt),\n tools,\n tool_choice,\n },\n warnings: [...warnings, ...toolWarnings],\n };\n }\n\n case \"object-json\": {\n const extraSystemPrompt = simulate === \"json-object\"\n ? simulateJsonSchema()\n : undefined;\n\n return {\n args: {\n ...baseArgs(prompt, extraSystemPrompt),\n response_format:\n // json object response format is not supported for streaming:\n stream === false ? { type: \"json_object\" } : undefined,\n },\n warnings,\n };\n }\n\n case \"object-tool\": {\n return {\n args: {\n ...baseArgs(prompt),\n tool_choice: {\n type: \"function\",\n function: { name: mode.tool.name },\n },\n tools: [\n {\n type: \"function\",\n function: {\n name: mode.tool.name,\n description: mode.tool.description,\n parameters: mode.tool.parameters,\n },\n },\n ],\n },\n warnings,\n };\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings } = await this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n const choice = response.choices[0];\n\n let text = choice.message.content ?? undefined;\n\n let toolCalls = choice.message.tool_calls?.map((toolCall) => ({\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments!,\n })) as LanguageModelV1FunctionToolCall[] | undefined;\n\n // simulate tool calling through prompt engineering\n if (this.settings.simulate === \"tool-calling\") {\n if (text && text.length !== 0) {\n const jsonObject = parseJSON(text);\n if (jsonObject) {\n const newTools = extractToolCallData(jsonObject);\n if (newTools) {\n toolCalls = [newTools];\n text = undefined;\n }\n }\n }\n }\n\n // simulate JSON object generation through prompt engineering\n if (this.settings.simulate === \"json-object\") {\n if (text && text.length !== 0) {\n const jsonObject = parseJSON(text);\n if (jsonObject) {\n const newTools = extractToolCallData(jsonObject);\n text = JSON.stringify(jsonObject);\n }\n }\n }\n\n return {\n text,\n toolCalls,\n reasoning: choice.message.reasoning ?? undefined,\n finishReason: mapSarvamFinishReason(choice.finish_reason),\n usage: {\n promptTokens: response.usage?.prompt_tokens ?? NaN,\n completionTokens: response.usage?.completion_tokens ?? NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: getResponseMetadata(response),\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n const { args, warnings } = await this.getArgs({ ...options, stream: true });\n\n const body = JSON.stringify({ ...args, stream: true });\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...args,\n stream: true,\n },\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n sarvamChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const toolCalls: Array<{\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n hasFinished: boolean;\n }> = [];\n\n let finishReason: LanguageModelV1FinishReason = \"unknown\";\n let usage: {\n promptTokens: number | undefined;\n completionTokens: number | undefined;\n } = {\n promptTokens: undefined,\n completionTokens: undefined,\n };\n let isFirstChunk = true;\n\n let providerMetadata: LanguageModelV1ProviderMetadata | undefined;\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof sarvamChatChunkSchema>>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = \"error\";\n controller.enqueue({\n type: \"error\",\n error: chunk.error,\n });\n return;\n }\n\n const value = chunk.value;\n\n // handle error chunks:\n if (\"error\" in value) {\n finishReason = \"error\";\n controller.enqueue({\n type: \"error\",\n error: value.error,\n });\n return;\n }\n\n if (isFirstChunk) {\n isFirstChunk = false;\n\n controller.enqueue({\n type: \"response-metadata\",\n ...getResponseMetadata(value),\n });\n }\n\n if (value.x_sarvam?.usage != null) {\n usage = {\n promptTokens: value.x_sarvam.usage.prompt_tokens ?? undefined,\n completionTokens:\n value.x_sarvam.usage.completion_tokens ?? undefined,\n };\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = mapSarvamFinishReason(choice.finish_reason);\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.reasoning != null && delta.reasoning.length > 0) {\n controller.enqueue({\n type: \"reasoning\",\n textDelta: delta.reasoning,\n });\n }\n\n if (delta.content != null && delta.content.length > 0) {\n controller.enqueue({\n type: \"text-delta\",\n textDelta: delta.content,\n });\n }\n\n if (delta.tool_calls != null) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n if (toolCalls[index] == null) {\n if (toolCallDelta.type !== \"function\") {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: \"function\",\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? \"\",\n },\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null\n ) {\n // send delta if the argument text has already started:\n if (toolCall.function.arguments.length > 0) {\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCall.function.arguments,\n });\n }\n\n // check if tool call is complete\n // (some providers send the full tool call in one chunk):\n if (isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n\n continue;\n }\n\n // existing tool call, merge if not finished\n const toolCall = toolCalls[index];\n\n if (toolCall.hasFinished) {\n continue;\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function!.arguments +=\n toolCallDelta.function?.arguments ?? \"\";\n }\n\n // send delta\n controller.enqueue({\n type: \"tool-call-delta\",\n toolCallType: \"function\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCallDelta.function.arguments ?? \"\",\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallType: \"function\",\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: {\n promptTokens: usage.promptTokens ?? NaN,\n completionTokens: usage.completionTokens ?? NaN,\n },\n ...(providerMetadata != null ? { providerMetadata } : {}),\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings,\n request: { body },\n };\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst sarvamChatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n message: z.object({\n content: z.string().nullish(),\n reasoning: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().nullish(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .nullish(),\n }),\n index: z.number(),\n finish_reason: z.string().nullish(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst sarvamChatChunkSchema = z.union([\n z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n choices: z.array(\n z.object({\n delta: z\n .object({\n content: z.string().nullish(),\n reasoning: z.string().nullish(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z.literal(\"function\").optional(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n finish_reason: z.string().nullable().optional(),\n index: z.number(),\n }),\n ),\n x_sarvam: z\n .object({\n usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n })\n .nullish(),\n })\n .nullish(),\n }),\n sarvamErrorDataSchema,\n]);\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { convertUint8ArrayToBase64 } from \"@ai-sdk/provider-utils\";\nimport { SarvamChatPrompt } from \"./sarvam-api-types\";\n\nexport function convertToSarvamChatMessages(\n prompt: LanguageModelV1Prompt,\n fakeToolSystemPrompt?: string,\n): SarvamChatPrompt {\n const messages: SarvamChatPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case \"system\": {\n const contentData = fakeToolSystemPrompt\n ? `${content}\\n\\n${fakeToolSystemPrompt}`\n : content;\n messages.push({ role: \"system\", content: contentData });\n break;\n }\n\n case \"user\": {\n if (content.length === 1 && content[0].type === \"text\") {\n messages.push({ role: \"user\", content: content[0].text });\n break;\n }\n\n messages.push({\n role: \"user\",\n content: content.map((part) => {\n switch (part.type) {\n case \"text\": {\n return { type: \"text\", text: part.text };\n }\n case \"image\": {\n return {\n type: \"image_url\",\n image_url: {\n url:\n part.image instanceof URL\n ? part.image.toString()\n : `data:${\n part.mimeType ?? \"image/jpeg\"\n };base64,${convertUint8ArrayToBase64(part.image)}`,\n },\n };\n }\n case \"file\": {\n throw new UnsupportedFunctionalityError({\n functionality: \"File content parts in user messages\",\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case \"assistant\": {\n let text = \"\";\n const toolCalls: Array<{\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case \"text\": {\n text += part.text;\n break;\n }\n case \"tool-call\": {\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.args),\n },\n });\n break;\n }\n }\n }\n\n messages.push({\n role: \"assistant\",\n content: text,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case \"tool\": {\n for (const toolResponse of content) {\n messages.push({\n role: \"tool\",\n tool_call_id: toolResponse.toolCallId,\n content: JSON.stringify(toolResponse.result),\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","export function getResponseMetadata({\n id,\n model,\n created,\n}: {\n id?: string | undefined | null;\n created?: number | undefined | null;\n model?: string | undefined | null;\n}) {\n return {\n id: id ?? undefined,\n modelId: model ?? undefined,\n timestamp: created != null ? new Date(created * 1000) : undefined,\n };\n}\n","import { LanguageModelV1FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapSarvamFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n return \"length\";\n case \"content_filter\":\n return \"content-filter\";\n case \"function_call\":\n case \"tool_calls\":\n return \"tool-calls\";\n default:\n return \"unknown\";\n }\n}\n","import { z } from \"zod\";\nimport { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\n\nexport const sarvamErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n }),\n});\n\nexport type SarvamErrorData = z.infer<typeof sarvamErrorDataSchema>;\n\nexport const sarvamFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: sarvamErrorDataSchema,\n errorToMessage: (data) => data.error.message,\n});\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FunctionToolCall,\n UnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { generateId } from \"@ai-sdk/provider-utils\";\n\ntype SarvamTools = Array<{\n type: \"function\";\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n}>;\n\nexport function prepareTools({\n mode,\n}: {\n mode: Parameters<LanguageModelV1[\"doGenerate\"]>[0][\"mode\"] & {\n type: \"regular\";\n };\n}): {\n tools:\n | undefined\n | Array<{\n type: \"function\";\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n }>;\n tool_choice:\n | { type: \"function\"; function: { name: string } }\n | \"auto\"\n | \"none\"\n | \"required\"\n | undefined;\n toolWarnings: LanguageModelV1CallWarning[];\n fakeTools?: string;\n} {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n const toolWarnings: LanguageModelV1CallWarning[] = [];\n\n if (tools == null) {\n return { tools: undefined, tool_choice: undefined, toolWarnings };\n }\n\n const toolChoice = mode.toolChoice;\n\n const sarvamTools: SarvamTools = [];\n\n for (const tool of tools) {\n if (tool.type === \"provider-defined\") {\n toolWarnings.push({ type: \"unsupported-tool\", tool });\n } else {\n sarvamTools.push({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: sarvamTools, tool_choice: undefined, toolWarnings };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case \"auto\":\n case \"none\":\n case \"required\":\n return { tools: sarvamTools, tool_choice: type, toolWarnings };\n case \"tool\":\n return {\n tools: sarvamTools,\n tool_choice: {\n type: \"function\",\n function: {\n name: toolChoice.toolName,\n },\n },\n toolWarnings,\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `Unsupported tool choice type: ${_exhaustiveCheck}`,\n });\n }\n }\n}\n\nimport { compile } from \"json-schema-to-typescript\";\n\nexport const simulateToolCalling = async (\n tools: SarvamTools,\n): Promise<string> => {\n const context = [];\n const names = [];\n\n for (const tool of tools) {\n names.push(tool.function.name);\n\n const tsType = await compile(\n tool.function.parameters as object,\n tool.function.name,\n {\n bannerComment: \"\",\n format: false,\n declareExternallyReferenced: true,\n enableConstEnums: true,\n unreachableDefinitions: false,\n strictIndexSignatures: false,\n },\n );\n const toolContext = tsType\n .replace(\n /export interface (\\w+) \\{/,\n (_: any, name: string) => `type ${tool.function.name} = {`,\n )\n .replace(/\\/\\*\\*\\s*\\n\\s*\\*\\s*(.*?)\\s*\\n\\s*\\*\\//, \"// $1\");\n context.push(`// ${tool.function.description}\\n${toolContext}`);\n }\n\n const text = `These are the available tool you can execute.\n\n${context.join(\"\\n\")}\n\ntype YourToolChoices = {\n 'toolName': '${names.join(\"' | '\")}',\n 'toolData': ${names.join(\" | \")}\n}\n\nRespond normally.\nIf user request to execute any tool, respond with pure JSON format\nMake sure to translate toolData to English.\n\neg:\nconst myChoice: YourToolChoices = {\n \"toolName\": <name>,\n \"toolData\": <data>\n}`;\n\n return text;\n};\n\nexport const extractToolCallData = (\n jsonObject: object,\n): LanguageModelV1FunctionToolCall | void => {\n\n type ToolFunction = {\n toolName: string;\n toolData: any;\n };\n const toolFunction = jsonObject as ToolFunction\n\n if (!(\"toolName\" in toolFunction)) return;\n if (!(\"toolData\" in toolFunction)) return;\n\n return {\n args: JSON.stringify(toolFunction.toolData),\n toolCallId: generateId(),\n toolCallType: \"function\",\n toolName: toolFunction.toolName,\n };\n\n};\n\nexport const parseJSON = <T extends object>(\n text: string,\n):T | void => {\n const jsonRegex = /\\{(?:[^{}]*|\\{[^{}]*\\})*\\}/g;\n const jsonMatches = text.match(jsonRegex);\n\n if (jsonMatches && jsonMatches[0]) {\n try {\n const jsonObject = JSON.parse(jsonMatches[0])\n return jsonObject\n }\n catch (error) {}\n }\n}\n\nexport const simulateJsonSchema = () => \"If user doen't specify, make sure to translate json data content into pure English.\"\n","import type { SpeechModelV1, SpeechModelV1CallWarning } from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type { SarvamConfig, SarvamLanguageCode } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport {\n SarvamProviderOptionsSchema,\n SarvamSpeechSettings,\n SpeakerSchema,\n type SarvamSpeechModelId,\n} from \"./sarvam-speech-settings\";\nimport type { SarvamSpeechAPITypes } from \"./sarvam-api-types\";\nimport { z } from \"zod\";\n\ninterface SarvamSpeechModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n speech?: SarvamSpeechSettings;\n}\n\nexport class SarvamSpeechModel implements SpeechModelV1 {\n readonly specificationVersion = \"v1\";\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: SarvamSpeechModelId,\n readonly languageCode: SarvamLanguageCode,\n private readonly config: SarvamSpeechModelConfig,\n ) {}\n\n private getArgs({\n text,\n voice,\n outputFormat = \"wav\",\n // speed,\n // instructions,\n providerOptions,\n }: Parameters<SpeechModelV1[\"doGenerate\"]>[0]) {\n const warnings: SpeechModelV1CallWarning[] = [];\n\n // Parse provider options\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: {\n sarvam: {\n ...providerOptions?.sarvam,\n ...this.config.speech,\n },\n },\n schema: SarvamProviderOptionsSchema,\n });\n\n const getSpeaker = (): SarvamSpeechCallOptions[\"speaker\"] => {\n if (sarvamOptions?.speaker) return sarvamOptions.speaker;\n if (voice) {\n return SpeakerSchema.parse(voice);\n }\n\n switch (this.modelId) {\n case \"bulbul:v1\":\n return \"meera\";\n case \"bulbul:v2\":\n return \"manisha\";\n }\n\n return \"meera\";\n };\n\n // Create request body\n const requestBody: Record<string, unknown> = {\n model: this.modelId,\n text: text,\n target_language_code: this.languageCode,\n speaker: getSpeaker(),\n // response_format: \"wav\",\n // speed,\n // instructions,\n };\n\n if (outputFormat) {\n if (\n [\"mp3\", \"opus\", \"aac\", \"flac\", \"wav\", \"pcm\"].includes(\n outputFormat,\n )\n ) {\n requestBody.response_format = outputFormat;\n } else {\n warnings.push({\n type: \"unsupported-setting\",\n setting: \"outputFormat\",\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`,\n });\n }\n }\n\n // Add provider-specific options\n if (sarvamOptions) {\n const speechModelOptions: SarvamSpeechAPITypes = {};\n\n for (const key in speechModelOptions) {\n const value =\n speechModelOptions[key as keyof SarvamSpeechAPITypes];\n if (value !== undefined) {\n requestBody[key] = value;\n }\n }\n }\n\n return {\n requestBody,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV1[\"doGenerate\"]>>> {\n const currentDate =\n this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = this.getArgs(options);\n\n const {\n value,\n responseHeaders,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/text-to-speech\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n z.object({\n request_id: z.string(),\n audios: z.array(z.string()),\n }),\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const audio = value.audios[0];\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n","import { z } from \"zod\";\n\nexport type SarvamSpeechModelId = \"bulbul:v1\" | \"bulbul:v2\" | (string & {});\n\nexport type SarvamSpeechVoices = z.infer<typeof SpeakerSchema>;\n\nexport const SpeakerSchema = z\n .enum([\n \"meera\",\n \"pavithra\",\n \"maitreyi\",\n \"arvind\",\n \"amol\",\n \"amartya\",\n \"diya\",\n \"neel\",\n \"misha\",\n \"vian\",\n \"arjun\",\n \"maya\",\n \"anushka\",\n \"abhilash\",\n \"manisha\",\n \"vidya\",\n \"arya\",\n \"karun\",\n \"hitesh\",\n ])\n .default(\"meera\");\n\n// https://docs.sarvam.ai/api-reference-docs/text-to-speech/convert\nexport const SarvamProviderOptionsSchema = z\n .object({\n speaker: SpeakerSchema,\n pitch: z.number().min(-0.75).max(0.75).default(0.0),\n pace: z.number().min(0.5).max(2.0).default(1.0),\n loudness: z.number().min(0.3).max(3.0).default(1.0),\n speech_sample_rate: z\n .union([\n z.literal(8000),\n z.literal(16000),\n z.literal(22050),\n z.literal(24000),\n ])\n .default(22050),\n enable_preprocessing: z.boolean().default(false),\n })\n .partial();\n\n/**\n * Configuration settings for Sarvam Text-to-Speech API.\n *\n * This type defines the customizable options for generating speech audio\n * using the Sarvam Text-to-Speech API. Each property corresponds to a specific\n * feature or parameter supported by the API.\n */\nexport type SarvamSpeechSettings = {\n /**\n * The speaker voice to be used for the output audio.\n *\n * @default \"meera\"\n * @example \"meera\" (Default female voice for bulbul:v1)\n * @example \"arvind\" (Male voice for bulbul:v1)\n * @example \"anushka\" (Female voice for bulbul:v2)\n */\n speaker?: SarvamSpeechVoices;\n\n /**\n * Controls the pitch of the audio.\n *\n * @default 0.0\n * @example -0.5 (Deeper voice)\n * @example 0.5 (Sharper voice)\n */\n pitch?: number;\n\n /**\n * Controls the speed of the audio.\n *\n * @default 1.0\n * @example 0.5 (Slower speech)\n * @example 2.0 (Faster speech)\n */\n pace?: number;\n\n /**\n * Controls the loudness of the audio.\n *\n * @default 1.0\n * @example 0.3 (Quieter audio)\n * @example 2.5 (Louder audio)\n */\n loudness?: number;\n\n /**\n * Specifies the sample rate of the output audio.\n *\n * @default 22050\n * @example 8000 (Low-quality audio)\n * @example 24000 (High-quality audio)\n */\n speech_sample_rate?: 8000 | 16000 | 22050 | 24000;\n\n /**\n * Enables preprocessing for normalization of English words and numeric entities\n * (e.g., numbers, dates) in the input text.\n *\n * @default false\n * @example true (Enable preprocessing)\n * @example false (Disable preprocessing)\n */\n enable_preprocessing?: boolean;\n};\n","import {\n TranscriptionModelV1,\n TranscriptionModelV1CallWarning,\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postFormDataToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { SarvamConfig, SarvamLanguageCode } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport {\n SarvamProviderOptionsSchema,\n SarvamTranscriptionCallOptions,\n SarvamTranscriptionModelId,\n} from \"./sarvam-transcription-settings\";\n\n// https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe\ninterface SarvamTranscriptionModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n transcription?: SarvamTranscriptionCallOptions;\n}\n\nexport class SarvamTranscriptionModel implements TranscriptionModelV1 {\n readonly specificationVersion = \"v1\";\n\n constructor(\n readonly modelId: SarvamTranscriptionModelId,\n readonly languageCode: SarvamLanguageCode | \"unknown\",\n private readonly config: SarvamTranscriptionModelConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0]) {\n const warnings: TranscriptionModelV1CallWarning[] = [];\n\n if (this.modelId === \"saarika:v1\" && this.languageCode === \"unknown\")\n throw new Error(\n \"Language code unknown is not supported for model saarika:v1\",\n );\n\n const sarvamOptions = parseProviderOptions({\n provider: \"sarvam\",\n providerOptions: {\n sarvam: {\n ...providerOptions?.sarvam,\n ...this.config.transcription,\n },\n },\n schema: SarvamProviderOptionsSchema,\n });\n\n const formData = new FormData();\n const blob =\n audio instanceof Blob\n ? audio\n : new Blob([audio], { type: mediaType });\n\n formData.append(\"file\", blob);\n formData.append(\"model\", this.modelId);\n if (sarvamOptions) {\n formData.append(\"language_code\", this.languageCode);\n formData.append(\n \"with_timestamps\",\n sarvamOptions.with_timestamps ? \"true\" : \"false\",\n );\n formData.append(\n \"with_diarization\",\n sarvamOptions.with_diarization ? \"true\" : \"false\",\n );\n if (\n sarvamOptions.num_speakers !== null &&\n sarvamOptions.num_speakers !== undefined\n ) {\n formData.append(\n \"num_speakers\",\n sarvamOptions.num_speakers.toString(),\n );\n }\n }\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV1[\"doGenerate\"]>>> {\n const currentDate =\n this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: this.config.url({\n path: \"/speech-to-text\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text: response.transcript,\n segments: response.timestamps\n ? response.timestamps.words.map((word, index) => ({\n text: word,\n startSecond:\n response.timestamps!.start_time_seconds[index],\n endSecond: response.timestamps!.end_time_seconds[index],\n }))\n : [],\n language: response.language_code\n ? response.language_code\n : undefined,\n durationInSeconds:\n response.timestamps?.end_time_seconds[\n response.timestamps.end_time_seconds.length - 1\n ] ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst sarvamTranscriptionResponseSchema = z.object({\n request_id: z.string().nullable(),\n transcript: z.string(),\n language_code: z.string().nullable(),\n timestamps: z\n .object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n words: z.array(z.string()),\n })\n .optional(),\n diarized_transcript: z\n .object({\n entries: z.array(\n z.object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n transcript: z.string(),\n speaker_id: z.string(),\n }),\n ),\n })\n .optional(),\n});\n","import { z } from \"zod\";\n\nexport type SarvamTranscriptionModelId =\n | \"saarika:v2\"\n | \"saarika:v1\"\n | \"saarika:flash\"\n | (string & {});\n\nexport type SarvamSpeechTranslationModelId =\n | \"saaras:v1\"\n | \"saaras:v2\"\n | \"saaras:turbo\"\n | \"saaras:flash\"\n | (string & {});\n\nexport const SarvamProviderOptionsSchema = z.object({\n with_timestamps: z.boolean().nullish().default(false),\n with_diarization: z.boolean().nullish().default(false),\n num_speakers: z.number().int().nullish(),\n});\n\nexport type SarvamTranscriptionCallOptions = {\n with_timestamps?: boolean,\n /**\n * Enables speaker diarization, which identifies and separates different speakers in the audio.\n * When set to true, the API will provide speaker-specific segments in the response.\n * Note: This parameter is currently in Beta mode.\n */\n with_diarization?: boolean,\n /**\n * Number of speakers to be detected in the audio.\n * This is used when with_diarization is set to true.\n * Can be null.\n */\n num_speakers?: number,\n}\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\nimport { SarvamTranslationSettings } from \"./sarvam-translation-settings\";\n\ntype SarvamTranslationConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamTranslationModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: NonNullable<SarvamTranslationSettings[\"model\"]>\n readonly settings: SarvamTranslationSettings;\n\n private readonly config: SarvamTranslationConfig;\n\n constructor(\n settings: SarvamTranslationSettings,\n config: SarvamTranslationConfig,\n ) {\n this.modelId = settings.model ?? \"mayura:v1\";\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (this.settings.from === this.settings.to) {\n throw new Error(\n \"Source and target languages code must be different.\",\n );\n }\n\n if (this.modelId === \"sarvam-translate:v1\") {\n if ((this.settings.mode ?? \"formal\") !== \"formal\")\n throw new Error(\n \"Sarvam 'sarvam-translate:v1' only support mode formal.\",\n );\n if ((this.settings.from ?? \"auto\") === \"auto\")\n throw new Error(\n \"Sarvam 'sarvam-translate:v1' requires source language code.\",\n );\n }\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n source_language_code: this.settings.from ?? \"auto\",\n target_language_code: this.settings.to,\n numerals_format: this.settings.numerals_format ?? \"international\",\n enable_preprocessing: this.settings.enable_preprocessing ?? false,\n output_script: this.settings.output_script ?? null,\n speaker_gender: this.settings.speaker_gender ?? \"Male\",\n mode: this.settings.mode ?? \"formal\",\n model: this.modelId,\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/translate\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranslationResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n const text = response.translated_text ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Translation feature doesn't support streaming yet\");\n }\n}\n\nconst sarvamTranslationResponseSchema = z.object({\n translated_text: z.string().nullish(),\n source_language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import { FetchFunction } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\n\nexport type SarvamConfig = {\n provider: string;\n url: (options: { modelId: string; path: string }) => string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n generateId?: () => string;\n};\n\nexport type SarvamLanguageCode = z.infer<typeof SarvamLanguageCodeSchema>;\n\nexport const SarvamLanguageCodeSchema = z.enum([\n \"hi-IN\",\n \"bn-IN\",\n \"kn-IN\",\n \"ml-IN\",\n \"mr-IN\",\n \"od-IN\",\n \"pa-IN\",\n \"ta-IN\",\n \"te-IN\",\n \"en-IN\",\n \"gu-IN\",\n]);\n\nexport type SarvamScriptCode = z.infer<typeof SarvamScriptCodeSchema>\n\nexport const SarvamScriptCodeSchema = z.enum([\n \"Latn\",\n \"Deva\",\n \"Beng\",\n \"Gujr\",\n \"Knda\",\n \"Mlym\",\n \"Orya\",\n \"Guru\",\n \"Taml\",\n \"Telu\",\n])\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\nimport { SarvamTransliterateSettings } from \"./sarvam-transliterate-settings\";\n\ntype SarvamTransliterateConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamTransliterateModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: \"unknown\";\n readonly settings: SarvamTransliterateSettings;\n\n private readonly config: SarvamTransliterateConfig;\n\n constructor(\n settings: SarvamTransliterateSettings,\n config: SarvamTransliterateConfig,\n ) {\n this.modelId = \"unknown\";\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (this.settings.from !== \"auto\") {\n if (this.settings.to !== \"en-IN\" && this.settings.from !== \"en-IN\")\n throw new Error(\n \"Sarvam doesn't support Indic-Indic Transliteration yet\",\n );\n }\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n source_language_code: this.settings.from ?? \"auto\",\n target_language_code: this.settings.to,\n numerals_format: this.settings.numerals_format ?? \"international\",\n ...(this.settings.spoken_form\n ? {\n spoken_form: this.settings.spoken_form,\n spoken_form_numerals_language:\n this.settings.spoken_form_numerals_language ?? \"english\",\n }\n : {}),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/transliterate\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTransliterateResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n let text = response.transliterated_text ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Transliterate feature doesn't streaming yet\");\n }\n}\n\nconst sarvamTransliterateResponseSchema = z.object({\n transliterated_text: z.string().nullish(),\n source_language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning\n} from \"@ai-sdk/provider\";\nimport {\n FetchFunction,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { convertToSarvamChatMessages } from \"./convert-to-sarvam-chat-messages\";\nimport { SarvamLanguageCodeSchema, SarvamScriptCodeSchema } from \"./sarvam-config\";\nimport {\n sarvamFailedResponseHandler\n} from \"./sarvam-error\";\n\ntype SarvamLidConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { path: string }) => string;\n fetch?: FetchFunction;\n};\n\nexport class SarvamLidModel implements LanguageModelV1 {\n readonly specificationVersion = \"v1\";\n\n readonly supportsStructuredOutputs = false;\n readonly defaultObjectGenerationMode = \"json\";\n\n readonly modelId: \"unknown\";\n\n private readonly config: SarvamLidConfig;\n\n constructor(\n config: SarvamLidConfig,\n ) {\n this.modelId = \"unknown\";\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportsImageUrls(): boolean {\n // image urls can be sent if downloadImages is disabled (default):\n return false;\n }\n\n private getArgs({\n mode,\n prompt,\n }: Parameters<LanguageModelV1[\"doGenerate\"]>[0] & {\n stream: boolean;\n }) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (type !== \"regular\") {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n\n const messages = convertToSarvamChatMessages(prompt);\n\n return {\n messages,\n args: {\n input: messages\n .filter((m) => m.role === \"user\")\n .map((m) => m.content)\n .join(\"\\n\"),\n },\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doGenerate\"]>>> {\n const { args, warnings, messages } = this.getArgs({\n ...options,\n stream: false,\n });\n\n const body = JSON.stringify(args);\n\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/text-lid\",\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamLidResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { input: rawPrompt, ...rawSettings } = args;\n\n const text = response.language_code ?? undefined;\n\n return {\n text,\n toolCalls: undefined,\n reasoning: undefined,\n finishReason: \"unknown\",\n usage: {\n promptTokens: NaN,\n completionTokens: NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders, body: rawResponse },\n response: undefined,\n warnings,\n request: { body },\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1[\"doStream\"]>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1[\"doStream\"]>>> {\n throw new Error(\"Language Identification feature doesn't streaming yet\");\n }\n}\n\nconst sarvamLidResponseSchema = z.object({\n script_code: SarvamScriptCodeSchema.nullish(),\n language_code: SarvamLanguageCodeSchema.nullable(),\n request_id: z.string().nullish(),\n});\n","import {\n TranscriptionModelV1,\n TranscriptionModelV1CallWarning,\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postFormDataToApi,\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\nimport { SarvamConfig } from \"./sarvam-config\";\nimport { sarvamFailedResponseHandler } from \"./sarvam-error\";\nimport { SarvamSpeechTranslationModelId } from \"./sarvam-transcription-settings\";\n\n// https://docs.sarvam.ai/api-reference-docs/speech-to-text/transcribe\ninterface SarvamSpeechTranslationModelConfig extends SarvamConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class SarvamSpeechTranslationModel implements TranscriptionModelV1 {\n readonly specificationVersion = \"v1\";\n\n constructor(\n readonly modelId: SarvamSpeechTranslationModelId,\n private readonly config: SarvamSpeechTranslationModelConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n audio,\n mediaType,\n providerOptions,\n }: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0]) {\n const warnings: TranscriptionModelV1CallWarning[] = [];\n\n const formData = new FormData();\n const blob =\n audio instanceof Blob ? audio : new Blob([audio], { type: mediaType });\n\n formData.append(\"file\", blob);\n formData.append(\"model\", this.modelId);\n\n return {\n formData,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV1[\"doGenerate\"]>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV1[\"doGenerate\"]>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { formData, warnings } = this.getArgs(options);\n\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse,\n } = await postFormDataToApi({\n url: this.config.url({\n path: \"/speech-to-text-translate\",\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: sarvamFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n sarvamTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n text: response.transcript,\n segments: [],\n language: response.language_code ? response.language_code : undefined,\n durationInSeconds: undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst sarvamTranscriptionResponseSchema = z.object({\n request_id: z.string().nullable(),\n transcript: z.string(),\n language_code: z.string().nullable(),\n // timestamps: z\n // .object({\n // end_time_seconds: z.array(z.number()),\n // start_time_seconds: z.array(z.number()),\n // words: z.array(z.string()),\n // })\n // .optional(),\n diarized_transcript: z\n .object({\n entries: z.array(\n z.object({\n end_time_seconds: z.array(z.number()),\n start_time_seconds: z.array(z.number()),\n transcript: z.string(),\n speaker_id: z.string(),\n }),\n ),\n })\n .nullable()\n .optional(),\n});\n"],"mappings":";AAKA;AAAA,EAEI;AAAA,EACA;AAAA,OACG;;;ACTP;AAAA,EACE;AAAA,OAQK;AACP;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,KAAAC,UAAS;;;ACrBlB;AAAA,EAEE;AAAA,OACK;AACP,SAAS,iCAAiC;AAGnC,SAAS,4BACd,QACA,sBACkB;AAClB,QAAM,WAA6B,CAAC;AAEpC,aAAW,EAAE,MAAM,QAAQ,KAAK,QAAQ;AACtC,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,cAAM,cAAc,uBAChB,GAAG,OAAO;AAAA;AAAA,EAAO,oBAAoB,KACrC;AACJ,iBAAS,KAAK,EAAE,MAAM,UAAU,SAAS,YAAY,CAAC;AACtD;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,YAAI,QAAQ,WAAW,KAAK,QAAQ,CAAC,EAAE,SAAS,QAAQ;AACtD,mBAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,QAAQ,CAAC,EAAE,KAAK,CAAC;AACxD;AAAA,QACF;AAEA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,QAAQ,IAAI,CAAC,SAAS;AA/BzC;AAgCY,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK,QAAQ;AACX,uBAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,cACzC;AAAA,cACA,KAAK,SAAS;AACZ,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,WAAW;AAAA,oBACT,KACE,KAAK,iBAAiB,MAClB,KAAK,MAAM,SAAS,IACpB,SACE,UAAK,aAAL,YAAiB,YACnB,WAAW,0BAA0B,KAAK,KAAK,CAAC;AAAA,kBACxD;AAAA,gBACF;AAAA,cACF;AAAA,cACA,KAAK,QAAQ;AACX,sBAAM,IAAI,8BAA8B;AAAA,kBACtC,eAAe;AAAA,gBACjB,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAED;AAAA,MACF;AAAA,MAEA,KAAK,aAAa;AAChB,YAAI,OAAO;AACX,cAAM,YAID,CAAC;AAEN,mBAAW,QAAQ,SAAS;AAC1B,kBAAQ,KAAK,MAAM;AAAA,YACjB,KAAK,QAAQ;AACX,sBAAQ,KAAK;AACb;AAAA,YACF;AAAA,YACA,KAAK,aAAa;AAChB,wBAAU,KAAK;AAAA,gBACb,IAAI,KAAK;AAAA,gBACT,MAAM;AAAA,gBACN,UAAU;AAAA,kBACR,MAAM,KAAK;AAAA,kBACX,WAAW,KAAK,UAAU,KAAK,IAAI;AAAA,gBACrC;AAAA,cACF,CAAC;AACD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,YAAY,UAAU,SAAS,IAAI,YAAY;AAAA,QACjD,CAAC;AAED;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,mBAAW,gBAAgB,SAAS;AAClC,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,cAAc,aAAa;AAAA,YAC3B,SAAS,KAAK,UAAU,aAAa,MAAM;AAAA,UAC7C,CAAC;AAAA,QACH;AACA;AAAA,MACF;AAAA,MAEA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACrHO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO;AAAA,IACL,IAAI,kBAAM;AAAA,IACV,SAAS,wBAAS;AAAA,IAClB,WAAW,WAAW,OAAO,IAAI,KAAK,UAAU,GAAI,IAAI;AAAA,EAC1D;AACF;;;ACZO,SAAS,sBACZ,cAC2B;AAC3B,UAAQ,cAAc;AAAA,IAClB,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AACD,aAAO;AAAA,IACX;AACI,aAAO;AAAA,EACf;AACJ;;;AClBA,SAAS,SAAS;AAClB,SAAS,sCAAsC;AAExC,IAAM,wBAAwB,EAAE,OAAO;AAAA,EAC1C,OAAO,EAAE,OAAO;AAAA,IACZ,SAAS,EAAE,OAAO;AAAA,IAClB,MAAM,EAAE,OAAO;AAAA,EACnB,CAAC;AACL,CAAC;AAIM,IAAM,8BAA8B,+BAA+B;AAAA,EACtE,aAAa;AAAA,EACb,gBAAgB,CAAC,SAAS,KAAK,MAAM;AACzC,CAAC;;;ACfD;AAAA,EAIE,iCAAAC;AAAA,OACK;AACP,SAAS,kBAAkB;AA+F3B,SAAS,eAAe;AApFjB,SAAS,aAAa;AAAA,EAC3B;AACF,GAuBE;AA1CF;AA4CE,QAAM,UAAQ,UAAK,UAAL,mBAAY,UAAS,KAAK,QAAQ;AAChD,QAAM,eAA6C,CAAC;AAEpD,MAAI,SAAS,MAAM;AACjB,WAAO,EAAE,OAAO,QAAW,aAAa,QAAW,aAAa;AAAA,EAClE;AAEA,QAAM,aAAa,KAAK;AAExB,QAAM,cAA2B,CAAC;AAElC,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,SAAS,oBAAoB;AACpC,mBAAa,KAAK,EAAE,MAAM,oBAAoB,KAAK,CAAC;AAAA,IACtD,OAAO;AACL,kBAAY,KAAK;AAAA,QACf,MAAM;AAAA,QACN,UAAU;AAAA,UACR,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,cAAc,MAAM;AACtB,WAAO,EAAE,OAAO,aAAa,aAAa,QAAW,aAAa;AAAA,EACpE;AAEA,QAAM,OAAO,WAAW;AAExB,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,EAAE,OAAO,aAAa,aAAa,MAAM,aAAa;AAAA,IAC/D,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,UACX,MAAM;AAAA,UACN,UAAU;AAAA,YACR,MAAM,WAAW;AAAA,UACnB;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAIA,+BAA8B;AAAA,QACtC,eAAe,iCAAiC,gBAAgB;AAAA,MAClE,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAIO,IAAM,sBAAsB,OACjC,UACoB;AACpB,QAAM,UAAU,CAAC;AACjB,QAAM,QAAQ,CAAC;AAEf,aAAW,QAAQ,OAAO;AACxB,UAAM,KAAK,KAAK,SAAS,IAAI;AAE7B,UAAM,SAAS,MAAM;AAAA,MACnB,KAAK,SAAS;AAAA,MACd,KAAK,SAAS;AAAA,MACd;AAAA,QACE,eAAe;AAAA,QACf,QAAQ;AAAA,QACR,6BAA6B;AAAA,QAC7B,kBAAkB;AAAA,QAClB,wBAAwB;AAAA,QACxB,uBAAuB;AAAA,MACzB;AAAA,IACF;AACA,UAAM,cAAc,OACjB;AAAA,MACC;AAAA,MACA,CAAC,GAAQ,SAAiB,QAAQ,KAAK,SAAS,IAAI;AAAA,IACtD,EACC,QAAQ,wCAAwC,OAAO;AAC1D,YAAQ,KAAK,MAAM,KAAK,SAAS,WAAW;AAAA,EAAK,WAAW,EAAE;AAAA,EAChE;AAEA,QAAM,OAAO;AAAA;AAAA,EAEb,QAAQ,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,gBAGJ,MAAM,KAAK,OAAO,CAAC;AAAA,eACpB,MAAM,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAa9B,SAAO;AACT;AAEO,IAAM,sBAAsB,CACjC,eAC2C;AAMzC,QAAM,eAAe;AAErB,MAAI,EAAE,cAAc,cAAe;AACnC,MAAI,EAAE,cAAc,cAAe;AAEnC,SAAO;AAAA,IACH,MAAM,KAAK,UAAU,aAAa,QAAQ;AAAA,IAC1C,YAAY,WAAW;AAAA,IACvB,cAAc;AAAA,IACd,UAAU,aAAa;AAAA,EAC3B;AAEJ;AAEO,IAAM,YAAY,CACrB,SACU;AACV,QAAM,YAAY;AAClB,QAAM,cAAc,KAAK,MAAM,SAAS;AAExC,MAAI,eAAe,YAAY,CAAC,GAAG;AAC/B,QAAI;AACA,YAAM,aAAa,KAAK,MAAM,YAAY,CAAC,CAAC;AAC5C,aAAO;AAAA,IACX,SACO,OAAO;AAAA,IAAC;AAAA,EACnB;AACJ;AAEO,IAAM,qBAAqB,MAAM;;;ALnJjC,IAAM,0BAAN,MAAyD;AAAA,EAW9D,YACE,SACA,UACA,QACA;AAdF,SAAS,uBAAuB;AAEhC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AAYrC,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,oBAA6B;AAE/B,WAAO,CAAC,KAAK,SAAS;AAAA,EACxB;AAAA,EAEA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEG;AACD,UAAM,OAAO,KAAK;AAClB,UAAM,WAAW,KAAK,SAAS;AAE/B,QAAI,SAAS,iBAAiB,aAAa;AACvC,YAAM,IAAI,MAAM,uDAAuD;AAE3E,QAAI,SAAS,aAAa,aAAa;AACnC,YAAM,IAAI,MAAM,sDAAsD;AAE1E,UAAM,WAAyC,CAAC;AAEhD,QAAI,QAAQ;AACV,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,MAAM;AAChB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QACE,kBAAkB,QAClB,eAAe,SAAS,UACxB,eAAe,UAAU,MACzB;AACA,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,UAAM,gBAAgB,qBAAqB;AAAA,MACzC,UAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,QAAQC,GAAE,OAAO;AAAA,QACf,iBAAiBA,GAAE,KAAK,CAAC,UAAU,OAAO,QAAQ,CAAC,EAAE,QAAQ;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAED,UAAM,WAAW,CACfC,SACA,uBACI;AAAA;AAAA,MAEJ,OAAO,KAAK;AAAA;AAAA,MAGZ,MAAM,KAAK,SAAS;AAAA,MACpB,qBAAqB,KAAK,SAAS;AAAA;AAAA,MAGnC,YAAY;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,MAAM;AAAA,MACN;AAAA;AAAA,MAGA;AAAA;AAAA,QAEE,WAAW,UAAS,iDAAgB,UAAS,SACzC,EAAE,MAAM,cAAc,IACtB;AAAA;AAAA;AAAA,MAGN,kBAAkB,+CAAe;AAAA;AAAA,MAGjC,UAAU,4BAA4BA,SAAQ,iBAAiB;AAAA,IACjE;AAEA,YAAQ,MAAM;AAAA,MACZ,KAAK,WAAW;AACd,cAAM,EAAE,OAAO,aAAa,aAAa,IAAI,aAAa;AAAA,UACxD;AAAA,QACF,CAAC;AAED,cAAM,oBACJ,SAAS,aAAa,iBAClB,MAAM,oBAAoB,KAAK,IAC/B;AAEN,eAAO;AAAA,UACL,MAAM;AAAA,YACJ,GAAG,SAAS,QAAQ,iBAAiB;AAAA,YACrC;AAAA,YACA;AAAA,UACF;AAAA,UACA,UAAU,CAAC,GAAG,UAAU,GAAG,YAAY;AAAA,QACzC;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAClB,cAAM,oBAAoB,aAAa,gBACnC,mBAAmB,IACnB;AAEJ,eAAO;AAAA,UACL,MAAM;AAAA,YACJ,GAAG,SAAS,QAAQ,iBAAiB;AAAA,YACrC;AAAA;AAAA,cAEE,WAAW,QAAQ,EAAE,MAAM,cAAc,IAAI;AAAA;AAAA,UACjD;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAClB,eAAO;AAAA,UACL,MAAM;AAAA,YACJ,GAAG,SAAS,MAAM;AAAA,YAClB,aAAa;AAAA,cACX,MAAM;AAAA,cACN,UAAU,EAAE,MAAM,KAAK,KAAK,KAAK;AAAA,YACnC;AAAA,YACA,OAAO;AAAA,cACL;AAAA,gBACE,MAAM;AAAA,gBACN,UAAU;AAAA,kBACR,MAAM,KAAK,KAAK;AAAA,kBAChB,aAAa,KAAK,KAAK;AAAA,kBACvB,YAAY,KAAK,KAAK;AAAA,gBACxB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AAhPjE;AAiPI,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ;AAAA,MAC5C,GAAG;AAAA,MACH,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,OAAO,KAAK,UAAU,IAAI;AAEhC,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,IAAI,MAAM,cAAc;AAAA,MACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,SAAS,eAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,UAAU,WAAW,GAAG,YAAY,IAAI;AAChD,UAAM,SAAS,SAAS,QAAQ,CAAC;AAEjC,QAAI,QAAO,YAAO,QAAQ,YAAf,YAA0B;AAErC,QAAI,aAAY,YAAO,QAAQ,eAAf,mBAA2B,IAAI,CAAC,aAAU;AAhR9D,UAAAC;AAgRkE;AAAA,QAC5D,cAAc;AAAA,QACd,aAAYA,MAAA,SAAS,OAAT,OAAAA,MAAeC,YAAW;AAAA,QACtC,UAAU,SAAS,SAAS;AAAA,QAC5B,MAAM,SAAS,SAAS;AAAA,MAC1B;AAAA;AAGA,QAAI,KAAK,SAAS,aAAa,gBAAgB;AAC3C,UAAI,QAAQ,KAAK,WAAW,GAAG;AAC7B,cAAM,aAAa,UAAU,IAAI;AACjC,YAAI,YAAY;AACd,gBAAM,WAAW,oBAAoB,UAAU;AAC/C,cAAI,UAAU;AACZ,wBAAY,CAAC,QAAQ;AACrB,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACJ;AAGA,QAAI,KAAK,SAAS,aAAa,eAAe;AAC5C,UAAI,QAAQ,KAAK,WAAW,GAAG;AAC7B,cAAM,aAAa,UAAU,IAAI;AACjC,YAAI,YAAY;AACd,gBAAM,WAAW,oBAAoB,UAAU;AAC7C,iBAAO,KAAK,UAAU,UAAU;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAW,YAAO,QAAQ,cAAf,YAA4B;AAAA,MACvC,cAAc,sBAAsB,OAAO,aAAa;AAAA,MACxD,OAAO;AAAA,QACL,eAAc,oBAAS,UAAT,mBAAgB,kBAAhB,YAAiC;AAAA,QAC/C,mBAAkB,oBAAS,UAAT,mBAAgB,sBAAhB,YAAqC;AAAA,MACzD;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,aAAa,EAAE,SAAS,iBAAiB,MAAM,YAAY;AAAA,MAC3D,UAAU,oBAAoB,QAAQ;AAAA,MACtC;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE,GAAG,SAAS,QAAQ,KAAK,CAAC;AAE1E,UAAM,OAAO,KAAK,UAAU,EAAE,GAAG,MAAM,QAAQ,KAAK,CAAC;AAErD,UAAM,EAAE,iBAAiB,OAAO,SAAS,IAAI,MAAM,cAAc;AAAA,MAC/D,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,SAAS,eAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,QAAQ;AAAA,MACV;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,UAAU,WAAW,GAAG,YAAY,IAAI;AAEhD,UAAM,YAQD,CAAC;AAEN,QAAI,eAA4C;AAChD,QAAI,QAGA;AAAA,MACF,cAAc;AAAA,MACd,kBAAkB;AAAA,IACpB;AACA,QAAI,eAAe;AAEnB,QAAI;AACJ,WAAO;AAAA,MACL,QAAQ,SAAS;AAAA,QACf,IAAI,gBAGF;AAAA,UACA,UAAU,OAAO,YAAY;AAvXvC;AAyXY,gBAAI,CAAC,MAAM,SAAS;AAClB,6BAAe;AACf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,OAAO,MAAM;AAAA,cACf,CAAC;AACD;AAAA,YACF;AAEA,kBAAM,QAAQ,MAAM;AAGpB,gBAAI,WAAW,OAAO;AACpB,6BAAe;AACf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,OAAO,MAAM;AAAA,cACf,CAAC;AACD;AAAA,YACF;AAEA,gBAAI,cAAc;AAChB,6BAAe;AAEf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,GAAG,oBAAoB,KAAK;AAAA,cAC9B,CAAC;AAAA,YACH;AAEA,kBAAI,WAAM,aAAN,mBAAgB,UAAS,MAAM;AACjC,sBAAQ;AAAA,gBACN,eAAc,WAAM,SAAS,MAAM,kBAArB,YAAsC;AAAA,gBACpD,mBACE,WAAM,SAAS,MAAM,sBAArB,YAA0C;AAAA,cAC9C;AAAA,YACF;AAEA,kBAAM,SAAS,MAAM,QAAQ,CAAC;AAE9B,iBAAI,iCAAQ,kBAAiB,MAAM;AACjC,6BAAe,sBAAsB,OAAO,aAAa;AAAA,YAC3D;AAEA,iBAAI,iCAAQ,UAAS,MAAM;AACzB;AAAA,YACF;AAEA,kBAAM,QAAQ,OAAO;AAErB,gBAAI,MAAM,aAAa,QAAQ,MAAM,UAAU,SAAS,GAAG;AACzD,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,WAAW,MAAM;AAAA,cACnB,CAAC;AAAA,YACH;AAEA,gBAAI,MAAM,WAAW,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACrD,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,WAAW,MAAM;AAAA,cACnB,CAAC;AAAA,YACH;AAEA,gBAAI,MAAM,cAAc,MAAM;AAC5B,yBAAW,iBAAiB,MAAM,YAAY;AAC5C,sBAAM,QAAQ,cAAc;AAE5B,oBAAI,UAAU,KAAK,KAAK,MAAM;AAC5B,sBAAI,cAAc,SAAS,YAAY;AACrC,0BAAM,IAAI,yBAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,sBAAI,cAAc,MAAM,MAAM;AAC5B,0BAAM,IAAI,yBAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,wBAAI,mBAAc,aAAd,mBAAwB,SAAQ,MAAM;AACxC,0BAAM,IAAI,yBAAyB;AAAA,sBACjC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AAEA,4BAAU,KAAK,IAAI;AAAA,oBACjB,IAAI,cAAc;AAAA,oBAClB,MAAM;AAAA,oBACN,UAAU;AAAA,sBACR,MAAM,cAAc,SAAS;AAAA,sBAC7B,YAAW,mBAAc,SAAS,cAAvB,YAAoC;AAAA,oBACjD;AAAA,oBACA,aAAa;AAAA,kBACf;AAEA,wBAAMC,YAAW,UAAU,KAAK;AAEhC,wBACE,KAAAA,UAAS,aAAT,mBAAmB,SAAQ,UAC3B,KAAAA,UAAS,aAAT,mBAAmB,cAAa,MAChC;AAEA,wBAAIA,UAAS,SAAS,UAAU,SAAS,GAAG;AAC1C,iCAAW,QAAQ;AAAA,wBACjB,MAAM;AAAA,wBACN,cAAc;AAAA,wBACd,YAAYA,UAAS;AAAA,wBACrB,UAAUA,UAAS,SAAS;AAAA,wBAC5B,eAAeA,UAAS,SAAS;AAAA,sBACnC,CAAC;AAAA,oBACH;AAIA,wBAAI,eAAeA,UAAS,SAAS,SAAS,GAAG;AAC/C,iCAAW,QAAQ;AAAA,wBACjB,MAAM;AAAA,wBACN,cAAc;AAAA,wBACd,aAAY,KAAAA,UAAS,OAAT,YAAeD,YAAW;AAAA,wBACtC,UAAUC,UAAS,SAAS;AAAA,wBAC5B,MAAMA,UAAS,SAAS;AAAA,sBAC1B,CAAC;AACD,sBAAAA,UAAS,cAAc;AAAA,oBACzB;AAAA,kBACF;AAEA;AAAA,gBACF;AAGA,sBAAM,WAAW,UAAU,KAAK;AAEhC,oBAAI,SAAS,aAAa;AACxB;AAAA,gBACF;AAEA,sBAAI,mBAAc,aAAd,mBAAwB,cAAa,MAAM;AAC7C,2BAAS,SAAU,cACjB,yBAAc,aAAd,mBAAwB,cAAxB,YAAqC;AAAA,gBACzC;AAGA,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,cAAc;AAAA,kBACd,YAAY,SAAS;AAAA,kBACrB,UAAU,SAAS,SAAS;AAAA,kBAC5B,gBAAe,mBAAc,SAAS,cAAvB,YAAoC;AAAA,gBACrD,CAAC;AAGD,sBACE,cAAS,aAAT,mBAAmB,SAAQ,UAC3B,cAAS,aAAT,mBAAmB,cAAa,QAChC,eAAe,SAAS,SAAS,SAAS,GAC1C;AACA,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,cAAc;AAAA,oBACd,aAAY,cAAS,OAAT,YAAeD,YAAW;AAAA,oBACtC,UAAU,SAAS,SAAS;AAAA,oBAC5B,MAAM,SAAS,SAAS;AAAA,kBAC1B,CAAC;AACD,2BAAS,cAAc;AAAA,gBACzB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UAEA,MAAM,YAAY;AAviB5B;AAwiBY,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN;AAAA,cACA,OAAO;AAAA,gBACL,eAAc,WAAM,iBAAN,YAAsB;AAAA,gBACpC,mBAAkB,WAAM,qBAAN,YAA0B;AAAA,cAC9C;AAAA,cACA,GAAI,oBAAoB,OAAO,EAAE,iBAAiB,IAAI,CAAC;AAAA,YACzD,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,aAAa,EAAE,SAAS,gBAAgB;AAAA,MACxC;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AACF;AAIA,IAAM,2BAA2BH,GAAE,OAAO;AAAA,EACxC,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACvB,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC5B,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAC1B,SAASA,GAAE;AAAA,IACTA,GAAE,OAAO;AAAA,MACP,SAASA,GAAE,OAAO;AAAA,QAChB,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,QAC5B,WAAWA,GAAE,OAAO,EAAE,QAAQ;AAAA,QAC9B,YAAYA,GACT;AAAA,UACCA,GAAE,OAAO;AAAA,YACP,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,YACvB,MAAMA,GAAE,QAAQ,UAAU;AAAA,YAC1B,UAAUA,GAAE,OAAO;AAAA,cACjB,MAAMA,GAAE,OAAO;AAAA,cACf,WAAWA,GAAE,OAAO;AAAA,YACtB,CAAC;AAAA,UACH,CAAC;AAAA,QACH,EACC,QAAQ;AAAA,MACb,CAAC;AAAA,MACD,OAAOA,GAAE,OAAO;AAAA,MAChB,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH;AAAA,EACA,OAAOA,GACJ,OAAO;AAAA,IACN,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAClC,mBAAmBA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACxC,CAAC,EACA,QAAQ;AACb,CAAC;AAID,IAAM,wBAAwBA,GAAE,MAAM;AAAA,EACpCA,GAAE,OAAO;AAAA,IACP,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACvB,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC5B,OAAOA,GAAE,OAAO,EAAE,QAAQ;AAAA,IAC1B,SAASA,GAAE;AAAA,MACTA,GAAE,OAAO;AAAA,QACP,OAAOA,GACJ,OAAO;AAAA,UACN,SAASA,GAAE,OAAO,EAAE,QAAQ;AAAA,UAC5B,WAAWA,GAAE,OAAO,EAAE,QAAQ;AAAA,UAC9B,YAAYA,GACT;AAAA,YACCA,GAAE,OAAO;AAAA,cACP,OAAOA,GAAE,OAAO;AAAA,cAChB,IAAIA,GAAE,OAAO,EAAE,QAAQ;AAAA,cACvB,MAAMA,GAAE,QAAQ,UAAU,EAAE,SAAS;AAAA,cACrC,UAAUA,GAAE,OAAO;AAAA,gBACjB,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,gBACzB,WAAWA,GAAE,OAAO,EAAE,QAAQ;AAAA,cAChC,CAAC;AAAA,YACH,CAAC;AAAA,UACH,EACC,QAAQ;AAAA,QACb,CAAC,EACA,QAAQ;AAAA,QACX,eAAeA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,QAC9C,OAAOA,GAAE,OAAO;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,UAAUA,GACP,OAAO;AAAA,MACN,OAAOA,GACJ,OAAO;AAAA,QACN,eAAeA,GAAE,OAAO,EAAE,QAAQ;AAAA,QAClC,mBAAmBA,GAAE,OAAO,EAAE,QAAQ;AAAA,MACxC,CAAC,EACA,QAAQ;AAAA,IACb,CAAC,EACA,QAAQ;AAAA,EACb,CAAC;AAAA,EACD;AACF,CAAC;;;AM3oBD;AAAA,EACI,kBAAAK;AAAA,EAEA,6BAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,iBAAAC;AAAA,OACG;;;ACPP,SAAS,KAAAC,UAAS;AAMX,IAAM,gBAAgBA,GACxB,KAAK;AAAA,EACF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC,EACA,QAAQ,OAAO;AAGb,IAAM,8BAA8BA,GACtC,OAAO;AAAA,EACJ,SAAS;AAAA,EACT,OAAOA,GAAE,OAAO,EAAE,IAAI,KAAK,EAAE,IAAI,IAAI,EAAE,QAAQ,CAAG;AAAA,EAClD,MAAMA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,IAAI,CAAG,EAAE,QAAQ,CAAG;AAAA,EAC9C,UAAUA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,IAAI,CAAG,EAAE,QAAQ,CAAG;AAAA,EAClD,oBAAoBA,GACf,MAAM;AAAA,IACHA,GAAE,QAAQ,GAAI;AAAA,IACdA,GAAE,QAAQ,IAAK;AAAA,IACfA,GAAE,QAAQ,KAAK;AAAA,IACfA,GAAE,QAAQ,IAAK;AAAA,EACnB,CAAC,EACA,QAAQ,KAAK;AAAA,EAClB,sBAAsBA,GAAE,QAAQ,EAAE,QAAQ,KAAK;AACnD,CAAC,EACA,QAAQ;;;AD9Bb,SAAS,KAAAC,UAAS;AASX,IAAM,oBAAN,MAAiD;AAAA,EAOpD,YACa,SACA,cACQ,QACnB;AAHW;AACA;AACQ;AATrB,SAAS,uBAAuB;AAAA,EAU7B;AAAA,EARH,IAAI,WAAmB;AACnB,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAQQ,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA,eAAe;AAAA;AAAA;AAAA,IAGf;AAAA,EACJ,GAA+C;AAC3C,UAAM,WAAuC,CAAC;AAG9C,UAAM,gBAAgBC,sBAAqB;AAAA,MACvC,UAAU;AAAA,MACV,iBAAiB;AAAA,QACb,QAAQ;AAAA,UACJ,GAAG,mDAAiB;AAAA,UACpB,GAAG,KAAK,OAAO;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,QAAQ;AAAA,IACZ,CAAC;AAED,UAAM,aAAa,MAA0C;AACzD,UAAI,+CAAe,QAAS,QAAO,cAAc;AACjD,UAAI,OAAO;AACP,eAAO,cAAc,MAAM,KAAK;AAAA,MACpC;AAEA,cAAQ,KAAK,SAAS;AAAA,QAClB,KAAK;AACD,iBAAO;AAAA,QACX,KAAK;AACD,iBAAO;AAAA,MACf;AAEA,aAAO;AAAA,IACX;AAGA,UAAM,cAAuC;AAAA,MACzC,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,sBAAsB,KAAK;AAAA,MAC3B,SAAS,WAAW;AAAA;AAAA;AAAA;AAAA,IAIxB;AAEA,QAAI,cAAc;AACd,UACI,CAAC,OAAO,QAAQ,OAAO,QAAQ,OAAO,KAAK,EAAE;AAAA,QACzC;AAAA,MACJ,GACF;AACE,oBAAY,kBAAkB;AAAA,MAClC,OAAO;AACH,iBAAS,KAAK;AAAA,UACV,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS,8BAA8B,YAAY;AAAA,QACvD,CAAC;AAAA,MACL;AAAA,IACJ;AAGA,QAAI,eAAe;AACf,YAAM,qBAA2C,CAAC;AAElD,iBAAW,OAAO,oBAAoB;AAClC,cAAM,QACF,mBAAmB,GAAiC;AACxD,YAAI,UAAU,QAAW;AACrB,sBAAY,GAAG,IAAI;AAAA,QACvB;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,MACH;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,WACF,SACyD;AA7HjE;AA8HQ,UAAM,eACF,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvD,UAAM,EAAE,aAAa,SAAS,IAAI,KAAK,QAAQ,OAAO;AAEtD,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IACd,IAAI,MAAMC,eAAc;AAAA,MACpB,KAAK,KAAK,OAAO,IAAI;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAClB,CAAC;AAAA,MACD,SAASC,gBAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,2BAA2BC;AAAA,QACvBJ,GAAE,OAAO;AAAA,UACL,YAAYA,GAAE,OAAO;AAAA,UACrB,QAAQA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,QAC9B,CAAC;AAAA,MACL;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACvB,CAAC;AAED,UAAM,QAAQ,MAAM,OAAO,CAAC;AAE5B,WAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA,SAAS;AAAA,QACL,MAAM,KAAK,UAAU,WAAW;AAAA,MACpC;AAAA,MACA,UAAU;AAAA,QACN,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AACJ;;;AEpKA;AAAA,EACI,kBAAAK;AAAA,EACA,6BAAAC;AAAA,EACA,wBAAAC;AAAA,EACA;AAAA,OACG;AACP,SAAS,KAAAC,UAAS;;;ACVlB,SAAS,KAAAC,UAAS;AAeX,IAAMC,+BAA8BD,GAAE,OAAO;AAAA,EAChD,iBAAiBA,GAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpD,kBAAkBA,GAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACrD,cAAcA,GAAE,OAAO,EAAE,IAAI,EAAE,QAAQ;AAC3C,CAAC;;;ADQM,IAAM,2BAAN,MAA+D;AAAA,EAGlE,YACa,SACA,cACQ,QACnB;AAHW;AACA;AACQ;AALrB,SAAS,uBAAuB;AAAA,EAM7B;AAAA,EAEH,IAAI,WAAmB;AACnB,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEQ,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAAsD;AAClD,UAAM,WAA8C,CAAC;AAErD,QAAI,KAAK,YAAY,gBAAgB,KAAK,iBAAiB;AACvD,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAEJ,UAAM,gBAAgBE,sBAAqB;AAAA,MACvC,UAAU;AAAA,MACV,iBAAiB;AAAA,QACb,QAAQ;AAAA,UACJ,GAAG,mDAAiB;AAAA,UACpB,GAAG,KAAK,OAAO;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,QAAQC;AAAA,IACZ,CAAC;AAED,UAAM,WAAW,IAAI,SAAS;AAC9B,UAAM,OACF,iBAAiB,OACX,QACA,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/C,aAAS,OAAO,QAAQ,IAAI;AAC5B,aAAS,OAAO,SAAS,KAAK,OAAO;AACrC,QAAI,eAAe;AACf,eAAS,OAAO,iBAAiB,KAAK,YAAY;AAClD,eAAS;AAAA,QACL;AAAA,QACA,cAAc,kBAAkB,SAAS;AAAA,MAC7C;AACA,eAAS;AAAA,QACL;AAAA,QACA,cAAc,mBAAmB,SAAS;AAAA,MAC9C;AACA,UACI,cAAc,iBAAiB,QAC/B,cAAc,iBAAiB,QACjC;AACE,iBAAS;AAAA,UACL;AAAA,UACA,cAAc,aAAa,SAAS;AAAA,QACxC;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,MACH;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,WACF,SACgE;AApGxE;AAqGQ,UAAM,eACF,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvD,UAAM,EAAE,UAAU,SAAS,IAAI,KAAK,QAAQ,OAAO;AAEnD,UAAM;AAAA,MACF,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,IACd,IAAI,MAAM,kBAAkB;AAAA,MACxB,KAAK,KAAK,OAAO,IAAI;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAClB,CAAC;AAAA,MACD,SAASC,gBAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2BC;AAAA,QACvB;AAAA,MACJ;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACvB,CAAC;AAED,WAAO;AAAA,MACH,MAAM,SAAS;AAAA,MACf,UAAU,SAAS,aACb,SAAS,WAAW,MAAM,IAAI,CAAC,MAAM,WAAW;AAAA,QAC5C,MAAM;AAAA,QACN,aACI,SAAS,WAAY,mBAAmB,KAAK;AAAA,QACjD,WAAW,SAAS,WAAY,iBAAiB,KAAK;AAAA,MAC1D,EAAE,IACF,CAAC;AAAA,MACP,UAAU,SAAS,gBACb,SAAS,gBACT;AAAA,MACN,oBACI,oBAAS,eAAT,mBAAqB,iBACjB,SAAS,WAAW,iBAAiB,SAAS,OADlD,YAEK;AAAA,MACT;AAAA,MACA,UAAU;AAAA,QACN,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,IAAM,oCAAoCC,GAAE,OAAO;AAAA,EAC/C,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAYA,GAAE,OAAO;AAAA,EACrB,eAAeA,GAAE,OAAO,EAAE,SAAS;AAAA,EACnC,YAAYA,GACP,OAAO;AAAA,IACJ,kBAAkBA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,IACpC,oBAAoBA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,IACtC,OAAOA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EAC7B,CAAC,EACA,SAAS;AAAA,EACd,qBAAqBA,GAChB,OAAO;AAAA,IACJ,SAASA,GAAE;AAAA,MACPA,GAAE,OAAO;AAAA,QACL,kBAAkBA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,QACpC,oBAAoBA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,QACtC,YAAYA,GAAE,OAAO;AAAA,QACrB,YAAYA,GAAE,OAAO;AAAA,MACzB,CAAC;AAAA,IACL;AAAA,EACJ,CAAC,EACA,SAAS;AAClB,CAAC;;;AE3KD;AAAA,EAEI,kBAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,iBAAAC;AAAA,OACG;AACP,SAAS,KAAAC,UAAS;;;ACTlB,SAAS,KAAAC,UAAS;AAYX,IAAM,2BAA2BA,GAAE,KAAK;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AAIM,IAAM,yBAAyBA,GAAE,KAAK;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;;;ADfM,IAAM,yBAAN,MAAwD;AAAA,EAW7D,YACE,UACA,QACA;AAbF,SAAS,uBAAuB;AAEhC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AA7BzC;AAwCI,SAAK,WAAU,cAAS,UAAT,YAAkB;AACjC,SAAK,WAAW;AAChB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,oBAA6B;AAE/B,WAAO;AAAA,EACT;AAAA,EAEQ,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,EACF,GAEG;AA3DL;AA4DI,UAAM,OAAO,KAAK;AAElB,UAAM,WAAyC,CAAC;AAEhD,QAAI,KAAK,SAAS,SAAS,KAAK,SAAS,IAAI;AACzC,YAAM,IAAI;AAAA,QACV;AAAA,MACA;AAAA,IACJ;AAEA,QAAI,KAAK,YAAY,uBAAuB;AACxC,YAAK,UAAK,SAAS,SAAd,YAAsB,cAAc;AACrC,cAAM,IAAI;AAAA,UACV;AAAA,QACA;AACJ,YAAK,UAAK,SAAS,SAAd,YAAsB,YAAY;AACnC,cAAM,IAAI;AAAA,UACV;AAAA,QACA;AAAA,IACR;AAEA,QAAI,SAAS,WAAW;AACtB,YAAM,mBAAmB;AACzB,YAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,IACzD;AAEA,UAAM,WAAW,4BAA4B,MAAM;AAEnD,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,SACJ,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,OAAO,EACpB,KAAK,IAAI;AAAA,QACZ,uBAAsB,UAAK,SAAS,SAAd,YAAsB;AAAA,QAC5C,sBAAsB,KAAK,SAAS;AAAA,QACpC,kBAAiB,UAAK,SAAS,oBAAd,YAAiC;AAAA,QAClD,uBAAsB,UAAK,SAAS,yBAAd,YAAsC;AAAA,QAC5D,gBAAe,UAAK,SAAS,kBAAd,YAA+B;AAAA,QAC9C,iBAAgB,UAAK,SAAS,mBAAd,YAAgC;AAAA,QAChD,OAAM,UAAK,SAAS,SAAd,YAAsB;AAAA,QAC5B,OAAO,KAAK;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AA9GjE;AA+GI,UAAM,EAAE,MAAM,UAAU,SAAS,IAAI,KAAK,QAAQ;AAAA,MAChD,GAAG;AAAA,MACH,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,OAAO,KAAK,UAAU,IAAI;AAEhC,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,IAAI,MAAMC,eAAc;AAAA,MACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,MACR,CAAC;AAAA,MACD,SAASC,gBAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,2BAA2BC;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,OAAO,WAAW,GAAG,YAAY,IAAI;AAE7C,UAAM,QAAO,cAAS,oBAAT,YAA4B;AAEzC,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,MACX,cAAc;AAAA,MACd,OAAO;AAAA,QACL,cAAc;AAAA,QACd,kBAAkB;AAAA,MACpB;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,aAAa,EAAE,SAAS,iBAAiB,MAAM,YAAY;AAAA,MAC3D,UAAU;AAAA,MACV;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACF;AAEA,IAAM,kCAAkCC,GAAE,OAAO;AAAA,EAC/C,iBAAiBA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACpC,sBAAsB,yBAAyB,SAAS;AAAA,EACxD,YAAYA,GAAE,OAAO,EAAE,QAAQ;AACjC,CAAC;;;AEpKD;AAAA,EAEI,kBAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,iBAAAC;AAAA,OACG;AACP,SAAS,KAAAC,UAAS;AAeX,IAAM,2BAAN,MAA0D;AAAA,EAW/D,YACE,UACA,QACA;AAbF,SAAS,uBAAuB;AAEhC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AAWrC,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,oBAA6B;AAE/B,WAAO;AAAA,EACT;AAAA,EAEQ,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,EACF,GAEG;AA3DL;AA4DI,UAAM,OAAO,KAAK;AAElB,UAAM,WAAyC,CAAC;AAEhD,QAAI,KAAK,SAAS,SAAS,QAAQ;AACjC,UAAI,KAAK,SAAS,OAAO,WAAW,KAAK,SAAS,SAAS;AACzD,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,IACJ;AAEA,QAAI,SAAS,WAAW;AACtB,YAAM,mBAAmB;AACzB,YAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,IACzD;AAEA,UAAM,WAAW,4BAA4B,MAAM;AAEnD,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,SACJ,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,OAAO,EACpB,KAAK,IAAI;AAAA,QACZ,uBAAsB,UAAK,SAAS,SAAd,YAAsB;AAAA,QAC5C,sBAAsB,KAAK,SAAS;AAAA,QACpC,kBAAiB,UAAK,SAAS,oBAAd,YAAiC;AAAA,QAClD,GAAI,KAAK,SAAS,cACd;AAAA,UACE,aAAa,KAAK,SAAS;AAAA,UAC3B,gCACE,UAAK,SAAS,kCAAd,YAA+C;AAAA,QACnD,IACA,CAAC;AAAA,MACP;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AAtGjE;AAuGI,UAAM,EAAE,MAAM,UAAU,SAAS,IAAI,KAAK,QAAQ;AAAA,MAChD,GAAG;AAAA,MACH,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,OAAO,KAAK,UAAU,IAAI;AAEhC,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,IAAI,MAAMC,eAAc;AAAA,MACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,MACR,CAAC;AAAA,MACD,SAASC,gBAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,2BAA2BC;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,OAAO,WAAW,GAAG,YAAY,IAAI;AAE7C,QAAI,QAAO,cAAS,wBAAT,YAAgC;AAE3C,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,MACX,cAAc;AAAA,MACd,OAAO;AAAA,QACL,cAAc;AAAA,QACd,kBAAkB;AAAA,MACpB;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,aAAa,EAAE,SAAS,iBAAiB,MAAM,YAAY;AAAA,MAC3D,UAAU;AAAA,MACV;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AACF;AAEA,IAAM,oCAAoCC,GAAE,OAAO;AAAA,EACjD,qBAAqBA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACxC,sBAAsB,yBAAyB,SAAS;AAAA,EACxD,YAAYA,GAAE,OAAO,EAAE,QAAQ;AACjC,CAAC;;;AC5JD;AAAA,EAEI,kBAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,iBAAAC;AAAA,OACG;AACP,SAAS,KAAAC,WAAS;AAcX,IAAM,iBAAN,MAAgD;AAAA,EAUrD,YACE,QACA;AAXF,SAAS,uBAAuB;AAEhC,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AASrC,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,oBAA6B;AAE/B,WAAO;AAAA,EACT;AAAA,EAEQ,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,EACF,GAEG;AACD,UAAM,OAAO,KAAK;AAElB,UAAM,WAAyC,CAAC;AAEhD,QAAI,SAAS,WAAW;AACtB,YAAM,mBAAmB;AACzB,YAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,IACzD;AAEA,UAAM,WAAW,4BAA4B,MAAM;AAEnD,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,QACJ,OAAO,SACJ,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,OAAO,EACpB,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AAjFjE;AAkFI,UAAM,EAAE,MAAM,UAAU,SAAS,IAAI,KAAK,QAAQ;AAAA,MAChD,GAAG;AAAA,MACH,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,OAAO,KAAK,UAAU,IAAI;AAEhC,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,IAAI,MAAMC,eAAc;AAAA,MACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,MACR,CAAC;AAAA,MACD,SAASC,gBAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D,MAAM;AAAA,MACN,uBAAuB;AAAA,MACvB,2BAA2BC;AAAA,QACzB;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,UAAM,EAAE,OAAO,WAAW,GAAG,YAAY,IAAI;AAE7C,UAAM,QAAO,cAAS,kBAAT,YAA0B;AAEvC,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,MACX,cAAc;AAAA,MACd,OAAO;AAAA,QACL,cAAc;AAAA,QACd,kBAAkB;AAAA,MACpB;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,aAAa,EAAE,SAAS,iBAAiB,MAAM,YAAY;AAAA,MAC3D,UAAU;AAAA,MACV;AAAA,MACA,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AACF;AAEA,IAAM,0BAA0BC,IAAE,OAAO;AAAA,EACvC,aAAa,uBAAuB,QAAQ;AAAA,EAC5C,eAAe,yBAAyB,SAAS;AAAA,EACjD,YAAYA,IAAE,OAAO,EAAE,QAAQ;AACjC,CAAC;;;ACvID;AAAA,EACE,kBAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,qBAAAC;AAAA,OACK;AACP,SAAS,KAAAC,WAAS;AAYX,IAAM,+BAAN,MAAmE;AAAA,EAGxE,YACW,SACQ,QACjB;AAFS;AACQ;AAJnB,SAAS,uBAAuB;AAAA,EAK7B;AAAA,EAEH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEQ,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAsD;AACpD,UAAM,WAA8C,CAAC;AAErD,UAAM,WAAW,IAAI,SAAS;AAC9B,UAAM,OACJ,iBAAiB,OAAO,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAEvE,aAAS,OAAO,QAAQ,IAAI;AAC5B,aAAS,OAAO,SAAS,KAAK,OAAO;AAErC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SACkE;AAvDtE;AAwDI,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,EAAE,UAAU,SAAS,IAAI,KAAK,QAAQ,OAAO;AAEnD,UAAM;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,IACZ,IAAI,MAAMC,mBAAkB;AAAA,MAC1B,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,SAASC,gBAAe,KAAK,OAAO,QAAQ,GAAG,QAAQ,OAAO;AAAA,MAC9D;AAAA,MACA,uBAAuB;AAAA,MACvB,2BAA2BC;AAAA,QACzBC;AAAA,MACF;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACL,MAAM,SAAS;AAAA,MACf,UAAU,CAAC;AAAA,MACX,UAAU,SAAS,gBAAgB,SAAS,gBAAgB;AAAA,MAC5D,mBAAmB;AAAA,MACnB;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAMA,qCAAoCC,IAAE,OAAO;AAAA,EACjD,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAYA,IAAE,OAAO;AAAA,EACrB,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQnC,qBAAqBA,IAClB,OAAO;AAAA,IACN,SAASA,IAAE;AAAA,MACTA,IAAE,OAAO;AAAA,QACP,kBAAkBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,QACpC,oBAAoBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,QACtC,YAAYA,IAAE,OAAO;AAAA,QACrB,YAAYA,IAAE,OAAO;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,EACF,CAAC,EACA,SAAS,EACT,SAAS;AACd,CAAC;;;AfCM,SAAS,aACd,UAAkC,CAAC,GACnB;AAzHlB;AA0HE,QAAM,WACJ,0BAAqB,QAAQ,OAAO,MAApC,YAAyC;AAE3C,QAAM,YAAY,MAAM,WAAW;AAAA,IACjC,QAAQ,QAAQ;AAAA,IAChB,yBAAyB;AAAA,IACzB,aAAa;AAAA,EACf,CAAC;AAED,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,UAAU,UAAU,CAAC;AAAA,IACpC,wBAAwB,UAAU;AAAA,IAClC,GAAG,QAAQ;AAAA,EACb;AAEA,QAAM,kBAAkB,CACtB,SACA,WAA+B,CAAC,MAEhC,IAAI,wBAAwB,SAAS,UAAU;AAAA,IAC7C,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,MAAM,IAAI;AAAA,IACvC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,sBAAsB,CAC1B,SACA,aACG;AACH,QAAI,YAAY;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO,gBAAgB,SAAS,QAAQ;AAAA,EAC1C;AAEA,QAAM,2BAA2B,CAC/B,SACA,eAA+C,WAC/C,aACG,IAAI,yBAAyB,SAAS,cAAc;AAAA,IACrD,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,IACpC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,IACf,eAAe;AAAA,EACjB,CAAC;AAEH,QAAM,0BAA0B,CAC9B,YACG,IAAI,6BAA6B,SAAS;AAAA,IAC3C,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,IACpC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,oBAAoB,CACxB,SACA,cACA,aAEA,IAAI,kBAAkB,SAAS,cAAc;AAAA,IAC3C,UAAU;AAAA,IACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,IACpC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,IACf,QAAQ;AAAA,EACV,CAAC;AAEH,QAAM,2BAA2B,CAAC,aAChC,IAAI;AAAA,IACA;AAAA,IACF;AAAA,MACE,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAEF,QAAM,yBAAyB,CAAC,aAC9B,IAAI;AAAA,IACA;AAAA,IACF;AAAA,MACE,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAEF,QAAM,iBAAiB,MACrB,IAAI;AAAA,IACF;AAAA,MACE,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAEF,QAAM,WAAW,CACf,SACA,aACG,oBAAoB,SAAS,QAAQ;AAE1C,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAChB,WAAS,gBAAgB;AACzB,WAAS,oBAAoB;AAC7B,WAAS,SAAS;AAClB,WAAS,gBAAgB;AACzB,WAAS,cAAc;AACvB,WAAS,yBAAyB;AAElC,SAAO;AACT;AAKO,IAAM,SAAS,aAAa;","names":["generateId","z","UnsupportedFunctionalityError","z","prompt","_a","generateId","toolCall","combineHeaders","createJsonResponseHandler","parseProviderOptions","postJsonToApi","z","z","parseProviderOptions","postJsonToApi","combineHeaders","createJsonResponseHandler","combineHeaders","createJsonResponseHandler","parseProviderOptions","z","z","SarvamProviderOptionsSchema","parseProviderOptions","SarvamProviderOptionsSchema","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postJsonToApi","z","z","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postJsonToApi","z","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postJsonToApi","z","postJsonToApi","combineHeaders","createJsonResponseHandler","z","combineHeaders","createJsonResponseHandler","postFormDataToApi","z","postFormDataToApi","combineHeaders","createJsonResponseHandler","sarvamTranscriptionResponseSchema","z"]}
|