mirror of
https://github.com/w1png/yandex-ai.git
synced 2026-10-19 20:20:41 +03:00
AI SDK compatible Yandex provider
- TypeScript 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .github/workflows | ||
| src | ||
| .gitignore | ||
| .npmignore | ||
| biome.json | ||
| bun.lock | ||
| LICENSE | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
Yandex AI Provider for Vercel's AI SDK
Table of Contents
Installation
npm
npm install yandex-ai
bun
bun add yandex-ai
YandexChatModel
Basic Example
import { YandexChatModel } from "./chat";
import { generateText } from "ai";
const chatModel = new YandexChatModel("yandexgpt-lite", {
folderId,
secretKey,
});
const { text } = await generateText({
model: chatModel,
prompt: "Hello!",
});
console.log(text);
Agent
import { YandexChatModel } from "./chat";
import { ToolLoopAgent, tool } from "ai";
import type { SharedV3ProviderOptions } from "@ai-sdk/provider";
import { z } from "zod";
const chatModel = new YandexChatModel("yandexgpt-lite", {
folderId,
secretKey,
});
const getUserTool = tool({
description: "Retrieves information about a user",
inputSchema: z.object({
userId: z.string(),
}),
execute: async ({ userId }) => {
return {
id: userId,
name: "Ivan",
age: 30,
};
},
});
const agent = new ToolLoopAgent({
model: chatModel,
tools: {
getUser: getUserTool,
},
instructions: "Respond to users in a friendly manner",
providerOptions: {
parallelToolCalls: true,
} satisfies YandexChatProviderOptions as unknown as SharedV3ProviderOptions,
});
const { text } = await agent.generateText({
prompt: "Hi! Get me information about the user with id 12345",
});
console.log(text);
Streaming
import { YandexChatModel } from "./chat";
import { streamText } from "ai";
const chatModel = new YandexChatModel("yandexgpt-lite", {
folderId,
secretKey,
});
const { textStream } = await streamText({
model: chatModel,
prompt: "Hello!",
});
for await (const text of textStream) {
console.log(text);
}
YandexSpeechModel
export const speechModel = new YandexSpeechModel({
folderId: folderId,
secretKey: sk,
});
const generateOptions: YandexSpeechGenerateOptions<"ermil"> = {
model: speechModel,
voice: "ermil",
text: "Привет! Меня зовут Ermil.",
outputFormat: "mp3",
instructions: "neutral",
};
const res = await generateSpeech(generateOptions);
await fs.writeFile("test.mp3", res.audio.uint8Array);
YandexImageModel
export const imageModel = new YandexImageModel("yandex-art/latest", {
folderId: folderId,
secretKey: sk,
});
const res = await generateImage({
model: imageModel,
prompt: "Draw me a cat",
aspectRatio: "16:9",
});
await fs.writeFile("cat.png", res.image.uint8Array);
YandexEmbeddingModel
export const embeddingModel = new YandexEmbeddingModel(
"text-search-doc/latest",
{
folderId,
secretKey,
},
);
const res = await embed({
model: embeddingModel,
value: "Hello world!",
});
console.log(res.embedding);