Перейти к содержимому
SDK

AI SDK

Подключение Veda AI Gateway к AI SDK через провайдер @ai-sdk/openai-compatible. Генерация текста, потоковая передача, инструменты, рассуждения и изображения.

AI SDK это TypeScript-библиотека для приложений на языковых моделях. Veda подключается к ней как OpenAI-совместимый провайдер: запросы идут в формате Chat Completions на $VEDA_BASE_URL/v1. Примеры написаны для AI SDK 7.

Установка

npm install ai @ai-sdk/openai-compatible

Провайдер Veda

Создайте провайдер один раз и используйте его во всём приложении. Имя veda определяет ключ, под которым передаются настройки в providerOptions.

lib/veda.ts
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";

export const veda = createOpenAICompatible({
  name: "veda",
  apiKey: process.env.VEDA_API_KEY,
  baseURL: `${process.env.VEDA_BASE_URL}/v1`,
});

Модель выбирается идентификатором из каталога: veda("anthropic/claude-sonnet-5.5").

Генерация текста

import { generateText } from "ai";
import { veda } from "./lib/veda";

const { text, usage } = await generateText({
  model: veda("anthropic/claude-sonnet-5.5"),
  system: "Отвечай кратко.",
  prompt: "Почему небо голубое?",
});

console.log(text, usage);

Потоковая передача

import { streamText } from "ai";
import { veda } from "./lib/veda";

const result = streamText({
  model: veda("openai/gpt-6.1-sol"),
  prompt: "Напиши короткое стихотворение о море.",
});

for await (const delta of result.textStream) {
  process.stdout.write(delta);
}

Вызов инструментов

Инструменты описываются схемой Zod. stopWhen разрешает модели сделать несколько шагов: вызвать инструмент, получить результат и ответить.

import { generateText, isStepCount, tool } from "ai";
import { z } from "zod";
import { veda } from "./lib/veda";

const { text } = await generateText({
  model: veda("anthropic/claude-sonnet-5.5"),
  prompt: "Какая погода в Казани?",
  stopWhen: isStepCount(3),
  tools: {
    getWeather: tool({
      description: "Текущая погода в городе",
      inputSchema: z.object({ location: z.string() }),
      execute: async ({ location }) => ({ location, temperatureC: 18 }),
    }),
  },
});

В AI SDK 5 и 6 условие остановки называется stepCountIs. Модель должна поддерживать вызов инструментов; это указано на её странице в каталоге.

Структурированный вывод

generateText с Output.object возвращает объект, проверенный по схеме Zod:

import { generateText, Output } from "ai";
import { z } from "zod";
import { veda } from "./lib/veda";

const { output } = await generateText({
  model: veda("openai/gpt-6.1-sol"),
  output: Output.object({
    schema: z.object({ name: z.string(), age: z.number().int(), city: z.string() }),
  }),
  prompt: "Извлеки данные: Анна, 34 года, Новосибирск.",
});

Чтобы провайдер передавал модели JSON-схему, добавьте supportsStructuredOutputs: true в настройки createOpenAICompatible. Включайте его для моделей, которые поддерживают структурированный вывод.

Рассуждения

Параметры, которых нет в общем интерфейсе AI SDK, передаются через providerOptions.veda и попадают в тело запроса как есть. Так задаётся объект reasoning:

import { generateText } from "ai";
import { veda } from "./lib/veda";

const { text } = await generateText({
  model: veda("openai/gpt-6.1-sol"),
  prompt: "Объясни парадокс Монти Холла по шагам.",
  providerOptions: {
    veda: { reasoning: { effort: "high" } },
  },
});

Для моделей без уровней используйте { max_tokens: 2048 } или { enabled: true }. Готовый пример для конкретной модели есть на её странице в каталоге.

Изображения на входе

import { generateText } from "ai";
import { veda } from "./lib/veda";

const { text } = await generateText({
  model: veda("google/gemini-3.8-flash"),
  messages: [
    {
      role: "user",
      content: [
        { type: "text", text: "Опиши это изображение." },
        { type: "image", image: new URL("https://example.com/photo.jpg") },
      ],
    },
  ],
});

Атрибуция приложения

Заголовки X-Veda-App-* задаются в провайдере, чтобы статистика приложения собиралась отдельно:

export const veda = createOpenAICompatible({
  name: "veda",
  apiKey: process.env.VEDA_API_KEY,
  baseURL: `${process.env.VEDA_BASE_URL}/v1`,
  headers: { "X-Veda-App-Id": "my-assistant", "X-Veda-App-Name": "My Assistant" },
});

Подробнее: Статистика приложений.

Ошибки

Ошибки Veda приходят как APICallError с кодом ответа в statusCode: 401 неверный или неактивный ключ, 402 лимит расходов, 429 ограничение частоты. AI SDK по умолчанию повторяет запросы при 429 и ошибках 5xx; повторы задаются параметром maxRetries. Полный список кодов в обзоре API.

На этой странице