Розділи бази знань ▾

Навігація

▸ Почніть тут За ролями

Категорії

Інструменти 37
Глосарій 12

Інструменти

TanStack AI + Gonka — AI-додатки на TypeScript за копійки

TanStack AI (@tanstack/ai) — типобезпечний SDK для TypeScript від команди TanStack (автори Query, Router, Table). Provider-agnostic архітектура: streaming-чат, нативний tool calling, агенти, структурований вивід та мультимодальність через єдиний набір адаптерів. Готові біндінги для React, Vue, Svelte, Solid та Preact (useChat та інші хуки) плюс headless-клієнт для сервера.

Проблема та ж, що у будь-якого AI-фреймворка — ціна інференсу. TanStack AI з коробки підтримує OpenAI, Anthropic та Gemini, але прямі тарифи цих провайдерів ($2.50–15 за 1M токенів) роблять production-чат та агентів дорогими: streaming-діалоги та tool-цикли швидко з'їдають мільйони токенів.

Ключова особливість TanStack AI — функція openaiCompatible(): першокласний спосіб підключити будь-який OpenAI-сумісний endpoint. Це означає, що JoinGonka Gateway інтегрується без кастомних адаптерів — вказуєте baseURL, ключ та список моделей. Результат: той же типобезпечний чат та агенти, але за $0.0069/1M токенів через децентралізовану мережу Gonka замість $2.50–15 у OpenAI.

Крок 1: Встановити TanStack AI та отримати ключ

Встановлення пакетів (ядро + OpenAI-адаптер, в якому живе openaiCompatible):

# pnpm
pnpm add @tanstack/ai @tanstack/ai-openai

# npm
npm install @tanstack/ai @tanstack/ai-openai

Для чат-інтерфейсу на React додайте клієнт і хуки:

pnpm add @tanstack/ai-client @tanstack/ai-react

API-ключ JoinGonka: якщо ще немає — зареєструйтеся на gate.joingonka.ai/register, отримайте 3M безкоштовних токенів і створіть ключ jg-xxx у Dashboard → API Keys. Один ключ і один баланс працюють і для OpenAI-, і для Anthropic-формату.

Крок 2: Підключити Gonka через openaiCompatible

У TanStack AI кастомний OpenAI-сумісний провайдер налаштовується функцією openaiCompatible(): один раз задаєте baseURL, apiKey і список моделей, а потім обираєте модель на кожен виклик. Наш Gateway говорить на форматі Chat Completions, тому залишаємо api: 'chat-completions' (це значення за замовчуванням).

import { openaiCompatible } from '@tanstack/ai-openai'

// Провайдер Gonka — налаштовується один раз
export const gonka = openaiCompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY!, // jg-ваш-ключ
  api: 'chat-completions',
  models: [
    'MiniMaxAI/MiniMax-M2.7', // дефолт
    'deepseek-ai/DeepSeek-V4-Flash-0731',
    'zai-org/GLM-5.3-Flash', // reasoning-модель
  ],
})

Streaming-чат на сервері (наприклад, route-хендлер у будь-якому fullstack-фреймворку або TanStack Start). Довжину відповіді задаємо через modelOptions — це єдина точка для нативних wire-параметрів (max_tokens, temperature):

import { chat, toServerSentEventsResponse } from '@tanstack/ai'
import { gonka } from './gonka'

export async function POST(request: Request) {
  const { messages } = await request.json()

  const stream = chat({
    adapter: gonka('MiniMaxAI/MiniMax-M2.7'),
    messages,
    modelOptions: { max_tokens: 8192 }, // стеля виводу через Gateway
  })

  return toServerSentEventsResponse(stream)
}

React-клієнт через хук useChat — стрімить відповіді з сервера в UI:

import { useChat } from '@tanstack/ai-react'

function Chat() {
  const { messages, sendMessage, status } = useChat({ api: '/api/chat' })

  return (
    <div>
      {messages.map((m) => (
        <p key={m.id}><b>{m.role}:</b> {m.content}</p>
      ))}
      <button onClick={() => sendMessage('Що таке Gonka?')}>
        Запитати
      </button>
    </div>
  )
}

Без сервера: той же провайдер працює у скрипті або бекенді напряму — викликайте chat() і читайте потік. Підключення до Gonka однакове для всіх варіантів.

Параметри моделей через Gateway: контекст — 200K токенів у MiniMax M2.7, 380K у DeepSeek V4 Flash і 390K у GLM-5.3 Flash. Стеля max_tokens — 8192 у MiniMax M2.7 і GLM-5.3 Flash, 32768 у DeepSeek V4 Flash. Якщо max_tokens не вказано, дефолт для non-stream — 1500, тому для довгих відповідей задавайте його явно.

Порівняння вартості

TanStack AI однаково зручно працює і через прямі тарифи OpenAI/Anthropic, і через Gonka — змінюється тільки baseURL. Але ціна відрізняється на порядки. Порівняємо типові навантаження production-додатку на TanStack AI:

СценарійТокенівOpenAI / AnthropicJoinGonka Gonka
Одна streaming-відповідь чату~3K$0.008 — $0.045$0.000028
Цикл агента з tool calling~15K$0.04 — $0.22$0.00014
1 000 діалогів на день~3M$7.50 — $45$0.028
Місяць production (~100M)~100M$250 — $1 500$0.96

Provider-agnostic підхід TanStack AI означає, що перемкнутися на Gonka — це правка одного рядка (baseURL), а не переписування коду. При цьому ваші типобезпечні tools, структурований вивід та React-хуки залишаються без змін. Для додатку з тисячами користувачів різниця — десятки тисяч доларів на місяць.

Ціна Gonka: вхід ~$0.0069 за 1M токенів, вихід ×3. Це в сотні–тисячі разів дешевше за прямі тарифи OpenAI та Anthropic.

Типобезпечні tools і вибір моделі

Головна фішка TanStack AI — єдиний контракт toolDefinition(): інструмент описується один раз (вхід/вихід через Zod, ArkType, Valibot або JSON Schema), а реалізація прив'язується на сервері або клієнті. MiniMax M2.7, DeepSeek V4 Flash та GLM-5.3 Flash підтримують нативний tool calling через Gonka, тому агенти працюють надійно — без парсингу текстових відповідей.

import { chat, toolDefinition } from '@tanstack/ai'
import { gonka } from './gonka'
import { z } from 'zod'

const getWeather = toolDefinition({
  name: 'getWeather',
  description: 'Дізнатися погоду в місті',
  inputSchema: z.object({ city: z.string() }),
  outputSchema: z.object({ tempC: z.number() }),
}).server(async ({ city }) => {
  return { tempC: 21 } // ваш реальний виклик API
})

const stream = chat({
  adapter: gonka('MiniMaxAI/MiniMax-M2.7'),
  messages: [{ role: 'user', content: 'Яка погода в Москві?' }],
  tools: [getWeather],
  modelOptions: { max_tokens: 8192 },
})

Яку модель вибрати:

  • MiniMaxAI/MiniMax-M2.7 — дефолт, баланс швидкості та якості, довгий контекст. Стеля відповіді 8192.
  • deepseek-ai/DeepSeek-V4-Flash-0731 — один з найдовших контекстів мережі (380K), дешеві великі промпти. Стеля відповіді 32768.
  • zai-org/GLM-5.3-Flash — reasoning-модель: розмірковує перед відповіддю, сильна в складній логіці; найдовший контекст мережі (390K). Стеля відповіді 8192; розмірковування витрачають частину max_tokens.

Завдяки runtime adapter switching у TanStack AI можна тримати всі три моделі в одному провайдері та перемикатися між ними на льоту — наприклад, задачі з розмірковуваннями на GLM-5.3 Flash, швидкі відповіді на MiniMax.

TanStack AI + Gonka = типобезпечні AI-додатки на TypeScript за копійки. Підключення через openaiCompatible — одна правка baseURL, і streaming-чат, агенти та tools працюють за $0.0069/1M токенів замість $2.50–15 у OpenAI. Стартові токени дають змогу спробувати без карти.

Бажаєте дізнатися більше?

Вивчіть інші розділи або почніть заробляти GNK прямо зараз.

Отримати безкоштовні токени →