NuevoConecta cualquier agente a UberLLM: una clave, todos los modelos, a precio de lista o menos.
UberLLM

Usa el Vercel AI SDK con UberLLM (modelos más baratos, mismo código)

Instala @ai-sdk/openai-compatible, crea un proveedor con baseURL https://api.uberllm.dev/v1 y tu clave de UberLLM, y pasa uberllm("<model id>") dondequiera que tu aplicación pase un modelo hoy. Nada más en la aplicación cambia.

Pasos

  1. Crea una clave en tu página de claves y añade un poco de crédito (las cuentas empiezan en $0).
  2. Instala el proveedor:
npm i ai @ai-sdk/openai-compatible
  1. Pon la clave en .env.local (Next.js) o en el entorno de tu servidor:
UBERLLM_API_KEY=ull_your_key
  1. Crea el proveedor una vez, por ejemplo en 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. Úsalo donde usabas un modelo antes:
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.",
});

Migrar una aplicación que ya usa @ai-sdk/openai

Cambia el argumento del modelo y mantén todo lo demás:

// 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");

Los IDs de modelo son los IDs en uberllm.dev/models y siempre llevan un fabricante delante (openai/…, anthropic/…, deepseek/…). Así es como puedes ejecutar GPT, Claude, Gemini y modelos abiertos desde una única key y compararlos cambiando una sola string.

Una ruta de chat de Next.js para useChat

useChat de @ai-sdk/react envía a /api/chat por defecto. Esta ruta lo responde:

// 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();
}

Mantén la clave en el servidor. Nunca la pongas en una NEXT_PUBLIC_ variable: cualquiera podría leerla desde la página y gastar tu saldo.

Limita lo que una llamada puede costar

Las solicitudes de chat aceptan provider.max_price (dólares por millón de tokens). Pásalo a través de providerOptions con el proveedor name que elegiste:

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

Si nadie vende el modelo por debajo de ese precio en este momento, la llamada se rechaza con max_price_exceeded y no se cobra nada.

Solución de problemas

  • 401 invalid_api_key: la API key no llegó al servidor. Reinicia next dev después de editar .env.local, y verifica que process.env.UBERLLM_API_KEY esté configurado donde se ejecuta el código (servidor, no el navegador).
  • 402 insufficient_credits: añade crédito en la página de créditos.
  • 404 model_not_found: el id es incorrecto o le falta su creador. Cópialo de la página del modelo.
  • 400 wrong_endpoint: pasaste un modelo de imagen o video a streamText. Los modelos de imagen pasan por uberllm.imageModel(…) con generateImage; el video es un trabajo, consulta Crear un video o imagen.
  • El uso está vacío en los streams: configura includeUsage: true en el proveedor, como se indicó anteriormente.

Sigue leyendo

Buenos modelos para una aplicación

Todos estos admiten tool calls. El primero está en el código de abajo.

ModeloID del modelo (pega esto)Precio actual
DeepSeek V4.1 Flashdeepseek/deepseek-v4.1-flash$0.00018 entrada · $0.0014 salida / 1M
Gemini 3.5 Flashgoogle/gemini-3.5-flash$0.0150 entrada · $0.0900 salida / 1M
Claude Sonnet 5.5anthropic/claude-sonnet-5.5$0.1099 entrada · $0.5495 salida / 1M
GPT-5.5openai/gpt-5.5$0.1250 entrada · $0.7500 salida / 1M
Kimi K3moonshotai/kimi-k3$0.0010 entrada · $0.0788 salida / 1M
GLM 5.3z-ai/glm-5.3$0.00070 entrada · $0.0141 salida / 1M
Gemma 3 27Bgoogle/gemma-3-27b-it$0.00079 entrada · $0.0020 salida / 1M
Qwen3 VL 235B A22Bqwen/qwen3-vl-235b-a22b-instruct$0.0021 entrada · $0.0188 salida / 1M

Precios de la última actualización horaria, sin comisión añadida · todos los modelos →

Preguntas frecuentes

¿Funciona el Vercel AI SDK con UberLLM?

Sí. Usa el proveedor oficial @ai-sdk/openai-compatible con la baseURL https://api.uberllm.dev/v1 y tu API key de UberLLM. generateText, streamText, useChat, tool calls y generateImage funcionan.

¿Necesito @ai-sdk/openai o @ai-sdk/anthropic también?

No. Un único proveedor @ai-sdk/openai-compatible accede a todos los modelos de chat en UberLLM, incluyendo Claude, GPT y Gemini, por model id.

¿Puedo crear videos con el AI SDK?

No a través de @ai-sdk/openai-compatible, que no tiene un video model. Los vídeos son trabajos en UberLLM: inicia uno con POST /v1/video/generations y compruébalo, como se muestra en la documentación de medios.