Sections de la base de connaissances ▾

Navigation

▸ Commencez ici Par rôles

Catégories

Outils 32
Glossaire 12

Outils

TanStack AI + Gonka — Applications IA en TypeScript pour une bouchée de pain

TanStack AI (@tanstack/ai) est un SDK typé pour TypeScript de l'équipe TanStack (auteurs de Query, Router, Table). Une architecture Provider-agnostic : chat en streaming, tool calling natif, agents, sortie structurée et multimodalité via un ensemble unique d'adaptateurs. Des bindings prêts à l'emploi pour React, Vue, Svelte, Solid et Preact (useChat et autres hooks) ainsi qu'un client headless pour le serveur.

Le problème reste le même que pour tout framework AI — le coût de l'inférence. TanStack AI prend en charge OpenAI, Anthropic et Gemini nativement, mais les tarifs directs de ces fournisseurs ($2.50–15 pour 1M de jetons) rendent les chats et agents en production coûteux : les dialogues en streaming et les cycles d'outils consomment rapidement des millions de jetons.

Une caractéristique clé de TanStack AI est la fonction openaiCompatible() : un moyen de premier ordre pour connecter n'importe quel endpoint compatible OpenAI. Cela signifie que JoinGonka Gateway s'intègre sans adaptateurs personnalisés — il suffit de spécifier baseURL, la clé et la liste des modèles. Résultat : le même chat et les mêmes agents typés, mais pour $0.003/1M de jetons via le réseau décentralisé Gonka au lieu de $2.50–15 chez OpenAI.

Étape 1 : Installer TanStack AI et obtenir la clé

Installation des paquets (noyau + adaptateur OpenAI, où vit openaiCompatible) :

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

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

Pour l'interface de chat sur React, ajoutez le client et les hooks :

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

Clé API JoinGonka : si vous n'en avez pas encore — inscrivez-vous sur gate.joingonka.ai/register, obtenez 10 millions de jetons gratuits et créez une clé jg-xxx dans le tableau de bord → Clés API. Une seule clé et un seul solde fonctionnent pour les formats OpenAI et Anthropic.

Étape 2 : Connecter Gonka via openaiCompatible

Dans TanStack AI, un fournisseur compatible OpenAI personnalisé se configure avec la fonction openaiCompatible() : vous définissez baseURL, apiKey et la liste des modèles une seule fois, puis vous choisissez le modèle à chaque appel. Notre Gateway utilise le format Chat Completions, nous conservons donc api: 'chat-completions' (c'est la valeur par défaut).

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

// Le fournisseur Gonka — configuré une seule fois
export const gonka = openaiCompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY!, // jg-votre-clé
  api: 'chat-completions',
  models: [
    'moonshotai/Kimi-K2.6', // défaut
    'MiniMaxAI/MiniMax-M2.7',
  ],
})

Chat en streaming côté serveur (par exemple, un gestionnaire de route dans n'importe quel framework fullstack ou TanStack Start). On définit la longueur de la réponse via modelOptions — c'est le seul point pour les paramètres wire natifs (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 }, // plafond de sortie via Gateway
  })

  return toServerSentEventsResponse(stream)
}

Client React via le hook useChat — streame les réponses du serveur vers l'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('Qu'est-ce que Gonka?')}>
        Demander
      </button>
    </div>
  )
}

Sans serveur : le même fournisseur fonctionne directement dans un script ou backend — appelez chat() et lisez le flux. La connexion à Gonka est identique pour toutes les variantes.

Paramètres des modèles via Gateway : le contexte des deux modèles est de 200K jetons. Le plafond max_tokens est de 8192 pour tous les modèles du réseau. Si max_tokens n'est pas précisé, la valeur par défaut pour le non-stream est de 1500, donc pour les réponses longues, définissez-le explicitement.

Comparaison des coûts

TanStack AI fonctionne aussi bien via les tarifs directs OpenAI/Anthropic que via Gonka — seule l'adresse baseURL change. Mais le prix diffère de plusieurs ordres de grandeur. Comparons les charges de travail typiques d'une application de production sur TanStack AI :

ScénarioJetonsOpenAI / AnthropicJoinGonka Gonka
Une réponse chat streaming~3K$0.008 — $0.045$0.000014
Cycle d'agent avec tool calling~15K$0.04 — $0.22$0.000072
1 000 dialogues par jour~3M$7.50 — $45$0.014
Mois de production (~100M)~100M$250 — $1 500$0.48

L'approche provider-agnostic de TanStack AI signifie que passer à Gonka ne nécessite que la modification d'une ligne (baseURL), sans réécriture de code. En même temps, vos outils typés, votre sortie structurée et vos hooks React restent inchangés. Pour une application avec des milliers d'utilisateurs, la différence représente des dizaines de milliers de dollars par mois.

Prix Gonka : entrée ~$0.003 pour 1M de jetons, sortie ×3. C'est des centaines à des milliers de fois moins cher que les tarifs directs d'OpenAI et Anthropic.

Outils typés et sélection du modèle

La fonctionnalité principale de TanStack AI est le contrat unique toolDefinition() : l'outil est décrit une fois (entrée/sortie via Zod, ArkType, Valibot ou JSON Schema), et l'implémentation est liée côté serveur ou client. Kimi K2.6 et MiniMax-M2.7 prennent en charge le tool calling natif via Gonka, les agents fonctionnent donc de manière fiable — sans analyse de réponses textuelles.

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

const getWeather = toolDefinition({
  name: 'getWeather',
  description: 'Obtenir la météo dans une ville',
  inputSchema: z.object({ city: z.string() }),
  outputSchema: z.object({ tempC: z.number() }),
}).server(async ({ city }) => {
  return { tempC: 21 } // votre appel API réel
})

const stream = chat({
  adapter: gonka('MiniMaxAI/MiniMax-M2.7'),
  messages: [{ role: 'user', content: 'Quelle est la météo à Moscou?' }],
  tools: [getWeather],
  modelOptions: { max_tokens: 8192 },
})

Quel modèle choisir :

  • moonshotai/Kimi-K2.6 — puissant pour le codage, le raisonnement et les scénarios avec agents. Plafond de réponse 8192.
  • MiniMaxAI/MiniMax-M2.7 — défaut, équilibre entre vitesse et qualité, contexte long. Plafond de réponse 8192.

Grâce au runtime adapter switching dans TanStack AI, vous pouvez conserver les deux modèles dans le même fournisseur et basculer entre eux à la volée — par exemple, tâches d'agent intensives sur Kimi, réponses rapides sur MiniMax.

TanStack AI + Gonka = applications AI typées sur TypeScript pour quelques centimes. La connexion via openaiCompatible se fait en une modification de baseURL, et le chat en streaming, les agents et les outils fonctionnent pour $0.003/1M de jetons au lieu de $2.50–15 chez OpenAI. 10M de jetons gratuits suffisent pour des milliers de dialogues.

Vous voulez en savoir plus ?

Explorez d'autres sections ou commencez à gagner des GNK dès maintenant.

Obtenez 10M de jetons gratuits →