krutrim-ai-sdk 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/error.ts","../src/bhashik/language-detection.ts","../src/indic/languages.ts","../src/bhashik/speech-model.ts","../src/bhashik/transcription-model.ts","../src/bhashik/translation.ts","../src/models.ts","../src/chat/convert-to-chat-messages.ts","../src/chat/prepare-tools.ts","../src/chat/settings.ts","../src/chat/utils.ts","../src/chat/language-model.ts","../src/config.ts","../src/embedding/embedding-model.ts","../src/provider.ts","../src/indic/prompts.ts"],"names":["z","postJsonToApi","combineHeaders","createJsonResponseHandler","extractUserText","UnsupportedFunctionalityError","toolCall","generateId"],"mappings":"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","file":"index.js","sourcesContent":["import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\n/**\n * Flexible error payload — Krutrim surfaces both OpenAI-style and\n * Language Labs-style error bodies.\n */\nexport const krutrimErrorDataSchema = z.object({\n error: z\n .union([\n z.string(),\n z.object({\n message: z.string().optional(),\n type: z.string().optional(),\n code: z.union([z.string(), z.number()]).optional(),\n param: z.string().nullable().optional(),\n }),\n ])\n .optional(),\n message: z.string().optional(),\n status: z.union([z.string(), z.number()]).optional(),\n detail: z\n .object({\n info: z.string().optional(),\n })\n .passthrough()\n .optional(),\n // OpenAI-compatible sometimes nests differently\n code: z.union([z.string(), z.number()]).optional(),\n});\n\nexport type KrutrimErrorData = z.infer<typeof krutrimErrorDataSchema>;\n\nfunction extractRawMessage(data: KrutrimErrorData): string {\n if (typeof data.error === 'string' && data.error.length > 0) {\n return data.error;\n }\n if (\n data.error &&\n typeof data.error === 'object' &&\n typeof data.error.message === 'string' &&\n data.error.message.length > 0\n ) {\n return data.error.message;\n }\n if (typeof data.message === 'string' && data.message.length > 0) {\n return data.message;\n }\n if (data.detail?.info) {\n return data.detail.info;\n }\n return 'Unknown Krutrim API error';\n}\n\n/**\n * Enrich raw API errors with India / Krutrim-specific guidance.\n */\nexport function enhanceKrutrimErrorMessage(\n rawMessage: string,\n statusCode?: number,\n): string {\n const lower = rawMessage.toLowerCase();\n const tips: string[] = [];\n\n if (\n statusCode === 401 ||\n lower.includes('unauthorized') ||\n lower.includes('invalid api key') ||\n lower.includes('authentication') ||\n lower.includes('api key')\n ) {\n tips.push(\n 'Check KRUTRIM_API_KEY or KRUTRIM_CLOUD_API_KEY (console: https://cloud.olakrutrim.com).',\n 'Keys can be regenerated under Key Management → Model API Keys.',\n );\n }\n\n if (statusCode === 403 || lower.includes('forbidden') || lower.includes('region')) {\n tips.push(\n 'This model or endpoint may be restricted to supported regions / account tiers.',\n 'Confirm your Krutrim Cloud account has access in the console.',\n );\n }\n\n if (\n statusCode === 429 ||\n lower.includes('rate limit') ||\n lower.includes('too many requests') ||\n lower.includes('quota')\n ) {\n tips.push(\n 'Rate limit or quota exceeded. Back off and retry with exponential delay.',\n 'Billing is typically INR-based on Krutrim Cloud — top up credits under Usage & Transactions if balance is low.',\n );\n }\n\n if (\n lower.includes('insufficient') ||\n lower.includes('credit') ||\n lower.includes('balance') ||\n lower.includes('payment') ||\n lower.includes('billing')\n ) {\n tips.push(\n 'Krutrim Cloud usage is billed in INR. Add credits at https://cloud.olakrutrim.com (Usage & Transactions).',\n );\n }\n\n if (\n lower.includes('model') &&\n (lower.includes('not found') ||\n lower.includes('invalid') ||\n lower.includes('does not exist') ||\n lower.includes('unknown'))\n ) {\n tips.push(\n 'Copy the exact model string from the Model Catalogue (case-sensitive).',\n 'Try aliases like \"krutrim-2\" → \"Krutrim-2\", or pass the catalogue ID directly.',\n );\n }\n\n if (statusCode === 404) {\n tips.push(\n 'Verify baseURL is https://cloud.olakrutrim.com/v1 for chat/embeddings.',\n 'Language Labs (Bhashik) uses https://cloud.olakrutrim.com/api/v1/...',\n );\n }\n\n if (statusCode != null && statusCode >= 500) {\n tips.push(\n 'Krutrim API returned a server error. Retry shortly; check status in the console if it persists.',\n );\n }\n\n if (tips.length === 0) {\n return rawMessage;\n }\n\n return `${rawMessage}\\n\\nšŸ’” Krutrim tips:\\n${tips.map((t) => ` • ${t}`).join('\\n')}`;\n}\n\nexport const krutrimFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: krutrimErrorDataSchema,\n errorToMessage: (data) => enhanceKrutrimErrorMessage(extractRawMessage(data)),\n});\n","import {\n type LanguageModelV3,\n type LanguageModelV3CallOptions,\n type LanguageModelV3Content,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport type { KrutrimConfig } from '../config';\nimport { krutrimFailedResponseHandler } from '../error';\n\nconst lidResponseSchema = z.object({\n status: z.string().nullish(),\n data: z\n .array(\n z.object({\n label: z.string().nullish(),\n value: z.string().nullish(),\n }),\n )\n .nullish(),\n});\n\nfunction extractUserText(options: LanguageModelV3CallOptions): string {\n const prompt = options.prompt as unknown;\n\n if (typeof prompt === 'string') {\n return prompt;\n }\n\n if (!Array.isArray(prompt)) {\n return '';\n }\n\n const parts: string[] = [];\n for (const message of prompt as LanguageModelV3CallOptions['prompt']) {\n if (message.role === 'user') {\n for (const part of message.content) {\n if (part.type === 'text') {\n parts.push(part.text);\n }\n }\n }\n }\n return parts.join('\\n');\n}\n\n/**\n * Language detection via Bhashik (`/api/v1/languagelabs/language-detection`).\n * Implements LanguageModelV3 so it works with `generateText`.\n */\nexport class KrutrimLanguageDetectionModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly modelId = 'bhashik-language-detection';\n readonly provider: string;\n\n private readonly config: KrutrimConfig;\n\n constructor(config: KrutrimConfig) {\n this.config = config;\n this.provider = config.provider;\n }\n\n get supportedUrls(): Record<string, RegExp[]> {\n return {};\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n const query = extractUserText(options);\n if (!query.trim()) {\n throw new Error(\n 'Language detection requires a non-empty user prompt or message.',\n );\n }\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: this.config.languageLabsUrl('/languagelabs/language-detection'),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: { query },\n failedResponseHandler: krutrimFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(lidResponseSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n // Prefer primary language label/value\n const primary = response.data?.[0];\n const text =\n primary?.value ??\n primary?.label ??\n response.data?.map((d) => d.value ?? d.label).filter(Boolean).join(', ') ??\n 'unknown';\n\n const content: LanguageModelV3Content[] = [{ type: 'text', text }];\n\n return {\n content,\n finishReason: { unified: 'stop', raw: 'stop' },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n providerMetadata: {\n krutrim: {\n detections: response.data ?? [],\n },\n },\n warnings: [\n {\n type: 'other',\n message:\n 'languageDetection only analyzes prompt / user messages (not system or assistant).',\n },\n ],\n request: { body: { query } },\n response: {\n headers: responseHeaders,\n body: rawValue,\n modelId: this.modelId,\n timestamp: new Date(),\n },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n const result = await this.doGenerate(options);\n const text =\n result.content.find((c) => c.type === 'text')?.type === 'text'\n ? (result.content.find((c) => c.type === 'text') as { text: string })\n .text\n : '';\n\n const stream = new ReadableStream({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings: result.warnings });\n controller.enqueue({ type: 'text-start', id: 'text-0' });\n controller.enqueue({ type: 'text-delta', id: 'text-0', delta: text });\n controller.enqueue({ type: 'text-end', id: 'text-0' });\n controller.enqueue({\n type: 'finish',\n finishReason: result.finishReason,\n usage: result.usage,\n providerMetadata: result.providerMetadata,\n });\n controller.close();\n },\n });\n\n return {\n stream,\n request: result.request,\n response: result.response,\n };\n }\n}\n","/**\n * ISO / BCP-47 style Indian language codes used across helpers.\n */\nexport type IndicLanguageCode =\n | 'hi-IN' // Hindi\n | 'bn-IN' // Bengali\n | 'kn-IN' // Kannada\n | 'ml-IN' // Malayalam\n | 'mr-IN' // Marathi\n | 'or-IN' // Odia\n | 'pa-IN' // Punjabi\n | 'ta-IN' // Tamil\n | 'te-IN' // Telugu\n | 'gu-IN' // Gujarati\n | 'as-IN' // Assamese\n | 'ur-IN' // Urdu\n | 'en-IN' // Indian English\n | 'sa-IN' // Sanskrit\n | 'ne-IN'; // Nepali\n\n/**\n * Short ISO-639-3 style codes used by Bhashik / Language Labs.\n */\nexport type BhashikLanguageCode =\n | 'eng'\n | 'hin'\n | 'ben'\n | 'mar'\n | 'tam'\n | 'tel'\n | 'kan'\n | 'mal'\n | 'pan'\n | 'guj';\n\n/**\n * Translation API uses script-aware codes like `hin_Deva`, `eng_Latn`.\n */\nexport type TranslationLanguageCode = string;\n\nexport const INDIC_LANGUAGES: ReadonlyArray<{\n code: IndicLanguageCode;\n bhashik: BhashikLanguageCode | null;\n name: string;\n nativeName: string;\n script: string;\n notes?: string;\n}> = [\n {\n code: 'hi-IN',\n bhashik: 'hin',\n name: 'Hindi',\n nativeName: 'ą¤¹ą¤æą¤Øą„ą¤¦ą„€',\n script: 'Deva',\n },\n {\n code: 'bn-IN',\n bhashik: 'ben',\n name: 'Bengali',\n nativeName: 'বাংলা',\n script: 'Beng',\n },\n {\n code: 'ta-IN',\n bhashik: 'tam',\n name: 'Tamil',\n nativeName: 'ą®¤ą®®ą®æą®“ąÆ',\n script: 'Taml',\n },\n {\n code: 'te-IN',\n bhashik: 'tel',\n name: 'Telugu',\n nativeName: 'తెలుగు',\n script: 'Telu',\n },\n {\n code: 'mr-IN',\n bhashik: 'mar',\n name: 'Marathi',\n nativeName: 'ą¤®ą¤°ą¤¾ą¤ ą„€',\n script: 'Deva',\n },\n {\n code: 'gu-IN',\n bhashik: 'guj',\n name: 'Gujarati',\n nativeName: 'ąŖ—ą«ąŖœąŖ°ąŖ¾ąŖ¤ą«€',\n script: 'Gujr',\n },\n {\n code: 'kn-IN',\n bhashik: 'kan',\n name: 'Kannada',\n nativeName: 'ą²•ą²Øą³ą²Øą²”',\n script: 'Knda',\n },\n {\n code: 'ml-IN',\n bhashik: 'mal',\n name: 'Malayalam',\n nativeName: 'ą“®ą“²ą“Æą“¾ą“³ą“‚',\n script: 'Mlym',\n },\n {\n code: 'pa-IN',\n bhashik: 'pan',\n name: 'Punjabi',\n nativeName: 'ąØŖą©°ąØœąØ¾ąØ¬ą©€',\n script: 'Guru',\n },\n {\n code: 'or-IN',\n bhashik: null,\n name: 'Odia',\n nativeName: 'ଓଔ଼ିଆ',\n script: 'Orya',\n notes: 'Not all Bhashik endpoints list Odia yet.',\n },\n {\n code: 'as-IN',\n bhashik: null,\n name: 'Assamese',\n nativeName: 'অসমীয়া',\n script: 'Beng',\n },\n {\n code: 'ur-IN',\n bhashik: null,\n name: 'Urdu',\n nativeName: 'اردو',\n script: 'Arab',\n },\n {\n code: 'en-IN',\n bhashik: 'eng',\n name: 'English (India)',\n nativeName: 'English',\n script: 'Latn',\n },\n {\n code: 'sa-IN',\n bhashik: null,\n name: 'Sanskrit',\n nativeName: 'ą¤øą¤‚ą¤øą„ą¤•ą„ƒą¤¤ą¤®ą„',\n script: 'Deva',\n },\n {\n code: 'ne-IN',\n bhashik: null,\n name: 'Nepali',\n nativeName: 'ą¤Øą„‡ą¤Ŗą¤¾ą¤²ą„€',\n script: 'Deva',\n },\n];\n\n/**\n * Map BCP-47 Indic codes to Bhashik short codes when available.\n */\nexport function toBhashikLanguageCode(\n code: IndicLanguageCode | string,\n): BhashikLanguageCode | null {\n const entry = INDIC_LANGUAGES.find(\n (l) => l.code === code || l.bhashik === code,\n );\n return entry?.bhashik ?? null;\n}\n\n/**\n * Build a translation-style language tag, e.g. `hin_Deva`, `eng_Latn`.\n */\nexport function toTranslationLanguageCode(\n code: IndicLanguageCode | string,\n): TranslationLanguageCode {\n const entry = INDIC_LANGUAGES.find(\n (l) => l.code === code || l.bhashik === code,\n );\n if (!entry?.bhashik) {\n // Pass through already-qualified codes like hin_Deva\n if (code.includes('_')) return code;\n throw new Error(\n `No Bhashik/translation mapping for language \"${code}\". ` +\n `Use a supported code or pass an explicit tag like \"hin_Deva\".`,\n );\n }\n return `${entry.bhashik}_${entry.script}`;\n}\n","import type { SpeechModelV3 } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport type { KrutrimConfig } from '../config';\nimport { krutrimFailedResponseHandler } from '../error';\nimport {\n type BhashikLanguageCode,\n type IndicLanguageCode,\n toBhashikLanguageCode,\n} from '../indic/languages';\n\nconst ttsResponseSchema = z.object({\n status: z.string().nullish(),\n data: z\n .object({\n audio_file: z.string().nullish(),\n // Some deployments may return base64 directly\n audio: z.string().nullish(),\n audio_base64: z.string().nullish(),\n })\n .nullish(),\n});\n\nexport type KrutrimSpeechSettings = {\n /**\n * Speaker voice.\n * @default \"female\"\n */\n speaker?: 'female' | 'male';\n};\n\n/**\n * Lightweight Bhashik Text-to-Speech model (`/api/v1/languagelabs/tts`).\n *\n * Note: The API often returns a download URL rather than raw audio bytes.\n * The model downloads that URL when needed so `generateSpeech` receives audio data.\n */\nexport class KrutrimSpeechModel implements SpeechModelV3 {\n readonly specificationVersion = 'v3';\n readonly modelId = 'Krutrim-TTS';\n\n private readonly languageCode: BhashikLanguageCode;\n private readonly settings: KrutrimSpeechSettings;\n private readonly config: KrutrimConfig;\n\n constructor(\n language: IndicLanguageCode | BhashikLanguageCode | string,\n settings: KrutrimSpeechSettings = {},\n config: KrutrimConfig,\n ) {\n const mapped = toBhashikLanguageCode(language);\n if (!mapped) {\n // Allow direct short codes like \"hin\"\n if (\n ['eng', 'guj', 'ben', 'hin', 'kan', 'mal', 'mar', 'tam', 'tel'].includes(\n language,\n )\n ) {\n this.languageCode = language as BhashikLanguageCode;\n } else {\n throw new Error(\n `Unsupported TTS language \"${language}\". Use hi-IN, ta-IN, eng, hin, etc.`,\n );\n }\n } else {\n this.languageCode = mapped;\n }\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate({\n text,\n headers,\n abortSignal,\n }: Parameters<SpeechModelV3['doGenerate']>[0]): Promise<\n Awaited<ReturnType<SpeechModelV3['doGenerate']>>\n > {\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: this.config.languageLabsUrl('/languagelabs/tts'),\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n input_text: text,\n input_language: this.languageCode,\n input_speaker: this.settings.speaker ?? 'female',\n },\n failedResponseHandler: krutrimFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(ttsResponseSchema),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n let audioData: string | Uint8Array | undefined =\n response.data?.audio_base64 ?? response.data?.audio ?? undefined;\n\n const audioUrl = response.data?.audio_file;\n if (!audioData && audioUrl) {\n const fetchFn = this.config.fetch ?? globalThis.fetch;\n const audioResponse = await fetchFn(audioUrl, {\n headers: this.config.headers() as HeadersInit,\n signal: abortSignal,\n });\n if (!audioResponse.ok) {\n throw new Error(\n `Failed to download TTS audio from ${audioUrl}: ${audioResponse.status}`,\n );\n }\n const buffer = new Uint8Array(await audioResponse.arrayBuffer());\n audioData = buffer;\n }\n\n if (!audioData) {\n throw new Error(\n 'Krutrim TTS response did not include audio data or a downloadable audio_file URL.',\n );\n }\n\n return {\n audio: audioData,\n warnings: [],\n response: {\n headers: responseHeaders,\n body: rawValue,\n timestamp: new Date(),\n modelId: this.modelId,\n },\n };\n }\n}\n","import type { TranscriptionModelV3 } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport type { KrutrimConfig } from '../config';\nimport { krutrimFailedResponseHandler } from '../error';\nimport {\n type BhashikLanguageCode,\n type IndicLanguageCode,\n toBhashikLanguageCode,\n} from '../indic/languages';\n\nconst sttResponseSchema = z.object({\n status: z.string().nullish(),\n data: z\n .object({\n text: z.union([z.array(z.string()), z.string()]).nullish(),\n })\n .nullish(),\n});\n\n/**\n * Bhashik Speech-to-Text via upload (`/api/v1/languagelabs/transcribe/upload`).\n * Ideal for short mp3/wav clips (Krutrim-Dhwani family).\n */\nexport class KrutrimTranscriptionModel implements TranscriptionModelV3 {\n readonly specificationVersion = 'v3';\n readonly modelId = 'Krutrim-Dhwani';\n\n private readonly languageCode: BhashikLanguageCode;\n private readonly config: KrutrimConfig;\n\n constructor(\n language: IndicLanguageCode | BhashikLanguageCode | string,\n config: KrutrimConfig,\n ) {\n const mapped = toBhashikLanguageCode(language);\n if (!mapped) {\n if (\n ['eng', 'guj', 'ben', 'hin', 'kan', 'mal', 'mar', 'tam', 'tel'].includes(\n language,\n )\n ) {\n this.languageCode = language as BhashikLanguageCode;\n } else {\n throw new Error(\n `Unsupported STT language \"${language}\". Use hi-IN, ta-IN, eng, hin, etc.`,\n );\n }\n } else {\n this.languageCode = mapped;\n }\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate({\n audio,\n mediaType,\n headers,\n abortSignal,\n }: Parameters<TranscriptionModelV3['doGenerate']>[0]): Promise<\n Awaited<ReturnType<TranscriptionModelV3['doGenerate']>>\n > {\n const formData = new FormData();\n\n let blob: Blob;\n if (typeof audio === 'string') {\n // base64\n const binary = Buffer.from(audio, 'base64');\n blob = new Blob([binary], { type: mediaType ?? 'audio/wav' });\n } else {\n blob = new Blob([audio as BlobPart], {\n type: mediaType ?? 'audio/wav',\n });\n }\n\n formData.append('file', blob, 'audio.wav');\n formData.append('lang_code', this.languageCode);\n\n // Strip content-type so fetch sets multipart boundary.\n const baseHeaders = { ...this.config.headers(), ...headers };\n delete baseHeaders['Content-Type'];\n delete baseHeaders['content-type'];\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postToApi({\n url: this.config.languageLabsUrl('/languagelabs/transcribe/upload'),\n headers: combineHeaders(baseHeaders, undefined),\n body: {\n content: formData,\n values: formData,\n },\n failedResponseHandler: krutrimFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(sttResponseSchema),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const textField = response.data?.text;\n const text = Array.isArray(textField)\n ? textField.join(' ')\n : (textField ?? '');\n\n return {\n text,\n segments: [],\n language: this.languageCode,\n durationInSeconds: undefined,\n warnings: [],\n response: {\n headers: responseHeaders,\n body: rawValue,\n timestamp: new Date(),\n modelId: this.modelId,\n },\n };\n }\n}\n","import {\n type LanguageModelV3,\n type LanguageModelV3CallOptions,\n type LanguageModelV3Content,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport type { KrutrimConfig } from '../config';\nimport { krutrimFailedResponseHandler } from '../error';\nimport {\n type IndicLanguageCode,\n toTranslationLanguageCode,\n} from '../indic/languages';\n\nconst translationResponseSchema = z.object({\n status: z.string().nullish(),\n data: z\n .object({\n translated_text: z.string().nullish(),\n })\n .nullish(),\n});\n\nexport type TranslationSettings = {\n /**\n * Source language (BCP-47 like `hi-IN`, short `hin`, or `hin_Deva`).\n */\n from: IndicLanguageCode | string;\n /**\n * Target language (BCP-47 like `en-IN`, short `eng`, or `eng_Latn`).\n */\n to: IndicLanguageCode | string;\n /**\n * Translation model.\n * @default \"krutrim-translate-v1.0\"\n */\n model?: string;\n};\n\nfunction extractUserText(options: LanguageModelV3CallOptions): string {\n const prompt = options.prompt;\n if (!Array.isArray(prompt)) {\n return '';\n }\n const parts: string[] = [];\n for (const message of prompt) {\n if (message.role === 'user') {\n for (const part of message.content) {\n if (part.type === 'text') {\n parts.push(part.text);\n }\n }\n }\n }\n return parts.join('\\n');\n}\n\n/**\n * Bhashik text translation as a LanguageModelV3 (works with `generateText`).\n * Only translates user/prompt text — not system or assistant messages.\n */\nexport class KrutrimTranslationModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n readonly modelId: string;\n readonly provider: string;\n\n private readonly settings: TranslationSettings;\n private readonly config: KrutrimConfig;\n\n constructor(settings: TranslationSettings, config: KrutrimConfig) {\n this.settings = settings;\n this.config = config;\n this.provider = config.provider;\n this.modelId = settings.model ?? 'krutrim-translate-v1.0';\n }\n\n get supportedUrls(): Record<string, RegExp[]> {\n return {};\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n const text = extractUserText(options);\n if (!text.trim()) {\n throw new Error('Translation requires a non-empty user prompt or message.');\n }\n\n const src = toTranslationLanguageCode(this.settings.from);\n const tgt = toTranslationLanguageCode(this.settings.to);\n\n const body = {\n text,\n src_language: src,\n tgt_language: tgt,\n model: this.modelId,\n };\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: this.config.languageLabsUrl('/languagelabs/translation'),\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: krutrimFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n translationResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const translated = response.data?.translated_text ?? '';\n const content: LanguageModelV3Content[] = [\n { type: 'text', text: translated },\n ];\n\n return {\n content,\n finishReason: { unified: 'stop', raw: 'stop' },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n providerMetadata: {\n krutrim: {\n src_language: src,\n tgt_language: tgt,\n model: this.modelId,\n },\n },\n warnings: [\n {\n type: 'other',\n message:\n 'translation only processes prompt / user messages (not system or assistant).',\n },\n ],\n request: { body },\n response: {\n headers: responseHeaders,\n body: rawValue,\n modelId: this.modelId,\n timestamp: new Date(),\n },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n const result = await this.doGenerate(options);\n const textPart = result.content.find((c) => c.type === 'text');\n const text = textPart && textPart.type === 'text' ? textPart.text : '';\n\n const stream = new ReadableStream({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings: result.warnings });\n controller.enqueue({ type: 'text-start', id: 'text-0' });\n controller.enqueue({ type: 'text-delta', id: 'text-0', delta: text });\n controller.enqueue({ type: 'text-end', id: 'text-0' });\n controller.enqueue({\n type: 'finish',\n finishReason: result.finishReason,\n usage: result.usage,\n providerMetadata: result.providerMetadata,\n });\n controller.close();\n },\n });\n\n return {\n stream,\n request: result.request,\n response: result.response,\n };\n }\n}\n","/**\n * Popular chat / text-generation model IDs on Krutrim Cloud.\n *\n * Exact IDs can change as the catalogue is updated — always confirm in the\n * [Model Catalogue](https://cloud.olakrutrim.com) if a call fails with\n * \"invalid model\".\n *\n * Free-form strings are still accepted via `ChatModelId`.\n */\nexport const KRUTRIM_CHAT_MODELS = {\n /** Krutrim's flagship Indic-capable model (v1). */\n krutrim1: 'Krutrim-1',\n /** Krutrim's next-generation text model. */\n krutrim2: 'Krutrim-2',\n /** Lowercase alias accepted by many OpenAI-compatible samples. */\n krutrim1Lower: 'krutrim-1',\n krutrim2Lower: 'krutrim-2',\n\n // Open models commonly hosted on Krutrim Cloud\n llama33_70b: 'Llama-3.3-70B-Instruct',\n llama32_11b_vision: 'Llama-3.2-11B-Vision-Instruct',\n llama4_maverick: 'Llama-4-Maverick-17B-128E-Instruct',\n llama3_8b: 'Meta-Llama-3-8B-Instruct',\n mistral7b: 'Mistral-7B-v0.2',\n mistral7bInstruct: 'Mistral-7B-Instruct',\n qwen3_32b: 'Qwen3-32B',\n qwen3_30b: 'Qwen3-30B-A3B',\n phi4_reasoning: 'Phi-4-reasoning-plus',\n deepseekR1: 'DeepSeek-R1',\n deepseekR1_70b: 'DeepSeek-R1-Distill-Llama-70B',\n deepseekR1_8b: 'DeepSeek-R1-Distill-Llama-8B',\n gemma3_27b: 'gemma-3-27b-it',\n spectreV2: 'Krutrim-spectre-v2',\n} as const;\n\n/**\n * Embedding model IDs (text-to-embedding).\n */\nexport const KRUTRIM_EMBEDDING_MODELS = {\n /** Krutrim embedding model. */\n vyakyarth: 'Vyakyarth',\n /** Alternative Krutrim embedding model. */\n bhasantarit: 'Bhasantarit',\n} as const;\n\n/**\n * Speech model IDs.\n */\nexport const KRUTRIM_SPEECH_MODELS = {\n /** Krutrim Speech-to-Text. */\n dhwani: 'Krutrim-Dhwani',\n /** Krutrim Text-to-Speech. */\n tts: 'Krutrim-TTS',\n} as const;\n\n/**\n * Multimodal / vision model IDs.\n */\nexport const KRUTRIM_VISION_MODELS = {\n chitrapathak: 'chitrapathak',\n llama32_11b_vision: 'Llama-3.2-11B-Vision-Instruct',\n llama4_maverick: 'Llama-4-Maverick-17B-128E-Instruct',\n gemma3_27b: 'gemma-3-27b-it',\n} as const;\n\n/**\n * Friendly aliases → canonical catalogue model IDs.\n *\n * Use {@link resolveModelId} so `krutrim('krutrim-2')` and\n * `krutrim('Krutrim-2')` both work.\n */\nexport const MODEL_ALIASES: Record<string, string> = {\n // Native Krutrim\n krutrim: 'Krutrim-2',\n 'krutrim-1': 'Krutrim-1',\n 'krutrim-2': 'Krutrim-2',\n krutrim1: 'Krutrim-1',\n krutrim2: 'Krutrim-2',\n 'Krutrim-1': 'Krutrim-1',\n 'Krutrim-2': 'Krutrim-2',\n\n // Speech\n dhwani: 'Krutrim-Dhwani',\n 'krutrim-dhwani': 'Krutrim-Dhwani',\n 'Krutrim-Dhwani': 'Krutrim-Dhwani',\n tts: 'Krutrim-TTS',\n 'krutrim-tts': 'Krutrim-TTS',\n 'Krutrim-TTS': 'Krutrim-TTS',\n\n // Embeddings\n vyakyarth: 'Vyakyarth',\n Vyakyarth: 'Vyakyarth',\n bhasantarit: 'Bhasantarit',\n Bhasantarit: 'Bhasantarit',\n\n // Common open-model shortcuts\n 'llama-3.3-70b': 'Llama-3.3-70B-Instruct',\n 'llama3.3-70b': 'Llama-3.3-70B-Instruct',\n 'llama-3.2-11b-vision': 'Llama-3.2-11B-Vision-Instruct',\n 'mistral-7b': 'Mistral-7B-v0.2',\n 'deepseek-r1': 'DeepSeek-R1',\n 'qwen3-32b': 'Qwen3-32B',\n 'phi-4': 'Phi-4-reasoning-plus',\n};\n\n/**\n * Resolve a friendly alias or passthrough an exact catalogue ID.\n */\nexport function resolveModelId(modelId: string): string {\n return MODEL_ALIASES[modelId] ?? MODEL_ALIASES[modelId.toLowerCase()] ?? modelId;\n}\n\n/**\n * Typed chat model IDs with autocomplete for popular models.\n */\nexport type ChatModelId =\n | (typeof KRUTRIM_CHAT_MODELS)[keyof typeof KRUTRIM_CHAT_MODELS]\n | keyof typeof MODEL_ALIASES\n | (string & {});\n\n/**\n * Typed embedding model IDs.\n */\nexport type EmbeddingModelId =\n | (typeof KRUTRIM_EMBEDDING_MODELS)[keyof typeof KRUTRIM_EMBEDDING_MODELS]\n | (string & {});\n\n/**\n * Typed speech model IDs.\n */\nexport type SpeechModelId =\n | (typeof KRUTRIM_SPEECH_MODELS)[keyof typeof KRUTRIM_SPEECH_MODELS]\n | (string & {});\n","import {\n type LanguageModelV3Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\nimport type { KrutrimChatPrompt } from './types';\n\nexport function convertToChatMessages(\n prompt: LanguageModelV3Prompt,\n): KrutrimChatPrompt {\n const messages: KrutrimChatPrompt = [];\n\n for (const message of prompt) {\n switch (message.role) {\n case 'system': {\n messages.push({ role: 'system', content: message.content });\n break;\n }\n\n case 'user': {\n if (message.content.length === 1 && message.content[0].type === 'text') {\n messages.push({\n role: 'user',\n content: message.content[0].text,\n });\n break;\n }\n\n messages.push({\n role: 'user',\n content: message.content.map((part) => {\n switch (part.type) {\n case 'text': {\n return { type: 'text' as const, text: part.text };\n }\n case 'file': {\n let imageData: string;\n if (typeof part.data === 'string') {\n if (\n part.data.startsWith('http://') ||\n part.data.startsWith('https://') ||\n part.data.startsWith('data:')\n ) {\n imageData = part.data;\n } else {\n imageData = `data:${part.mediaType};base64,${part.data}`;\n }\n } else if (part.data instanceof URL) {\n imageData = part.data.toString();\n } else {\n imageData = `data:${part.mediaType};base64,${convertUint8ArrayToBase64(part.data)}`;\n }\n\n return {\n type: 'image_url' as const,\n image_url: { url: imageData },\n };\n }\n default: {\n const _exhaustive: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `Unsupported content part type: ${JSON.stringify(_exhaustive)}`,\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 message.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:\n typeof part.input === 'string'\n ? part.input\n : JSON.stringify(part.input),\n },\n });\n break;\n }\n case 'tool-result': {\n break;\n }\n default: {\n // reasoning / file / etc. — skip for OpenAI-compat mapping\n break;\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: text || null,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n break;\n }\n\n case 'tool': {\n for (const part of message.content) {\n if (part.type === 'tool-result') {\n messages.push({\n role: 'tool',\n tool_call_id: part.toolCallId,\n content: JSON.stringify(part.output),\n });\n }\n }\n break;\n }\n\n default: {\n const _exhaustive: never = message;\n throw new Error(`Unsupported role: ${JSON.stringify(_exhaustive)}`);\n }\n }\n }\n\n return messages;\n}\n","import {\n type LanguageModelV3FunctionTool,\n type LanguageModelV3ProviderTool,\n type LanguageModelV3ToolChoice,\n type SharedV3Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\ntype KrutrimTools = Array<{\n type: 'function';\n function: {\n name: string;\n description: string | undefined;\n parameters: unknown;\n };\n}>;\n\nexport function prepareTools({\n tools,\n toolChoice,\n}: {\n tools?: Array<LanguageModelV3FunctionTool | LanguageModelV3ProviderTool>;\n toolChoice?: LanguageModelV3ToolChoice;\n}): {\n tools: KrutrimTools | undefined;\n tool_choice:\n | { type: 'function'; function: { name: string } }\n | 'auto'\n | 'none'\n | 'required'\n | undefined;\n toolWarnings: SharedV3Warning[];\n} {\n const finalTools = tools?.length ? tools : undefined;\n const toolWarnings: SharedV3Warning[] = [];\n\n if (finalTools == null) {\n return { tools: undefined, tool_choice: undefined, toolWarnings };\n }\n\n const krutrimTools: KrutrimTools = [];\n\n for (const tool of finalTools) {\n if (tool.type === 'provider') {\n toolWarnings.push({ type: 'unsupported', feature: tool.name });\n } else {\n krutrimTools.push({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n },\n });\n }\n }\n\n if (toolChoice == null) {\n return { tools: krutrimTools, 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: krutrimTools, tool_choice: type, toolWarnings };\n case 'tool':\n return {\n tools: krutrimTools,\n tool_choice: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n toolWarnings,\n };\n default: {\n const _exhaustive: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `Unsupported tool choice type: ${_exhaustive}`,\n });\n }\n }\n}\n","import { z } from 'zod';\nimport type { ChatModelId } from '../models';\nimport { krutrimErrorDataSchema } from '../error';\n\nexport type { ChatModelId };\n\n/**\n * Optional provider-side chat settings (also via `providerOptions.krutrim`).\n */\nexport type ChatSettings = {\n /**\n * How many chat completion choices to generate per input message.\n * You are billed for all generated tokens — keep `n` at `1` when possible.\n */\n n?: number;\n\n /**\n * Unique end-user identifier for abuse monitoring (OpenAI-compatible `user`).\n */\n user?: string;\n\n /**\n * Reasoning effort for reasoning models (provider-dependent).\n */\n reasoningEffort?: 'low' | 'medium' | 'high';\n};\n\nexport const chatSettingsSchema = z.object({\n n: z.number().min(1).max(128).nullish(),\n user: z.string().nullish(),\n reasoningEffort: z.enum(['low', 'medium', 'high']).nullish(),\n // snake_case passthrough for raw API fields if set via providerOptions\n reasoning_effort: z.enum(['low', 'medium', 'high']).nullish(),\n});\n\nexport const chatResponseSchema = z.object({\n id: z.string().nullish(),\n created: z.number().nullish(),\n model: z.string().nullish(),\n object: z.string().nullish(),\n system_fingerprint: z.string().nullish(),\n choices: z.array(\n z.object({\n index: z.number(),\n finish_reason: z.string().nullish(),\n logprobs: z.object({}).nullish(),\n message: z.object({\n content: z.string().nullish(),\n reasoning_content: z.string().nullish(),\n refusal: z.string().nullish(),\n role: 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 }),\n ),\n usage: z\n .object({\n completion_tokens: z.number().nullish(),\n prompt_tokens: z.number().nullish(),\n total_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\nexport const chatChunkSchema = 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 reasoning_content: z.string().nullish(),\n role: 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 usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n completion_tokens: z.number().nullish(),\n total_tokens: z.number().nullish(),\n })\n .nullish(),\n }),\n krutrimErrorDataSchema,\n]);\n","import type { LanguageModelV3FinishReason } from '@ai-sdk/provider';\n\nexport function mapFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason['unified'] {\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 'other';\n }\n}\n\nexport 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 {\n InvalidResponseDataError,\n type LanguageModelV3,\n type LanguageModelV3CallOptions,\n type LanguageModelV3Content,\n type LanguageModelV3FinishReason,\n type LanguageModelV3StreamPart,\n type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n type ParseResult,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport type { z } from 'zod';\nimport type { KrutrimConfig } from '../config';\nimport { krutrimFailedResponseHandler } from '../error';\nimport { resolveModelId } from '../models';\nimport { convertToChatMessages } from './convert-to-chat-messages';\nimport { prepareTools } from './prepare-tools';\nimport {\n type ChatModelId,\n type ChatSettings,\n chatChunkSchema,\n chatResponseSchema,\n chatSettingsSchema,\n} from './settings';\nimport { getResponseMetadata, mapFinishReason } from './utils';\n\nexport class KrutrimChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\n\n readonly modelId: string;\n readonly settings: ChatSettings;\n\n private readonly config: KrutrimConfig;\n private readonly resolvedModelId: string;\n\n constructor(\n modelId: ChatModelId,\n settings: ChatSettings,\n config: KrutrimConfig,\n ) {\n this.modelId = modelId;\n this.resolvedModelId = resolveModelId(String(modelId));\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n get supportedUrls(): Record<string, RegExp[]> {\n // Vision models may accept HTTPS image URLs via image_url parts.\n return {\n 'image/*': [/^https?:\\/\\/.+/i],\n };\n }\n\n private async getArgs(\n options: LanguageModelV3CallOptions & { stream: boolean },\n ) {\n const {\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n tools,\n toolChoice,\n providerOptions,\n stream,\n } = options;\n\n const warnings: SharedV3Warning[] = [];\n\n if (topK != null) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n\n const krutrimOptions = await parseProviderOptions({\n provider: 'krutrim',\n providerOptions: {\n krutrim: {\n ...providerOptions?.krutrim,\n ...this.settings,\n },\n },\n schema: chatSettingsSchema,\n });\n\n const reasoningEffort =\n krutrimOptions?.reasoningEffort ?? krutrimOptions?.reasoning_effort;\n\n const baseArgs: Record<string, unknown> = {\n model: this.resolvedModelId,\n messages: convertToChatMessages(prompt),\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n n: krutrimOptions?.n ?? undefined,\n user: krutrimOptions?.user ?? undefined,\n response_format:\n stream === false && responseFormat?.type === 'json'\n ? responseFormat.schema\n ? {\n type: 'json_schema',\n json_schema: {\n name: responseFormat.name ?? 'response',\n description: responseFormat.description,\n schema: responseFormat.schema,\n strict: true,\n },\n }\n : { type: 'json_object' }\n : undefined,\n };\n\n if (reasoningEffort) {\n baseArgs.reasoning_effort = reasoningEffort;\n }\n\n let toolsArg: ReturnType<typeof prepareTools> | null = null;\n\n if (tools && tools.length > 0) {\n toolsArg = prepareTools({ tools, toolChoice });\n }\n\n // Fallback for providers without json_schema: force a single function tool.\n if (responseFormat?.type === 'json' && responseFormat.schema) {\n // Prefer native json_schema above; only use tool fallback if needed later.\n // Keep tools path available when tools were also requested.\n if (toolsArg == null && stream === false) {\n // leave json_schema in place — most OpenAI-compatible stacks support it\n }\n }\n\n return {\n args: {\n ...baseArgs,\n ...(toolsArg\n ? {\n tools: toolsArg.tools,\n tool_choice: toolsArg.tool_choice,\n }\n : {}),\n },\n warnings: [...warnings, ...(toolsArg?.toolWarnings ?? [])],\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n const { args, warnings } = await this.getArgs({\n ...options,\n stream: false,\n });\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.resolvedModelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: krutrimFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(chatResponseSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const choice = response.choices[0];\n\n if (!choice) {\n throw new InvalidResponseDataError({\n data: response,\n message: 'No choices returned in Krutrim chat completion response',\n });\n }\n\n const content: LanguageModelV3Content[] = [];\n\n if (choice.message.content) {\n content.push({ type: 'text', text: choice.message.content });\n }\n\n if (choice.message.reasoning_content) {\n content.push({ type: 'reasoning', text: choice.message.reasoning_content });\n }\n\n if (choice.message.tool_calls?.length) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id ?? (this.config.generateId ?? generateId)(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n });\n }\n }\n\n return {\n content,\n finishReason: {\n unified: mapFinishReason(choice.finish_reason),\n raw: choice.finish_reason ?? undefined,\n },\n usage: {\n inputTokens: {\n total: response.usage?.prompt_tokens ?? undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: response.usage?.completion_tokens ?? undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n providerMetadata: {\n krutrim: {\n system_fingerprint: response.system_fingerprint,\n resolvedModelId: this.resolvedModelId,\n },\n },\n warnings,\n request: { body: args },\n response: {\n headers: responseHeaders,\n body: rawResponse,\n id: response.id ?? undefined,\n modelId: response.model ?? undefined,\n timestamp: response.created\n ? new Date(response.created * 1000)\n : undefined,\n },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n const { args, warnings } = await this.getArgs({ ...options, stream: true });\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.resolvedModelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: { ...args, stream: true },\n failedResponseHandler: krutrimFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(chatChunkSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const toolCalls: Array<{\n id: string;\n name: string;\n arguments: string;\n hasFinished: boolean;\n }> = [];\n\n let finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n let usage: {\n inputTokens: {\n total: number | undefined;\n noCache: number | undefined;\n cacheRead: number | undefined;\n cacheWrite: number | undefined;\n };\n outputTokens: {\n total: number | undefined;\n text: number | undefined;\n reasoning: number | undefined;\n };\n } = {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n let isFirstChunk = true;\n let textStarted = false;\n let reasoningStarted = false;\n const self = this;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof chatChunkSchema>>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n controller.enqueue({ type: 'stream-start', warnings });\n },\n transform(chunk, controller) {\n if (!chunk.success) {\n finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n if ('error' in value && value.error != null && !('choices' in value)) {\n finishReason = { unified: 'error', raw: undefined };\n controller.enqueue({ type: 'error', error: value.error });\n return;\n }\n\n if (!('choices' in value)) {\n return;\n }\n\n if (isFirstChunk) {\n isFirstChunk = false;\n const metadata = getResponseMetadata(value);\n if (metadata.id || metadata.timestamp || metadata.modelId) {\n controller.enqueue({ type: 'response-metadata', ...metadata });\n }\n }\n\n if (value.usage != null) {\n usage = {\n inputTokens: {\n total: value.usage.prompt_tokens ?? undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: value.usage.completion_tokens ?? undefined,\n text: undefined,\n reasoning: undefined,\n },\n };\n }\n\n const choice = value.choices[0];\n if (choice?.finish_reason != null) {\n finishReason = {\n unified: mapFinishReason(choice.finish_reason),\n raw: choice.finish_reason,\n };\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n const reasoningText = delta.reasoning ?? delta.reasoning_content;\n\n if (reasoningText != null && reasoningText.length > 0) {\n if (!reasoningStarted) {\n reasoningStarted = true;\n controller.enqueue({\n type: 'reasoning-start',\n id: 'reasoning-0',\n });\n }\n controller.enqueue({\n type: 'reasoning-delta',\n id: 'reasoning-0',\n delta: reasoningText,\n });\n }\n\n if (delta.content != null && delta.content.length > 0) {\n if (!textStarted) {\n textStarted = true;\n controller.enqueue({ type: 'text-start', id: 'text-0' });\n }\n controller.enqueue({\n type: 'text-delta',\n id: 'text-0',\n delta: 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.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected tool call 'id' to be a string.`,\n });\n }\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected tool call 'function.name' to be a string.`,\n });\n }\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n hasFinished: false,\n };\n\n const toolCall = toolCalls[index];\n controller.enqueue({\n type: 'tool-input-start',\n id: toolCall.id,\n toolName: toolCall.name,\n });\n\n if (toolCall.arguments.length > 0) {\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCall.arguments,\n });\n }\n\n if (isParsableJson(toolCall.arguments)) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n input: toolCall.arguments,\n });\n toolCall.hasFinished = true;\n }\n continue;\n }\n\n const toolCall = toolCalls[index];\n if (toolCall.hasFinished) continue;\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.arguments += toolCallDelta.function.arguments;\n controller.enqueue({\n type: 'tool-input-delta',\n id: toolCall.id,\n delta: toolCallDelta.function.arguments,\n });\n }\n\n if (\n toolCall.name != null &&\n toolCall.arguments != null &&\n isParsableJson(toolCall.arguments)\n ) {\n controller.enqueue({\n type: 'tool-input-end',\n id: toolCall.id,\n });\n controller.enqueue({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n input: toolCall.arguments,\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n flush(controller) {\n if (reasoningStarted) {\n controller.enqueue({ type: 'reasoning-end', id: 'reasoning-0' });\n }\n if (textStarted) {\n controller.enqueue({ type: 'text-end', id: 'text-0' });\n }\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n providerMetadata: {\n krutrim: {\n resolvedModelId: self.resolvedModelId,\n },\n },\n });\n },\n }),\n ),\n request: { body: args },\n response: { headers: responseHeaders },\n };\n }\n}\n","import type { FetchFunction } from '@ai-sdk/provider-utils';\n\n/**\n * Default OpenAI-compatible base URL for Krutrim Cloud chat, embeddings, etc.\n * @see https://docs.cloud.olakrutrim.com/basics/ai-studio/ai-jobs/inferencing\n */\nexport const KRUTRIM_DEFAULT_BASE_URL = 'https://cloud.olakrutrim.com/v1';\n\n/**\n * Base host used for Language Labs / Bhashik endpoints\n * (`/api/v1/languagelabs/*`).\n */\nexport const KRUTRIM_DEFAULT_API_HOST = 'https://cloud.olakrutrim.com';\n\n/**\n * Internal configuration shared by model implementations.\n */\nexport type KrutrimConfig = {\n provider: string;\n /**\n * Build a full request URL for the OpenAI-compatible API.\n */\n url: (options: { modelId: string; path: string }) => string;\n /**\n * Build a full request URL for Language Labs endpoints.\n */\n languageLabsUrl: (path: string) => string;\n headers: () => Record<string, string | undefined>;\n fetch?: FetchFunction;\n generateId?: () => string;\n};\n\n/**\n * Options for {@link createKrutrim}.\n */\nexport interface KrutrimProviderSettings {\n /**\n * Base URL for OpenAI-compatible API calls (`/chat/completions`, `/embeddings`).\n * @default \"https://cloud.olakrutrim.com/v1\"\n */\n baseURL?: string;\n\n /**\n * Root host for Language Labs / Bhashik endpoints.\n * @default \"https://cloud.olakrutrim.com\"\n */\n apiHost?: string;\n\n /**\n * API key for authenticating requests.\n * Defaults to `process.env.KRUTRIM_API_KEY` or\n * `process.env.KRUTRIM_CLOUD_API_KEY`.\n */\n apiKey?: string;\n\n /**\n * Custom headers merged into every request (can override defaults).\n */\n headers?: Record<string, string>;\n\n /**\n * Custom `fetch` implementation for middleware, testing, or edge runtimes.\n */\n fetch?: FetchFunction;\n\n /**\n * Optional ID generator used for tool call IDs when the API omits them.\n */\n generateId?: () => string;\n}\n\n/**\n * Resolve the Krutrim API key from options or environment variables.\n *\n * Checks (in order):\n * 1. Explicit `apiKey` option\n * 2. `KRUTRIM_API_KEY`\n * 3. `KRUTRIM_CLOUD_API_KEY` (official Krutrim Cloud SDK name)\n */\nexport function resolveKrutrimApiKey(\n apiKey: string | undefined,\n): string | undefined {\n if (apiKey && apiKey.trim().length > 0) {\n return apiKey;\n }\n\n if (typeof process === 'undefined' || !process.env) {\n return undefined;\n }\n\n return (\n process.env.KRUTRIM_API_KEY?.trim() ||\n process.env.KRUTRIM_CLOUD_API_KEY?.trim() ||\n undefined\n );\n}\n","import type { EmbeddingModelV3 } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport type { KrutrimConfig } from '../config';\nimport { krutrimFailedResponseHandler } from '../error';\nimport { resolveModelId, type EmbeddingModelId } from '../models';\n\nconst embeddingResponseSchema = z.object({\n object: z.string().nullish(),\n data: z.array(\n z.object({\n object: z.string().nullish(),\n embedding: z.array(z.number()),\n index: z.number(),\n }),\n ),\n model: z.string().nullish(),\n usage: z\n .object({\n prompt_tokens: z.number().nullish(),\n total_tokens: z.number().nullish(),\n })\n .nullish(),\n});\n\n/**\n * OpenAI-compatible embedding model for Krutrim (Vyakyarth, Bhasantarit, etc.).\n */\nexport class KrutrimEmbeddingModel implements EmbeddingModelV3 {\n readonly specificationVersion = 'v3';\n readonly modelId: EmbeddingModelId;\n readonly maxEmbeddingsPerCall = 32;\n readonly supportsParallelCalls = true;\n\n private readonly config: KrutrimConfig;\n private readonly resolvedModelId: string;\n\n constructor(modelId: EmbeddingModelId, config: KrutrimConfig) {\n this.modelId = modelId;\n this.resolvedModelId = resolveModelId(modelId);\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV3['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>\n > {\n const krutrimOptions = providerOptions?.krutrim as\n | { dimensions?: number; user?: string }\n | undefined;\n\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url: this.config.url({\n path: '/embeddings',\n modelId: this.resolvedModelId,\n }),\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n model: this.resolvedModelId,\n input: values,\n dimensions: krutrimOptions?.dimensions,\n user: krutrimOptions?.user,\n },\n failedResponseHandler: krutrimFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(embeddingResponseSchema),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n embeddings: response.data\n .slice()\n .sort((a, b) => a.index - b.index)\n .map((item) => item.embedding),\n usage: response.usage?.total_tokens\n ? { tokens: response.usage.total_tokens }\n : undefined,\n warnings: [],\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n","import {\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { KrutrimLanguageDetectionModel } from './bhashik/language-detection';\nimport {\n KrutrimSpeechModel,\n type KrutrimSpeechSettings,\n} from './bhashik/speech-model';\nimport { KrutrimTranscriptionModel } from './bhashik/transcription-model';\nimport {\n KrutrimTranslationModel,\n type TranslationSettings,\n} from './bhashik/translation';\nimport { KrutrimChatLanguageModel } from './chat/language-model';\nimport type { ChatModelId, ChatSettings } from './chat/settings';\nimport {\n KRUTRIM_DEFAULT_API_HOST,\n KRUTRIM_DEFAULT_BASE_URL,\n type KrutrimProviderSettings,\n resolveKrutrimApiKey,\n} from './config';\nimport { KrutrimEmbeddingModel } from './embedding/embedding-model';\nimport type { BhashikLanguageCode, IndicLanguageCode } from './indic/languages';\nimport type { EmbeddingModelId } from './models';\nimport type { KrutrimProvider } from './types';\n\n/**\n * Create a Krutrim Cloud provider instance.\n *\n * @example\n * ```ts\n * import { createKrutrim } from 'krutrim-ai-sdk';\n *\n * const krutrim = createKrutrim({\n * apiKey: process.env.KRUTRIM_API_KEY,\n * // baseURL: 'https://cloud.olakrutrim.com/v1',\n * });\n * ```\n */\nexport function createKrutrim(\n options: KrutrimProviderSettings = {},\n): KrutrimProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? KRUTRIM_DEFAULT_BASE_URL;\n\n const apiHost =\n withoutTrailingSlash(options.apiHost) ?? KRUTRIM_DEFAULT_API_HOST;\n\n const getApiKey = () => {\n const resolved = resolveKrutrimApiKey(options.apiKey);\n return loadApiKey({\n apiKey: resolved,\n environmentVariableName: 'KRUTRIM_API_KEY',\n description: 'Krutrim Cloud',\n });\n };\n\n const getHeaders = () => {\n const apiKey = getApiKey();\n return {\n Authorization: `Bearer ${apiKey}`,\n 'User-Agent': 'krutrim-ai-sdk',\n ...options.headers,\n };\n };\n\n const sharedConfig = {\n headers: getHeaders,\n fetch: options.fetch,\n generateId: options.generateId ?? generateId,\n url: ({ path }: { path: string; modelId: string }) => `${baseURL}${path}`,\n languageLabsUrl: (path: string) => {\n const normalized = path.startsWith('/') ? path : `/${path}`;\n return `${apiHost}/api/v1${normalized}`;\n },\n };\n\n const createChatModel = (\n modelId: ChatModelId,\n settings: ChatSettings = {},\n ) =>\n new KrutrimChatLanguageModel(modelId, settings, {\n ...sharedConfig,\n provider: 'krutrim.chat',\n });\n\n const createLanguageModel = (\n modelId: ChatModelId,\n settings?: ChatSettings,\n ) => {\n if (new.target) {\n throw new Error(\n 'The Krutrim model function cannot be called with the new keyword.',\n );\n }\n return createChatModel(modelId, settings);\n };\n\n const createEmbeddingModel = (modelId: EmbeddingModelId) =>\n new KrutrimEmbeddingModel(modelId, {\n ...sharedConfig,\n provider: 'krutrim.embedding',\n });\n\n const provider = ((modelId: ChatModelId, settings?: ChatSettings) =>\n createLanguageModel(modelId, settings)) as unknown as KrutrimProvider;\n\n provider.languageModel = createLanguageModel as KrutrimProvider['languageModel'];\n provider.chat = createChatModel as KrutrimProvider['chat'];\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n\n provider.speech = (\n language: IndicLanguageCode | BhashikLanguageCode | string,\n settings?: KrutrimSpeechSettings,\n ) =>\n new KrutrimSpeechModel(language, settings ?? {}, {\n ...sharedConfig,\n provider: 'krutrim.speech',\n });\n\n provider.transcription = (\n language: IndicLanguageCode | BhashikLanguageCode | string,\n ) =>\n new KrutrimTranscriptionModel(language, {\n ...sharedConfig,\n provider: 'krutrim.transcription',\n });\n\n provider.languageDetection = () =>\n new KrutrimLanguageDetectionModel({\n ...sharedConfig,\n provider: 'krutrim.language-detection',\n });\n\n provider.translation = (settings: TranslationSettings) =>\n new KrutrimTranslationModel(settings, {\n ...sharedConfig,\n provider: 'krutrim.translation',\n });\n\n return provider;\n}\n\n/**\n * Default Krutrim provider instance.\n *\n * Reads `KRUTRIM_API_KEY` or `KRUTRIM_CLOUD_API_KEY` from the environment.\n *\n * @example\n * ```ts\n * import { krutrim } from 'krutrim-ai-sdk';\n * import { generateText } from 'ai';\n *\n * const { text } = await generateText({\n * model: krutrim('Krutrim-2'),\n * prompt: 'Write a haiku about monsoons in Kerala.',\n * });\n * ```\n */\nexport const krutrim = createKrutrim();\n","import type { IndicLanguageCode } from './languages';\nimport { INDIC_LANGUAGES } from './languages';\n\nfunction languageLabel(code: IndicLanguageCode | string): string {\n const entry = INDIC_LANGUAGES.find((l) => l.code === code);\n if (entry) {\n return `${entry.name} (${entry.nativeName})`;\n }\n return code;\n}\n\n/**\n * System prompt that steers the model to respond in a target Indian language.\n */\nexport function indicResponsePrompt(\n language: IndicLanguageCode | string,\n options?: {\n /** Prefer native script over Latin transliteration. @default true */\n nativeScript?: boolean;\n /** Allow code-mixing (Hinglish, Tanglish, etc.). @default false */\n allowCodeMix?: boolean;\n },\n): string {\n const nativeScript = options?.nativeScript ?? true;\n const allowCodeMix = options?.allowCodeMix ?? false;\n const label = languageLabel(language);\n\n return [\n `You are a helpful assistant optimized for Indian languages and culture.`,\n `Respond primarily in ${label}.`,\n nativeScript\n ? `Prefer the language's native script over Latin transliteration unless the user writes in Latin script and clearly wants Romanized output.`\n : `Latin / Romanized script is acceptable when natural for the user.`,\n allowCodeMix\n ? `Light code-mixing with English is fine when it matches how speakers actually talk.`\n : `Avoid unnecessary English code-mixing unless the user does so first.`,\n `Be culturally aware of Indian context (festivals, geography, INR, regional nuance) without stereotyping.`,\n ].join(' ');\n}\n\n/**\n * Prompt fragment for language identification via a chat model.\n * Prefer {@link krutrim.languageDetection} (Bhashik API) when available.\n */\nexport function languageDetectionPrompt(): string {\n return [\n 'Identify the primary language of the user message.',\n 'Reply with ONLY a BCP-47 language tag such as hi-IN, ta-IN, en-IN, bn-IN, ml-IN.',\n 'If mixed, pick the dominant language. No explanation.',\n ].join(' ');\n}\n\n/**\n * Notes for apps that accept Romanized Indic input (Hinglish, etc.).\n * Attach as a system hint when users type in Latin script.\n */\nexport function transliterationNotes(targetLanguage?: IndicLanguageCode | string): string {\n const target = targetLanguage\n ? ` When responding, prefer native script for ${languageLabel(targetLanguage)} unless asked otherwise.`\n : '';\n\n return [\n 'Users may type Indian languages in Latin script (e.g. Hinglish: \"aap kaise ho\", Tanglish, etc.).',\n 'Interpret Romanized Indic phonetically; do not treat it as English only.',\n 'When the meaning is clear, reply in the same language; offer native script when helpful.',\n target,\n ]\n .join(' ')\n .trim();\n}\n\n/**\n * Lightweight system prompt for multilingual Indian customer-support agents.\n */\nexport function indicSupportAgentPrompt(options?: {\n brandName?: string;\n languages?: Array<IndicLanguageCode | string>;\n}): string {\n const brand = options?.brandName ?? 'our service';\n const langs =\n options?.languages?.map(languageLabel).join(', ') ??\n 'Hindi, English (India), and other major Indian languages';\n\n return [\n `You are a polite, efficient customer support agent for ${brand}.`,\n `You can assist in: ${langs}.`,\n `Mirror the customer's language and script when possible.`,\n `Keep answers clear, short, and actionable. Amounts should use ₹ / INR when relevant.`,\n `If you are unsure, ask a clarifying question instead of guessing personal data.`,\n ].join(' ');\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,100 @@
1
+ {
2
+ "name": "krutrim-ai-sdk",
3
+ "version": "0.1.0",
4
+ "description": "Krutrim Cloud provider for the Vercel AI SDK — chat, streaming, tools, embeddings & Indic helpers for India's sovereign AI platform",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ "./package.json": "./package.json",
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js",
14
+ "require": "./dist/index.cjs"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md",
20
+ "LICENSE",
21
+ "CHANGELOG.md"
22
+ ],
23
+ "sideEffects": false,
24
+ "scripts": {
25
+ "build": "tsup",
26
+ "build:watch": "tsup --watch",
27
+ "type-check": "tsc --noEmit",
28
+ "test": "vitest run",
29
+ "test:watch": "vitest",
30
+ "prepublishOnly": "npm run type-check && npm run test && npm run build"
31
+ },
32
+ "dependencies": {
33
+ "@ai-sdk/provider": "^3.0.0",
34
+ "@ai-sdk/provider-utils": "^4.0.0"
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "^22.10.0",
38
+ "ai": "^6.0.0",
39
+ "tsup": "^8.4.0",
40
+ "typescript": "^5.7.0",
41
+ "vitest": "^3.0.0",
42
+ "zod": "^3.25.0"
43
+ },
44
+ "peerDependencies": {
45
+ "ai": "^6.0.0",
46
+ "zod": "^3.25.0 || ^4.0.0"
47
+ },
48
+ "peerDependenciesMeta": {
49
+ "zod": {
50
+ "optional": true
51
+ }
52
+ },
53
+ "engines": {
54
+ "node": ">=18"
55
+ },
56
+ "publishConfig": {
57
+ "access": "public"
58
+ },
59
+ "repository": {
60
+ "type": "git",
61
+ "url": "git+https://github.com/aljojoby9/krutrim-ai-sdk.git"
62
+ },
63
+ "bugs": {
64
+ "url": "https://github.com/aljojoby9/krutrim-ai-sdk/issues"
65
+ },
66
+ "homepage": "https://github.com/aljojoby9/krutrim-ai-sdk#readme",
67
+ "keywords": [
68
+ "ai",
69
+ "ai-sdk",
70
+ "vercel",
71
+ "vercel-ai",
72
+ "vercel-ai-sdk",
73
+ "krutrim",
74
+ "ola-krutrim",
75
+ "olakrutrim",
76
+ "india",
77
+ "indic",
78
+ "hindi",
79
+ "bharat",
80
+ "sovereign-ai",
81
+ "llm",
82
+ "chat-completions",
83
+ "streaming",
84
+ "embeddings",
85
+ "bhashik",
86
+ "dhwani",
87
+ "openai-compatible",
88
+ "typescript",
89
+ "provider"
90
+ ],
91
+ "license": "MIT",
92
+ "author": {
93
+ "name": "aljojoby9",
94
+ "url": "https://github.com/aljojoby9"
95
+ },
96
+ "funding": {
97
+ "type": "github",
98
+ "url": "https://github.com/sponsors/aljojoby9"
99
+ }
100
+ }