Secciones de la base de conocimientos ▾

Herramientas

Herramientas

TanStack AI + Gonka — Aplicaciones de IA en TypeScript por centavos

TanStack AI (@tanstack/ai) es un SDK con seguridad de tipos para TypeScript del equipo de TanStack (creadores de Query, Router, Table). Arquitectura agnóstica al proveedor: chat en streaming, llamadas a herramientas nativas, agentes, salida estructurada y multimodalidad a través de un conjunto unificado de adaptadores. Enlaces listos para React, Vue, Svelte, Solid y Preact (useChat y otros hooks), además de un cliente headless para el servidor.

El problema es el mismo que para cualquier framework de IA: el precio de la inferencia. TanStack AI es compatible de forma nativa con OpenAI, Anthropic y Gemini, pero las tarifas directas de estos proveedores ($2.50–15 por 1M de tokens) encarecen el chat y los agentes de producción: los diálogos en streaming y los ciclos de herramientas consumen rápidamente millones de tokens.

La característica clave de TanStack AI es la función openaiCompatible(): una forma de primera clase para conectar cualquier endpoint compatible con OpenAI. Esto significa que JoinGonka Gateway se integra sin adaptadores personalizados: solo especifica baseURL, la clave y la lista de modelos. El resultado: el mismo chat y agentes con seguridad de tipos, pero por $0.0005/1M de tokens a través de la red descentralizada Gonka en lugar de $2.50–15 con OpenAI.

Paso 1: Instalar TanStack AI y obtener una clave

Instalación de paquetes (núcleo + adaptador OpenAI, que contiene openaiCompatible):

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

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

Para la interfaz de chat en React, añada el cliente y los hooks:

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

Clave API de JoinGonka: si aún no tiene una, regístrese en gate.joingonka.ai/register, obtenga 10M de tokens gratuitos y cree una clave jg-xxx en el Dashboard → API Keys. Una sola clave y un solo saldo funcionan tanto para el formato OpenAI como para el formato Anthropic.

Paso 2: Conecte Gonka a través de openaiCompatible

En TanStack AI, el proveedor personalizado compatible con OpenAI se configura con la función openaiCompatible(): establezca baseURL, apiKey y la lista de modelos una vez, y luego seleccione el modelo para cada llamada. Nuestro Gateway utiliza el formato de "Chat Completions", por lo que dejamos api: 'chat-completions' (este es el valor predeterminado).

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

// Proveedor Gonka — configurado una vez
export const gonka = openaiCompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY!, // jg-tu-clave
  api: 'chat-completions',
  models: [
    'Qwen/Qwen3-235B-A22B-Instruct-2507-FP8', // por defecto
    'moonshotai/Kimi-K2.6',
    'MiniMaxAI/MiniMax-M2.7',
  ],
})

Chat en streaming en el servidor (por ejemplo, un controlador de ruta en cualquier framework fullstack o TanStack Start). La longitud de la respuesta se establece a través de modelOptions; este es el único punto para los parámetros "wire" nativos (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('Qwen/Qwen3-235B-A22B-Instruct-2507-FP8'),
    messages,
    modelOptions: { max_tokens: 8192 }, // límite de Qwen a través de Gateway
  })

  return toServerSentEventsResponse(stream)
}

Cliente React a través del hook useChat, transmite las respuestas del servidor a la interfaz de usuario:

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('¿Qué es Gonka?')}>
        Preguntar
      </button>
    </div>
  )
}

Sin servidor: el mismo proveedor funciona en un script o backend directamente – llame a chat() y lea el flujo. La conexión a Gonka es la misma para todas las opciones.

Parámetros de los modelos a través de Gateway: el contexto de los tres modelos es de 128K tokens. Límite de max_tokens: Qwen3-235B – 8192, Kimi K2.6 – 3072, MiniMax-M2.7 – 4096. Si max_tokens no se especifica, el valor predeterminado para no-streaming es 1500, por lo que para respuestas largas, especifíquelo explícitamente.

Comparación de costes

TanStack AI funciona igualmente bien con tarifas directas de OpenAI/Anthropic y a través de Gonka — solo cambia la baseURL. Pero el precio difiere por órdenes de magnitud. Compare las cargas típicas de una aplicación de producción en TanStack AI:

EscenarioTokensOpenAI / AnthropicJoinGonka Gonka
Una respuesta de chat en streaming~3K$0.008 — $0.045$0.000004
Ciclo de agente con llamada a herramienta~15K$0.04 — $0.22$0.00002
1,000 diálogos al día~3M$7.50 — $45$0.003
Mes de producción (~100M)~100M$250 — $1,500$0.10

El enfoque agnóstico del proveedor de TanStack AI significa que cambiar a Gonka es un cambio de una sola línea (baseURL), no una reescritura de código. Sus herramientas tipadas, salida estructurada y hooks de React permanecen sin cambios. Para una aplicación con miles de usuarios, la diferencia es de decenas de miles de dólares al mes.

Precio de Gonka: entrada ~$0.0005 por 1 millón de tokens, salida ×3. Esto es cientos a miles de veces más barato que las tarifas directas de OpenAI y Anthropic.

Herramientas tipadas y selección de modelo

La característica principal de TanStack AI es el contrato unificado toolDefinition(): la herramienta se describe una vez (entrada/salida a través de Zod, ArkType, Valibot o JSON Schema), y la implementación se vincula en el servidor o cliente. Qwen3-235B, Kimi K2.6 y MiniMax-M2.7 admiten la invocación de herramientas nativa a través de Gonka, por lo que los agentes funcionan de manera confiable, sin analizar las respuestas de texto.

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

const getWeather = toolDefinition({
  name: 'getWeather',
  description: 'Obtener el clima en una ciudad',
  inputSchema: z.object({ city: z.string() }),
  outputSchema: z.object({ tempC: z.number() }),
}).server(async ({ city }) => {
  return { tempC: 21 } // su llamada a la API real
})

const stream = chat({
  adapter: gonka('Qwen/Qwen3-235B-A22B-Instruct-2507-FP8'),
  messages: [{ role: 'user', content: '¿Qué tiempo hace en Moscú?' }],
  tools: [getWeather],
  modelOptions: { max_tokens: 8192 },
})

Qué modelo elegir:

  • Qwen/Qwen3-235B-A22B-Instruct-2507-FP8 — por defecto. El techo de respuesta más grande (8192) y una potente invocación de herramientas. Adecuado para agentes y salida estructurada.
  • moonshotai/Kimi-K2.6 — excelente para diálogos largos y razonamiento. Techo de respuesta 3072.
  • MiniMaxAI/MiniMax-M2.7 — equilibrio de velocidad y calidad, techo 4096.

Gracias al cambio de adaptador en tiempo de ejecución en TanStack AI, puede mantener los tres modelos en un solo proveedor y cambiar entre ellos sobre la marcha, por ejemplo, tareas de agente pesadas en Qwen, respuestas rápidas en MiniMax.

TanStack AI + Gonka = aplicaciones de IA tipadas en TypeScript por unos centavos. Conexión a través de openaiCompatible: un cambio de baseURL, y el chat en streaming, los agentes y las herramientas funcionan por $0.0005/1M tokens en lugar de $2.50–15 con OpenAI. 10 millones de tokens gratuitos son suficientes para miles de diálogos.

¿Quieres saber más?

Explora otras secciones o empieza a ganar GNK ahora mismo.

Obtén 10M de tokens gratis →