Vercel AI SDK

Подключение Vercel AI SDK к ToyGate как к пользовательскому провайдеру.

Интеграции

Vercel AI SDK предоставляет настраиваемый провайдер. Укажите шлюз в baseURL и передайте ключ gw_. Через такой провайдер работают generateText и streamText; structured-output функции пока не поддерживаются.

Настройка

ts
import { createOpenAI as createStandardClient } from "@ai-sdk/openai";// Or import from any other standard-compatible SDKexport const gateway = createStandardClient({apiKey: process.env.GATEWAY_KEY,baseURL: "https://api.toygate.store/v1",});

generateText

import { generateText } from "ai";

const { text } = await generateText({
  model: gateway("gpt-5.5"),
  prompt: "Say hi",
});

console.log(text);

streamText

import { streamText } from "ai";

const stream = streamText({
  model: gateway("gpt-5.5"),
  prompt: "Stream me a sentence.",
});

for await (const chunk of stream.textStream) {
  process.stdout.write(chunk);
}

Structured output

generateObject и другие structured-output пути отправляют поле response_format. ToyGate пока не поддерживает его и возвращает HTTP 400 с error.code = "response_format_not_supported". Не используйте generateObject через шлюз, пока этот контракт не изменится.

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

import { tool } from "ai";

const time = tool({
  description: "Returns the current local time in the given timezone.",
  parameters: z.object({ timezone: z.string() }),
  execute: async ({ timezone }) =>
    new Date().toLocaleTimeString("en-US", { timeZone: timezone }),
});

const { text } = await generateText({
  model: gateway("gpt-5.5"),
  tools: { time },
  prompt: "What time is it in Tokyo?",
});

Решение проблем

  • APICallError: Unauthorized — SDK не смог пройти проверку в шлюзе. Убедитесь, что process.env.GATEWAY_KEY задан в среде выполнения: Node, edge или lambda.
  • InvalidJSONResponseError — upstream прислал данные, которые SDK не смог разобрать как JSON; шлюз обозначает это как upstream_invalid_response (502).
  • Edge runtimes — шлюз работает через fetch. Если среда предоставляет нестандартный глобальный объект, передайте globalThis.fetch явно.

URL шлюза: https://api.toygate.store