Vercel AI SDK
Подключение Hubris к Vercel AI SDK — библиотеке для LLM-приложений на TypeScript. Текст, инструменты, структурированный вывод и стриминг в React.
Vercel AI SDK — библиотека для приложений с языковыми моделями на TypeScript: единый интерфейс к провайдерам, вызов инструментов, структурированный вывод и готовые хуки для стриминга ответа в React.
Hubris подключается пакетом @ai-sdk/openai-compatible — отдельного провайдера не нужно.
Требования
- Node.js 22+ (требование пакетов
aiи@ai-sdk/openai-compatibleначиная с версии 7) npm install ai @ai-sdk/openai-compatible zod- Аккаунт на hubris.pw и API-ключ
Подключение
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateText } from 'ai';
const hubris = createOpenAICompatible({
name: 'hubris',
baseURL: 'https://api.hubris.pw/v1',
apiKey: process.env.HUBRIS_API_KEY,
// Наши модели умеют response_format с JSON-схемой. Без этого флага
// generateObject уйдёт в режим json_object — см. раздел ниже.
supportsStructuredOutputs: true,
});
const { text } = await generateText({
model: hubris('openai/gpt-5.6-luna'),
prompt: 'Объясни, чем кэш промпта отличается от обычного ввода',
});
console.log(text);Адрес — именно api.hubris.pw, с api. в начале и /v1 в конце. Домен hubris.pw — это сайт и личный кабинет: запросы к API он не обслуживает.
ID модели передаётся полностью, вместе с вендором: hubris('anthropic/claude-sonnet-5').
Структурированный вывод
Без supportsStructuredOutputs: true вызов generateObject падает с ошибкой:
Response input messages must contain the word 'json' in some form
to use 'text.format' of type 'json_object'.Это правило OpenAI, а не наше: по умолчанию SDK просит режим json_object, а он требует слова «json» в самом промпте. С флагом SDK переходит на response_format с JSON-схемой, и требование снимается. Второй способ — оставить всё как есть и добавить слово «json» в промпт, но флаг чище: схема уходит модели, а не пересказывается словами.
import { generateObject } from 'ai';
import { z } from 'zod';
const { object } = await generateObject({
model: hubris('openai/gpt-5.6-luna'),
schema: z.object({ name: z.string(), age: z.number() }),
prompt: 'Ivan is 28 years old',
});
console.log(object);
//> { name: 'Ivan', age: 28 }Инструменты
import { generateText, tool } from 'ai';
import { z } from 'zod';
const { steps, text } = await generateText({
model: hubris('openai/gpt-5.6-luna'),
prompt: 'Сколько будет 17 плюс 25? Используй инструмент.',
tools: {
add: tool({
description: 'Складывает два числа',
inputSchema: z.object({ a: z.number(), b: z.number() }),
execute: async ({ a, b }) => a + b,
}),
},
stopWhen: ({ steps }) => steps.length >= 3,
});Инструменты требуют от модели поддержки function calling — смотрите tools в supported_parameters карточки модели в каталоге.
Стриминг в приложении
import { streamText } from 'ai';
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: hubris('anthropic/claude-sonnet-5'),
messages,
});
return result.toUIMessageStreamResponse();
}Ключ читается на сервере из process.env — в браузер он не попадает. Не переносите createOpenAICompatible в клиентский компонент: ключ уедет в бандл.
Выбор моделей
| ID | Когда подходит |
|---|---|
google/gemini-3.7-flash | дешёвые ответы, большой поток запросов |
openai/gpt-5.6-luna | универсальный выбор, структурированный вывод |
anthropic/claude-sonnet-5 | длинный контекст, картинки, сложные схемы |
deepseek/deepseek-v4-pro | недорогое рассуждение и код |
Каталог у нас открыт без ключа — список можно посмотреть прямо в браузере: api.hubris.pw/v1/models.
Решение проблем
generateObject падает с требованием слова «json»
Не выставлен supportsStructuredOutputs: true — см. раздел выше.
Ошибка авторизации
Ключ неверный или отозван. Он начинается на sk-gw-, без пробелов по краям. Новый — в разделе «Ключи».
Ошибка про модель
ID должен совпадать с каталожным символ в символ, вместе с вендором перед косой чертой. Короткие имена без вендора и имена с датой на конце мы не принимаем.
Ошибка про недостаточный баланс
Пополните баланс в кабинете — от 300 ₽, через СБП, банковской картой или по счёту для юридических лиц.
Проверено на Vercel AI SDK 7.0.94 (ai 7.0.94, @ai-sdk/openai-compatible 3.0.45, zod 4.5.4), 9 сентября 2026.
Что дальше
- Каталог моделей — ID для
hubris('...'). - Управление ключами — отдельный ключ под проект.
- Расходы — детализация по запросам и моделям.
- Chat Completions — что именно уходит в Hubris из SDK.
Обновлено: