Gebruik de Vercel AI SDK met UberLLM (goedkopere modellen, dezelfde code)
Installeer @ai-sdk/openai-compatible, maak een provider aan met baseURL https://api.uberllm.dev/v1 en je UberLLM key, en geef uberllm("<model id>") door waar je app vandaag een model doorgeeft. Verder verandert er niets in de app.
Stappen
- Maak een sleutel aan op je sleutels-pagina en voeg wat tegoed toe (accounts beginnen bij $0).
- Installeer de provider:
npm i ai @ai-sdk/openai-compatible
- Plaats de sleutel in
.env.local(Next.js) of de omgeving van je server:
UBERLLM_API_KEY=ull_your_key
- Maak de provider één keer aan, bijvoorbeeld in
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
});
- Gebruik deze waar je eerder een model gebruikte:
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.",
});
Een app verplaatsen die al gebruikmaakt van @ai-sdk/openai
Verwissel het model argument en houd al het andere hetzelfde:
// 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");
Model-ID's zijn de ID's op uberllm.dev/models en hebben altijd een maker ervoor (openai/…, anthropic/…, deepseek/…). Zo kun je GPT, Claude, Gemini en open modellen draaien met één key en ze vergelijken door één string te wijzigen.
Een Next.js chatroute voor useChat
Standaard stuurt useChat van @ai-sdk/react naar /api/chat. Deze route beantwoordt dat:
// 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();
}
Bewaar de sleutel op de server. Plaats deze nooit in een NEXT_PUBLIC_ variabele: iedereen zou deze van de pagina kunnen lezen en je tegoed kunnen opmaken.
Beperk wat één oproep kan kosten
Chatverzoeken accepteren provider.max_price (dollars per miljoen tokens). Geef het door via providerOptions onder de provider name die je hebt gekozen:
await generateText({
model: uberllm("deepseek/deepseek-v4.1-flash"),
prompt: "Hi",
providerOptions: { uberllm: { provider: { max_price: { prompt: 0.2, completion: 0.4 } } } },
});
Als niemand het model op dit moment onder die prijs verkoopt, wordt de oproep geweigerd met max_price_exceeded en wordt er niets in rekening gebracht.
Probleemoplossing
- 401
invalid_api_key: de sleutel heeft de server niet bereikt. Herstartnext devna het bewerken van.env.local, en controleer ofprocess.env.UBERLLM_API_KEYis ingesteld waar de code draait (server, niet de browser). - 402
insufficient_credits: voeg tegoed toe op de tegoedpagina. - 404
model_not_found: de ID is verkeerd of mist de maker. Kopieer deze van de modelpagina. - 400
wrong_endpoint: je hebt een afbeeldings- of videomodel doorgegeven aanstreamText. Afbeeldingsmodellen gaan viauberllm.imageModel(…)metgenerateImage; video is een taak, zie Maak een video of afbeelding. - Gebruik is leeg bij streams: stel
includeUsage: truein op de provider, zoals hierboven.
Lees verder
- De volledige referentie met tool calls en afbeeldingen: Vercel AI SDK doc
- OpenAI-compatibele endpoint uitgelegd
- Live LLM prijzen