Mga Seksyon ng Base ng Kaalaman ▾

Nabigasyon

▸ Magsimula rito Ayon sa papel

Mga Kategorya

Mga Gamit 32
Glosaryo 12

Mga Tool

TanStack AI + Gonka — AI Applications sa TypeScript sa Maliit na Halaga

Ang TanStack AI (@tanstack/ai) ay isang type-safe na SDK para sa TypeScript mula sa team ng TanStack (mga may akda ng Query, Router, Table). Provider-agnostic architecture: streaming-chat, native tool calling, agents, structured output, at multimodality sa pamamagitan ng iisang set ng mga adapter. May mga ready-to-use binding para sa React, Vue, Svelte, Solid, at Preact (useChat at iba pang hooks) pati na rin ang headless-client para sa server.

Ang problema ay pareho sa anumang AI framework — ang presyo ng inference. Out of the box, sinusuportahan ng TanStack AI ang OpenAI, Anthropic, at Gemini, ngunit ang mga direct rate ng mga provider na ito ($2.50–15 kada 1M tokens) ay nagpapahal sa production-chat at agents: ang streaming-dialogue at tool-cycles ay mabilis na mauubos ang milyun-milyong tokens.

Ang pangunahing feature ng TanStack AI ay ang openaiCompatible() function: isang first-class na paraan para ikonekta ang anumang OpenAI-compatible endpoint. Ibig sabihin nito, ang JoinGonka Gateway ay madaling mai-integrate nang walang custom adapters — kailangan lang ilagay ang baseURL, API key, at listahan ng models. Ang resulta: parehong type-safe chat at agents, ngunit sa halagang $0.003/1M tokens sa pamamagitan ng decentralized network na Gonka sa halip na $2.50–15 sa OpenAI.

Hakbang 1: I-install ang TanStack AI at kumuha ng susi

Pag-install ng Pakete (core + OpenAI adapter, kung saan nakatira ang openaiCompatible):

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

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

Para sa chat interface sa React, idagdag ang client at hooks:

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

API Key ng JoinGonka: kung wala ka pa — magparehistro sa gate.joingonka.ai/register, kumuha ng 10M na libreng token at lumikha ng key na jg-xxx sa Dashboard → API Keys. Isang key at isang balanse ang gumagana para sa parehong OpenAI- at Anthropic-format.

Hakbang 2: Ikonekta ang Gonka sa pamamagitan ng openaiCompatible

Sa TanStack AI, ang custom na OpenAI-compatible provider ay nase-set up gamit ang openaiCompatible() function: tukuyin nang isang beses ang baseURL, apiKey, at listahan ng mga modelo, pagkatapos ay piliin ang modelo sa bawat tawag. Ang aming Gateway ay gumagamit ng Chat Completions format, kaya iniiwan namin ang api: 'chat-completions' (ito ang default na value).

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

// Gonka Provider — nase-set up nang isang beses
export const gonka = openaiCompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY!, // jg-iyong-key
  api: 'chat-completions',
  models: [
    'moonshotai/Kimi-K2.6', // default
    'MiniMaxAI/MiniMax-M2.7',
  ],
})

Streaming-chat sa server (halimbawa, route handler sa anumang fullstack framework o TanStack Start). Itinatakda namin ang haba ng response sa pamamagitan ng modelOptions — ito ang tanging punto para sa mga native wire-parameter (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 }, // limit ng output sa pamamagitan ng Gateway
  })

  return toServerSentEventsResponse(stream)
}

React-client gamit ang useChat hook — ini-stream ang mga sagot mula sa server patungo sa 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('Ano ang Gonka?')}>
        Magtanong
      </button>
    </div>
  )
}

Walang server: gumagana ang parehong provider sa script o backend nang direkta — tawagin ang chat() at basahin ang stream. Ang koneksyon sa Gonka ay pareho para sa lahat ng opsyon.

Mga parameter ng modelo sa pamamagitan ng Gateway: ang context ng parehong modelo ay 200K tokens. Ang limit na max_tokens ay 8192 para sa lahat ng modelo sa network. Kung ang max_tokens ay hindi tinukoy, ang default para sa non-stream ay 1500, kaya para sa mahahabang sagot, itakda ito nang hayagan.

Paghahambing ng Gastos

Ang TanStack AI ay gumagana nang maayos sa parehong direct rates ng OpenAI/Anthropic at sa Gonka — baseURL lang ang nagbabago. Ngunit ang presyo ay nagkakaiba nang malaki. Ihambing natin ang tipikal na workload ng isang production application sa TanStack AI:

ScenarioTokensOpenAI / AnthropicJoinGonka Gonka
Isang streaming-chat response~3K$0.008 — $0.045$0.000014
Agent cycle na may tool calling~15K$0.04 — $0.22$0.000072
1,000 dialogues kada araw~3M$7.50 — $45$0.014
Isang buwang production (~100M)~100M$250 — $1 500$0.48

Ang provider-agnostic approach ng TanStack AI ay nangangahulugang ang paglipat sa Gonka ay isang one-line change lang (baseURL), hindi na kailangang i-rewrite ang buong code. Kasabay nito, ang iyong type-safe tools, structured output, at React-hooks ay mananatiling hindi nagbabago. Para sa application na may libu-libong users, ang pagkakaiba ay umaabot sa libu-libong dolyar bawat buwan.

Presyo ng Gonka: input ~$0.003 kada 1M tokens, output ×3. Ito ay daan-daan hanggang libu-libong beses na mas mura kaysa sa direktang rates ng OpenAI at Anthropic.

Type-safe na mga tool at pagpili ng modelo

Ang pangunahing feature ng TanStack AI ay ang iisang toolDefinition() contract: ang tool ay inilalarawan nang isang beses (input/output sa pamamagitan ng Zod, ArkType, Valibot, o JSON Schema), at ang implementasyon ay ikinakabit sa server o client. Ang Kimi K2.6 at MiniMax-M2.7 ay sumusuporta sa native tool calling sa pamamagitan ng Gonka, kaya ang mga agent ay gumagana nang maaasahan — nang walang pag-parse ng mga text response.

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

const getWeather = toolDefinition({
  name: 'getWeather',
  description: 'Alamin ang panahon sa lungsod',
  inputSchema: z.object({ city: z.string() }),
  outputSchema: z.object({ tempC: z.number() }),
}).server(async ({ city }) => {
  return { tempC: 21 } // iyong totoong API call
})

const stream = chat({
  adapter: gonka('MiniMaxAI/MiniMax-M2.7'),
  messages: [{ role: 'user', content: 'Ano ang panahon sa Manila?' }],
  tools: [getWeather],
  modelOptions: { max_tokens: 8192 },
})

Aling modelo ang pipiliin:

  • moonshotai/Kimi-K2.6 — mahusay sa coding, pangangatwiran, at agent scenarios. Limit ng sagot ay 8192.
  • MiniMaxAI/MiniMax-M2.7 — default, balanse ng bilis at kalidad, mahabang context. Limit ng sagot ay 8192.

Dahil sa runtime adapter switching sa TanStack AI, maaari mong panatilihin ang parehong modelo sa iisang provider at lumipat sa pagitan nila on-the-fly — halimbawa, mabibigat na agent task sa Kimi, mabilis na sagot sa MiniMax.

TanStack AI + Gonka = type-safe AI-apps sa TypeScript sa napakababang halaga. Koneksyon sa pamamagitan ng openaiCompatible — isang pagbabago lang sa baseURL, at ang streaming-chat, agents, at tools ay gagana sa halagang $0.003/1M tokens sa halip na $2.50–15 sa OpenAI. Ang 10M free tokens ay sapat na para sa libu-libong dialogues.

Gusto mo pang matuto?

Galugarin ang iba pang mga seksyon o simulang kumita ng GNK ngayon.

Kumuha ng 10M libreng token →