Gunakan Vercel AI SDK dengan UberLLM (model lebih murah, kode sama)
Instal @ai-sdk/openai-compatible, buat provider dengan baseURL https://api.uberllm.dev/v1 dan kunci UberLLM Anda, dan teruskan uberllm("<model id>") di mana pun aplikasi Anda meneruskan model saat ini. Tidak ada hal lain di aplikasi yang berubah.
Langkah-langkah
- Buat kunci di halaman kunci Anda dan tambahkan sedikit kredit (akun dimulai dari $0).
- Instal penyedia:
npm i ai @ai-sdk/openai-compatible
- Masukkan kunci di
.env.local(Next.js) atau lingkungan server Anda:
UBERLLM_API_KEY=ull_your_key
- Buat penyedia sekali saja, misalnya di
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
});
- Gunakan ini di tempat Anda menggunakan model sebelumnya:
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.",
});
Memindahkan aplikasi yang sudah menggunakan @ai-sdk/openai
Ganti argumen model dan biarkan yang lainnya tetap sama:
// 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");
ID model adalah ID yang ada di uberllm.dev/models dan selalu diawali dengan nama pembuatnya (openai/…, anthropic/…, deepseek/…). Begitulah cara Anda dapat menjalankan GPT, Claude, Gemini, dan model-model terbuka dari satu kunci dan membandingkannya dengan mengubah satu string.
Rute chat Next.js untuk useChat
useChat dari @ai-sdk/react mengirim ke /api/chat secara default. Rute ini menjawabnya:
// 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();
}
Simpan kunci di server. Jangan pernah meletakkannya di variabel NEXT_PUBLIC_: siapa pun bisa membacanya dari halaman dan menghabiskan saldo Anda.
Batas biaya satu panggilan
Permintaan chat menerima provider.max_price (dolar per juta token). Lewatkan melalui providerOptions di bawah penyedia name yang Anda pilih:
await generateText({
model: uberllm("deepseek/deepseek-v4.1-flash"),
prompt: "Hi",
providerOptions: { uberllm: { provider: { max_price: { prompt: 0.2, completion: 0.4 } } } },
});
Jika tidak ada yang menjual model tersebut di bawah harga tersebut saat ini, panggilan ditolak dengan max_price_exceeded dan tidak ada biaya yang dikenakan.
Pemecahan Masalah
- 401
invalid_api_key: kunci tidak mencapai server. Mulai ulangnext devsetelah mengedit.env.local, dan pastikanprocess.env.UBERLLM_API_KEYdiatur di tempat kode berjalan (server, bukan browser). - 402
insufficient_credits: tambahkan kredit di halaman kredit. - 404
model_not_found: ID salah atau tidak ada pembuatnya. Salin dari halaman model. - 400
wrong_endpoint: Anda meneruskan model gambar atau video kestreamText. Model gambar melaluiuberllm.imageModel(…)dengangenerateImage; video adalah pekerjaan, lihat Buat video atau gambar. - Penggunaan kosong pada streaming: atur
includeUsage: truepada penyedia, seperti di atas.
Baca juga
- Referensi lengkap, termasuk panggilan alat dan gambar: Vercel AI SDK doc
- Endpoint yang kompatibel dengan OpenAI dijelaskan
- Harga LLM terkini