UNPKG

sarvam-ai-sdk

Version:

Sarvam provider support for Vercel's AI-SDK

230 lines (172 loc) 5.65 kB
<a href="https://github.com/sarvamai/sarvam-ai-sdk"> <img alt="cover" src="https://github.com/sarvamai/sarvam-ai-sdk/blob/master/cover.png?raw=true" /> </a> # AI SDK - Sarvam Provider The **[Sarvam provider](https://v7.ai-sdk.dev/providers/community-providers/sarvam)** for the [AI SDK](https://v7.ai-sdk.dev/docs) contains language model support for the Sarvam chat completion, Text-to-Speech and Speech-to-Text APIs. ## Setup The **[Sarvam](http://sarvam.ai)** provider is available in the `sarvam-ai-sdk` module. You can install it with ```bash npm i sarvam-ai-sdk ai@7 ``` > [!WARNING] > This package only works with Vercel AI-SDK v7, not v8. Make sure to install `ai@7` in your project. ### Version Compatibility | Sarvam AI SDK Version | Vercel AI SDK Version | |-----------------------|-----------------------| | 0.5.x (beta) | 8.x.x (beta) | | 0.4.x (current) | 7.x.x (current) | | 0.3.x | 6.x.x | | 0.2.x | 5.x.x | | 0.1.x | 4.x.x | ## Provider Instance You can import the default provider instance `sarvam` from `sarvam-ai-sdk`: ```ts import { sarvam } from "sarvam-ai-sdk"; ``` Create `.env` file with API key from **[Sarvam Dashboard](https://dashboard.sarvam.ai/)** ```bash SARVAM_API_KEY="your_api_key" ``` ## Example ```ts import { sarvam } from "sarvam-ai-sdk"; import { generateText } from "ai"; const { text } = await generateText({ model: sarvam("sarvam-30b", { reasoning_effort: "low", }), prompt: "Translate this to malayalam: 'Keep cooking, guys'", }); console.log(text); // പചക തടര, സഹതകള ``` ## Text-to-Speech ```ts import { sarvam } from "sarvam-ai-sdk"; import { generateSpeech } from "ai"; import { writeFile } from "fs/promises"; const { audio } = await generateSpeech({ model: sarvam.speech("bulbul:v3", "ml-IN"), text: "പചക തടര, സഹതകള", }); const audioBuffer = Buffer.from(audio.base64, "base64"); await writeFile("./src/transcript-test.wav", audioBuffer); ``` ## Speech-to-Text ```ts import { sarvam } from "sarvam-ai-sdk"; import { transcribe } from "ai"; import { readFile } from "fs/promises"; const { text } = await transcribe({ model: sarvam.transcription("saaras:v3", "en-IN"), audio: await readFile("./src/transcript-test.wav"), }); console.log(text); // Pachakam thudaroo, suhruthukkale. ``` ## Translation > NB: Only translates `prompt` and `role:user` messages, not `role:system` not `role:assistant`. ```ts import { sarvam } from "sarvam-ai-sdk"; import { generateText } from "ai"; const result = await generateText({ model: sarvam.translation("mayura:v1", { from: "ml-IN", to: "en-IN", }), prompt: "ഇതക ശദകണ അബന?", }); console.log(result.text); // Shouldn't we be careful about this, Ambane? ``` ## Transliterate > NB: Only transliterates `prompt` and `role:user` messages, not `role:system` not `role:assistant`. ```ts import { sarvam } from "sarvam-ai-sdk"; import { generateText } from "ai"; const result = await generateText({ model: sarvam.transliterate({ to: "ml-IN", from: "en-IN", // optional }), prompt: "eda mone, happy alle?", }); console.log(result.text); // എട മന, ഹപ അല? ``` ## Language Identification > NB: Only identifies `prompt` and `role:user` messages, not `role:system` not `role:assistant`. ```ts import { sarvam } from "sarvam-ai-sdk"; import { generateText } from "ai"; const result = await generateText({ model: sarvam.languageIdentification(), prompt: "ബദയണ സറ ഇവൻറ മയൻ", }); console.log(result.text); // ml-IN ``` ## Tool Calling ```ts import { z } from "zod"; import { generateText, tool } from "ai"; import { sarvam } from "sarvam-ai-sdk"; const result = await generateText({ model: sarvam("sarvam-30b"), tools: { weather: tool({ description: "Get the weather in a location", inputSchema: z.object({ location: z.string(), }), execute: async ({ location }) => ({ location, temperature: 72 + Math.floor(Math.random() * 21) - 10, }), }), }, instructions: "Your are a helpful AI", prompt: "കചയല കലവസ എനണ?", }); console.log(result.toolResults); ``` ## Generating Structured Outputs ```ts import { z } from "zod"; import { sarvam } from "sarvam-ai-sdk"; import { generateText, Output } from "ai"; const { output } = await generateText({ model: sarvam("sarvam-105b", { // uncomment to enable direct JSON mode // experimental_json_mode: true, }), output: Output.object({ name: "Recipe", description: "A recipe with a name, ingredients and steps", schema: z.object({ recipe: z.object({ name: z.string(), ingredients: z.array(z.string()), steps: z.array(z.string()), }), }), }), prompt: "Generate a South Indian recipe, in Malayalam", }); console.log(output); ``` ## All APIs ```ts import { sarvam } from "sarvam-ai-sdk"; // Text-to-Text + Chat Completion sarvam("sarvam-105b"); sarvam.languageModel("sarvam-30b"); // Text-to-Text + Transliteration sarvam.transliterate({ to: "ml-IN", from: "en-IN" }); // Text-to-Text + Translation sarvam.translation("mayura:v1", { from: "en-IN", to: "ml-IN" }); // Text-to-Text + Language identification sarvam.languageIdentification(); // Text-to-Speech sarvam.speech("bulbul:v3", "ml-IN"); // Speech-to-Text sarvam.transcription("saaras:v3"); ``` ## Documentation Please check out the **[Sarvam provider documentation](https://v7.ai-sdk.dev/providers/community-providers/sarvam)** and **[Sarvam API documentation](https://docs.sarvam.ai)** for more information.