NovoConecte qualquer agente ao UberLLM: uma chave, todos os modelos, pelo preço de tabela ou menos.
UberLLM

Use o Vercel AI SDK com UberLLM (modelos mais baratos, mesmo código)

Instale @ai-sdk/openai-compatible, crie um provider com baseURL https://api.uberllm.dev/v1 e sua chave UberLLM, e passe uberllm("<model id>") onde quer que seu app passe um modelo hoje. Nada mais no app muda.

Passos

  1. Crie uma chave na sua página de chaves e adicione um pouco de crédito (contas começam em $0).
  2. Instale o provedor:
npm i ai @ai-sdk/openai-compatible
  1. Coloque a chave em .env.local (Next.js) ou no ambiente do seu servidor:
UBERLLM_API_KEY=ull_your_key
  1. Crie o provedor uma vez, por exemplo em 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. Use-o onde você usava um 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.",
});

Migrando um aplicativo que já usa @ai-sdk/openai

Troque o argumento do modelo e mantenha todo o resto:

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

Os IDs dos modelos são os IDs em uberllm.dev/models e sempre têm um fabricante na frente (openai/…, anthropic/…, deepseek/…). É assim que você pode executar GPT, Claude, Gemini e modelos abertos com uma única chave e compará-los mudando uma única string.

Uma rota de chat Next.js para useChat

useChat de @ai-sdk/react envia para /api/chat por padrão. Esta rota responde a isso:

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

Mantenha a chave no servidor. Nunca a coloque em uma variável NEXT_PUBLIC_: qualquer um poderia lê-la da página e gastar seu saldo.

Defina um teto para o custo de uma chamada

As solicitações de chat aceitam provider.max_price (dólares por milhão de tokens). Passe o valor em providerOptions, sob o provedor name que você escolheu:

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

Se ninguém vender o modelo por um preço abaixo desse no momento, a chamada é recusada com max_price_exceeded e nada é cobrado.

Solução de problemas

  • 401 invalid_api_key: a chave não chegou ao servidor. Reinicie next dev após editar .env.local, e verifique se process.env.UBERLLM_API_KEY está configurado onde o código é executado (servidor, não o navegador).
  • 402 insufficient_credits: adicione crédito na página de créditos.
  • 404 model_not_found: o ID está errado ou faltando seu criador. Copie-o da página do modelo.
  • 400 wrong_endpoint: você passou um modelo de imagem ou vídeo para streamText. Modelos de imagem passam por uberllm.imageModel(…) com generateImage; vídeo é um trabalho, veja Criar um vídeo ou imagem.
  • O uso está vazio em streams: defina includeUsage: true no provedor, como acima.

Continue lendo

Bons modelos para um app

Todos estes aceitam tool calls. O primeiro está no código abaixo.

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

Preços da última atualização de hora em hora, sem taxa adicional · todos os modelos →

Perguntas frequentes

O Vercel AI SDK funciona com UberLLM?

Sim. Use o provedor oficial @ai-sdk/openai-compatible com a baseURL https://api.uberllm.dev/v1 e sua chave UberLLM. generateText, streamText, useChat, tool calls e generateImage funcionam.

Preciso de @ai-sdk/openai ou @ai-sdk/anthropic também?

Não. Um único provedor @ai-sdk/openai-compatible alcança todos os modelos de chat na UberLLM, incluindo Claude, GPT e Gemini, por model id.

Posso fazer vídeos com o AI SDK?

Não através de @ai-sdk/openai-compatible, que não possui modelo de vídeo. Vídeos são jobs na UberLLM: inicie um com POST /v1/video/generations e verifique o status, conforme mostrado na documentação de mídia.