sarvam-ai-sdk
Version:
Sarvam AI Provider support for AI-SDK
204 lines (152 loc) • 5.44 kB
Markdown
# AI SDK - Sarvam Provider
The **[Sarvam provider](https://ai-sdk.dev/providers/ai-sdk-providers/sarvam)** for the [AI SDK](https://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
```
## 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-m"),
prompt: "Translate this to malayalam: 'Keep cooking, guys'",
});
console.log(text); // പാചകം തുടരൂ, സുഹൃത്തുക്കളേ
```
## Text-to-Speech
```ts
import { sarvam } from "sarvam-ai-sdk";
import { experimental_generateSpeech as generateSpeech } from "ai";
import { writeFile } from "fs/promises";
const { audio } = await generateSpeech({
model: sarvam.speech("bulbul:v2", "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 { experimental_transcribe as transcribe } from "ai";
import { readFile } from "fs/promises";
const { text } = await transcribe({
model: sarvam.transcription("saarika:v2", "ml-IN")
audio: await readFile("./src/transcript-test.wav"),
});
console.log(text); // പാചകം തുടരും സുഹൃത്തുക്കളെ
```
## Speech-to-Text-Translate
```ts
import { sarvam } from "sarvam-ai-sdk";
import { experimental_transcribe as transcribe } from "ai";
import { readFile } from "fs/promises";
const result = await transcribe({
model: sarvam.speechTranslation("saaras:v2"),
audio: await readFile("./src/transcript-test.wav"),
});
console.log(result.text); // Cooking continues, my friends
```
## Translation
> NB: Only transliterates `prompt` and `role:user` messages, not `system` not `assistant`.
```ts
import { sarvam } from "sarvam-ai-sdk";
import { generateText } from "ai";
const result = await generateText({
model: sarvam.translation({
"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 `system` not `assistant`.
```ts
import { sarvam } from "sarvam-ai-sdk";
import { generateText } from "ai";
const result = await generateText({
model: sarvam.transliterate({
from: "en-IN",
to: "ml-IN",
}),
prompt: "eda mone, happy alle?",
});
console.log(result.text); // എടാ മോനെ, ഹാപ്പി അല്ലേ?
```
## Language Identification
> NB: Only identifies `prompt` and `role:user` messages, not `system` not `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
> [!WARNING]
> Latest `sarvam-m` model isn't trained on native tool calling feature (aka JSON mode). So we simulate this with prompt engineering technique.
```ts
import { z } from "zod";
import { generateText, tool } from "ai";
import { sarvam } from "sarvam-ai-sdk";
const result = await generateText({
model: sarvam("sarvam-m", {
simulate: "tool-calling" // ⚠️ important
}),
tools: {
weather: tool({
description: "Get the weather in a location",
parameters: z.object({
location: z.string().describe("The location to get the weather for"),
}),
execute: async ({ location }) => ({
location,
temperature: 72 + Math.floor(Math.random() * 21) - 10,
}),
}),
},
system: "Your are a helpful AI",
prompt: "കൊച്ചിയിലെ കാലാവസ്ഥ എന്താണ്?",
});
console.log(result.toolResults);
```
## Generate JSON object
> [!WARNING]
> Latest `sarvam-m` model isn't trained on native JSON object generation. So we simulate this with prompt engineering technique.
```ts
import { z } from "zod";
import { sarvam } from "sarvam-ai-sdk";
import { generateObject } from 'ai';
const { object } = await generateObject({
model: sarvam("sarvam-m", {
simulate: "json-object" // ⚠️ important
}),
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(object);
```
## Documentation
Please check out the **[Sarvam provider documentation](https://ai-sdk.dev/providers/ai-sdk-providers/sarvam)** and **[Sarvam API documentation](https://docs.sarvam.ai)** for more information.