NouveauBranchez n’importe quel agent sur UberLLM : une clé, tous les modèles, au prix catalogue ou moins.
UberLLM

Utilisez le Vercel AI SDK avec UberLLM (modèles moins chers, même code)

Installez @ai-sdk/openai-compatible, créez un fournisseur avec l'URL de base https://api.uberllm.dev/v1 et votre clé UberLLM, et passez uberllm("<model id>") partout où votre application passe un modèle aujourd'hui. Rien d'autre ne change dans l'application.

Étapes

  1. Créez une clé sur votre page de clés et ajoutez un peu de crédit (les comptes commencent à $0).
  2. Installez le fournisseur :
npm i ai @ai-sdk/openai-compatible
  1. Mettez la clé dans .env.local (Next.js) ou l'environnement de votre serveur :
UBERLLM_API_KEY=ull_your_key
  1. Créez le fournisseur une fois, par exemple dans lib/uberllm.ts :
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";

export const uberllm = createOpenAICompatible({
  name: "uberllm",
  baseURL: "https://api.uberllm.dev/v1",
  apiKey: process.env.UBERLLM_API_KEY, // sent as Authorization: Bearer <key>
  includeUsage: true, // token counts on streamed answers too
});
  1. Utilisez-le là où vous utilisiez un modèle avant :
import { generateText } from "ai";
import { uberllm } from "@/lib/uberllm";

const { text } = await generateText({
  model: uberllm("deepseek/deepseek-v4.1-flash"),
  prompt: "Write a one-line welcome message.",
});

Migrer une application qui utilise déjà @ai-sdk/openai

Remplacez l'argument du modèle et gardez tout le reste :

// before
import { openai } from "@ai-sdk/openai";
const model = openai("gpt-4o");

// after
import { uberllm } from "@/lib/uberllm";
const model = uberllm("deepseek/deepseek-v4.1-flash");

Les identifiants de modèle sont les identifiants sur uberllm.dev/models et ont toujours un fabricant devant (openai/…, anthropic/…, deepseek/…). C'est ainsi que vous pouvez exécuter GPT, Claude, Gemini et des modèles ouverts à partir d'une seule clé et les comparer en changeant une seule chaîne de caractères.

Une route de chat Next.js pour useChat

useChat depuis @ai-sdk/react envoie des requêtes à /api/chat par défaut. Cette route y répond :

// app/api/chat/route.ts
import { streamText, convertToModelMessages, type UIMessage } from "ai";
import { uberllm } from "@/lib/uberllm";

export async function POST(req: Request) {
  const { messages }: { messages: UIMessage[] } = await req.json();
  const result = streamText({
    model: uberllm("deepseek/deepseek-v4.1-flash"),
    messages: await convertToModelMessages(messages),
  });
  return result.toUIMessageStreamResponse();
}

Gardez la clé sur le serveur. Ne la mettez jamais dans une variable NEXT_PUBLIC_ : n'importe qui pourrait la lire depuis la page et dépenser votre solde.

Plafonnez le coût d'un appel

Les requêtes de chat acceptent provider.max_price (dollars par million de tokens). Passez-le via providerOptions sous le fournisseur name que vous avez choisi :

await generateText({
  model: uberllm("deepseek/deepseek-v4.1-flash"),
  prompt: "Hi",
  providerOptions: { uberllm: { provider: { max_price: { prompt: 0.2, completion: 0.4 } } } },
});

Si personne ne vend le modèle à ce prix actuellement, l'appel est refusé avec max_price_exceeded et rien n'est facturé.

Dépannage

  • 401 invalid_api_key : la clé n'a pas atteint le serveur. Redémarrez next dev après avoir modifié .env.local, et vérifiez que process.env.UBERLLM_API_KEY est défini là où le code s'exécute (serveur, pas le navigateur).
  • 402 insufficient_credits : ajoutez du crédit sur la page des crédits.
  • 404 model_not_found : l'ID est incorrect ou il manque son créateur. Copiez-le depuis la page du modèle.
  • 400 wrong_endpoint : vous avez passé un modèle d'image ou de vidéo à streamText. Les modèles d'image passent par uberllm.imageModel(…) avec generateImage; la vidéo est un job, voir Créer une vidéo ou une image.
  • L'utilisation est vide en streaming : définissez includeUsage: true sur le fournisseur, comme ci-dessus.

Continuez la lecture

Bons modèles pour une application

Tous ceux-ci prennent en charge les tool calls. Le premier se trouve dans le code ci-dessous.

ModèleID du modèle (à coller)Prix actuel
DeepSeek V4.1 Flashdeepseek/deepseek-v4.1-flash$0.00018 en entrée · $0.0014 en sortie / 1M
Gemini 3.5 Flashgoogle/gemini-3.5-flash$0.0150 en entrée · $0.0900 en sortie / 1M
Claude Sonnet 5.5anthropic/claude-sonnet-5.5$0.1099 en entrée · $0.5495 en sortie / 1M
GPT-5.5openai/gpt-5.5$0.1250 en entrée · $0.7500 en sortie / 1M
Kimi K3moonshotai/kimi-k3$0.0010 en entrée · $0.0788 en sortie / 1M
GLM 5.3z-ai/glm-5.3$0.00070 en entrée · $0.0141 en sortie / 1M
Gemma 3 27Bgoogle/gemma-3-27b-it$0.00079 en entrée · $0.0020 en sortie / 1M
Qwen3 VL 235B A22Bqwen/qwen3-vl-235b-a22b-instruct$0.0021 en entrée · $0.0188 en sortie / 1M

Prix à la dernière mise à jour horaire, sans frais ajoutés · tous les modèles →

FAQ

Le Vercel AI SDK fonctionne-t-il avec UberLLM ?

Oui. Utilisez le fournisseur officiel @ai-sdk/openai-compatible avec la baseURL https://api.uberllm.dev/v1 et votre clé UberLLM. generateText, streamText, useChat, les tool calls et generateImage fonctionnent.

Ai-je également besoin de @ai-sdk/openai ou de @ai-sdk/anthropic ?

Non. Un seul fournisseur @ai-sdk/openai-compatible atteint tous les modèles de chat sur UberLLM, y compris Claude, GPT et Gemini, par ID de modèle.

Puis-je créer des vidéos avec l'AI SDK ?

Pas via @ai-sdk/openai-compatible, qui n'a pas de modèle vidéo. Les vidéos sont des jobs sur UberLLM : démarrez-en un avec POST /v1/video/generations et vérifiez son statut, comme indiqué dans la documentation média.