# Vercel AI SDK (/id/docs/guides/vercel-ai-sdk)

Pakai model cheapaimodel di Vercel AI SDK lewat penyedia yang kompatibel dengan OpenAI.



AI SDK terhubung ke layanan yang kompatibel dengan OpenAI lewat penyedia (provider) `@ai-sdk/openai-compatible`. Buat satu penyedia untuk cheapaimodel, lalu berikan model-modelnya ke `generateText`, `streamText`, dan fungsi AI SDK lainnya.

|          | Pengaturan AI SDK       | Nilai                                                                           |
| -------- | ----------------------- | ------------------------------------------------------------------------------- |
| Base URL | `baseURL`               | `https://api.cheapaimodel.ai/v1`                                                |
| API key  | `apiKey`                | Key kamu dari halaman [API key](https://console.cheapaimodel.ai/keys) di Konsol |
| ID model | `cheapaimodel(modelId)` | `deepseek-v4-1-flash`, atau ID apa pun dari [katalog](/id/models)               |

## Penyiapan [#set-it-up]

```bash title="Terminal"
npm install ai @ai-sdk/openai-compatible
```

```ts title="cheapaimodel.ts"
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";

export const cheapaimodel = createOpenAICompatible({
  name: "cheapaimodel",
  baseURL: "https://api.cheapaimodel.ai/v1",
  apiKey: process.env.CHEAPAIMODEL_API_KEY,
  includeUsage: true, // token usage on streamed responses
});
```

```ts title="generate.ts"
import { generateText } from "ai";
import { cheapaimodel } from "./cheapaimodel";

const { text } = await generateText({
  model: cheapaimodel("deepseek-v4-1-flash"),
  prompt: "Explain recursion in one sentence.",
});
console.log(text);
```

Penyedia ini mengirim permintaan ke `/v1/chat/completions`. Cara kerjanya sama di route handler Next.js: berikan `cheapaimodel("deepseek-v4-1-flash")` sebagai `model`.

## Streaming [#streaming]

```ts title="stream.ts"
import { streamText } from "ai";
import { cheapaimodel } from "./cheapaimodel";

const result = streamText({
  model: cheapaimodel("deepseek-v4-1-flash"),
  prompt: "Write a haiku about rivers.",
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}
console.log("\nTokens:", (await result.usage).totalTokens);
```

## Kesalahan umum [#common-mistakes]

* **`Unauthenticated request to AI Gateway.`** Model diberikan sebagai string biasa, misalnya `model: "deepseek-v4-1-flash"`. AI SDK mengirim string model biasa ke Vercel AI Gateway, bukan ke cheapaimodel. Berikan `cheapaimodel("deepseek-v4-1-flash")` sebagai gantinya.
* **`Not Found` atau `Invalid URL (POST /v1/chat/completions/chat/completions)`.** `baseURL` tidak memakai `/v1`, atau malah menyertakan path endpoint. Isi persis dengan `https://api.cheapaimodel.ai/v1`; penyedia akan menambahkan `/chat/completions` sendiri.
* **Pemakaian token bernilai `undefined` pada panggilan streaming.** Penyedia yang kompatibel dengan OpenAI hanya meminta data pemakaian di stream kalau `includeUsage: true` diatur. Biarkan opsi itu tetap ada di pengaturan penyedia.
* **Percakapan multi-turn lewat `@ai-sdk/openai`.** `createOpenAI` dari paket itu juga menerima Base URL kami, tapi `openai(modelId)` default memanggil Responses API. Saat kamu mengirim balik balasan SDK sebelumnya di `messages`, balasan itu dikirim sebagai ID `item_reference`, bukan sebagai teks. Cara ini hanya jalan kalau server menyimpan respons tersebut. Pakai penyedia yang kompatibel dengan OpenAI di atas, atau `openai.chat(modelId)`.
