Bumalik sa blog

API at SDKGabay

Vercel AI SDK na may custom base URL: CheapTokens sa TypeScript

Itutok ang Vercel AI SDK sa CheapTokens gamit ang createOpenAICompatible: gumaganang generateText at streamText snippet, token usage at mga fix para sa karaniwang error.

Ni CheapTokens TeamNai-publish noong 5 min na pagbabasa

Vercel AI SDK code na may createOpenAICompatible at ang CheapTokens base URL
Sa pahinang ito
  1. I-install at gumawa ng provider
  2. generateText: isang sagot at ang token count nito
  3. streamText: i-print ang mga salita habang dumarating
  4. Palitan ang model nang hindi hinahawakan ang iba
  5. Kung hindi gumana

Para patakbuhin ang Vercel AI SDK sa CheapTokens, i-install ang @ai-sdk/openai-compatible, gumawa ng provider gamit ang baseURL: 'https://api.cheaptokens.dev/v1' at ang iyong key, at ipasa ang provider('deepseek-ai/DeepSeek-V4-Flash-0731') bilang ang model. Ang lahat ng iba pa sa iyong app, generateText, streamText, ang iyong mga prompt, ay mananatiling gaya ng dati.

Kaya kung mayroon ka nang Next.js route o Node script na nakikipag-usap sa isang hosted model sa pamamagitan ng AI SDK, tatlong bagay ang babaguhin mo: ang base URL, ang key at ang model id. Sinusuri ng gabay na ito ang setup laban sa OpenAI-compatible providers page ng AI SDK (29 Oktubre 2026). Ginagamit nito ang Chat Completions interface ng CheapTokens API, na siyang sinasalita ng provider na iyon.

I-install at gumawa ng provider#

Dalawang package: ang core na ai package at ang OpenAI-compatible provider.

bash
npm install ai @ai-sdk/openai-compatible
export CHEAPTOKENS_API_KEY=ct_your_key_here

Maikli lang ang pagkakasunod-sunod ng trabaho:

Ilagay sa tamang pagkakasunod-sunod

Ayusin ang setup

  1. Mag-top up ng balanse at gumawa ng API key
  2. Ilagay ang key sa isang environment variable
  3. Gumawa ng provider gamit ang CheapTokens baseURL
  4. Ipasa ang buong model id sa generateText

Ang provider mismo ay isang tawag sa createOpenAICompatible:

typescript
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

export const cheaptokens = createOpenAICompatible({
  name: 'cheaptokens',
  apiKey: process.env.CHEAPTOKENS_API_KEY,
  baseURL: 'https://api.cheaptokens.dev/v1',
  includeUsage: true,
});

Ang name ay label lang para sa iyong sariling mga log. Hinihiling ng includeUsage: true ang token counts sa streaming responses din; kung wala ito, ang default ay kumikilos tulad ng false. Ang pagtawag sa cheaptokens('model-id') ay nagbibigay sa iyo ng chat model; ang cheaptokens.chatModel('model-id') at cheaptokens.languageModel('model-id') ay ganoon din ang ginagawa.

Ang landas ng isang request: ang iyong app, createOpenAICompatible, ang CheapTokens API
Patuloy na tumatawag ang iyong code sa AI SDK; ang provider lang sa ilalim ang nagbabago

Kailangang buo ang model id: deepseek-ai/DeepSeek-V4-Flash-0731. Ang maikling pangalan tulad ng deepseek-v4-flash-0731 ang nakikita mo sa mga price table, at hindi ito tatanggapin ng API. Kung hindi ka sigurado kung ano ang ita-type, ilista ang mga model gamit ang GET /v1/models at kopyahin ang id mula doon.

generateText: isang sagot at ang token count nito#

Narito ang isang kumpletong script. Humihingi ito ng maikling sagot at ipinapakita ang parehong text at ang usage object.

typescript
import { generateText } from 'ai';
import { cheaptokens } from './provider';

const result = await generateText({
  model: cheaptokens('deepseek-ai/DeepSeek-V4-Flash-0731'),
  prompt: 'Explain in two sentences what a base URL is.',
});

console.log(result.text);
console.log(result.usage);

Patakbuhin ito gamit ang npx tsx index.ts. Makukuha mo ang sagot bilang string sa result.text, at ang result.usage ay naglalaman ng input at output token counts para sa tawag na iyon. Ipinapakita namin ang buong object para makita mo ang lahat ng laman nito. Sa AI SDK reference para sa streamText (sinuri 29 Oktubre 2026) ang usage ay may inputTokens, outputTokens at totalTokens; suriin ang mga type ng naka-install na bersyon bago ikabit ang mga ito sa isang dashboard.

Bakit pa babasahin ang usage? Dahil iyon ang bilang na binabayaran mo. Sabihin nating nagpapadala ang app mo ng 1,500-token prompt at nakakakuha ng 600-token na sagot. Ang request na iyon ay nagkakahalaga ng $0.000083 sa kasalukuyang presyo, at ganito ang hitsura ng isang libo nito:

Modelo Bawat kahilingan 1,000 mga kahilingan OpenRouter, 1,000 mga kahilingan
GLM-5.3-Flash $0.000054 $0.054 $0.107
DeepSeek-V4-Flash $0.000083 $0.0825 $0.165
MiniMax-M2.7 $0.00017 $0.165 $1.17

1,500 input at 600 output na token bawat kahilingan. Ang mga presyo kada 1M token ay kasalukuyan at nagbabago kasabay ng aming mga taripa; ang column ng OpenRouter ay nagpapakita ng reference na presyo para sa parehong workload.

Ang column ng CheapTokens ay kabuuan, input at output na pinagsama, mas mura kaysa OpenRouter para sa bawat model sa table. Kung gusto mong gawing running budget ang usage, ipinapakita ng tracking agent token cost ang ideya sa Python; pareho ang aritmetika sa TypeScript.

streamText: i-print ang mga salita habang dumarating#

Para sa chat UI gusto mong lumitaw ang text habang nagsusulat pa ang model. Ang streamText ay nagbibigay sa iyo ng async iterable ng mga text chunk.

typescript
import { streamText } from 'ai';
import { cheaptokens } from './provider';

const result = streamText({
  model: cheaptokens('deepseek-ai/DeepSeek-V4-Flash-0731'),
  prompt: 'Write a 100-word product description for a pocket notebook.',
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}

console.log('\n', await result.usage);

Pansinin na walang await sa harap ng streamText(...): agad itong bumabalik at ikaw ang kumokonsumo ng stream. Ang usage ay isang promise na nagtatapos kapag natapos ang stream, kaya i-await ito pagkatapos ng loop. Sa isang Next.js route handler, ibabalik mo ang stream sa browser sa halip na magsulat sa stdout; pareho lang ang bahagi ng provider. Kung gusto mo ang parehong bagay gamit ang plain OpenAI SDK, tingnan ang streaming chat responses sa Node.js.

Ayos lang ang mahahabang sagot dito: ang DeepSeek-V4-Flash sa CheapTokens ay makakasulat ng hanggang 32,768 token sa isang sagot, may 380K context window at isang presyo sa kahit anong oras. Ang model page ay nasa /en/cheap-deepseek/, at ang kasalukuyang presyo ay nasa pricing page.

Palitan ang model nang hindi hinahawakan ang iba#

Dahil model id lang ang nagbabago, isang linyang edit lang ang pagsubok ng ibang model. Ang GLM-5.3-Flash ay may 390K context window at sumasagot ng hanggang 8,192 token; sa kasalukuyang presyo, nagkakahalaga ito ng $0.02 kada 1M input token at $0.04 kada 1M output token.

Subukan mo mismoSubukan: aling linya ang babaguhin mo para patakbuhin ang parehong script sa GLM-5.3-Flash?Ipakita ang sagot

Ang model id lang: cheaptokens('zai-org/GLM-5.3-Flash'). Ang provider, ang key, ang baseURL at ang iba pang bahagi ng script ay mananatiling pareho.

Isang madaling pattern ay itago ang id sa isang environment variable (process.env.MODEL_ID) para makapagkumpara ka ng dalawang model sa parehong prompt nang walang rebuild. Nakakatulong ang DeepSeek vs GLM vs MiniMax comparison sa pagpili kung alin ang sulit subukan.

Kung hindi gumana#

Karamihan ng pagkabigo ay isa sa tatlo: ang key, ang URL o ang model id.

  • 401 ay nangangahulugang kulang o mali ang key. Tiyakin na naka-set ang CHEAPTOKENS_API_KEY sa shell na nagpapatakbo ng script (kailangan ito ng Next.js server sa .env.local at kailangan ng restart).
  • 404 ay karaniwang nangangahulugang nawala ang /v1 sa baseURL o ang model id ay ang maikling pangalan. Gamitin ang https://api.cheaptokens.dev/v1 at ang buong id.
  • Huminto ang sagot sa gitna ng pangungusap. Naabot ng model ang output limit; ipinapaliwanag ito ng finish_reason "length" fix.

Ang mas mahabang walkthrough ng unang dalawa ay nasa API 401 o 404: maling key, base URL o model id.

Listahan ng dapat gawin

Bago patakbuhin ang script

Para sa pagkonekta ng iba pang tool at sa unang request nang manu-mano, magsimula sa CheapTokens docs.