Bumalik sa blog

PagsisimulaGabay

Lumipat mula OpenRouter patungong CheapTokens: base_url, key, model id

Palitan ang base_url, API key at model id sa OpenAI SDK (Python at JavaScript), magpadala ng unang request at tiyakin na gumana ito.

Ni CheapTokens TeamNai-publish noong 5 min na pagbabasa

Cover: paglilipat ng OpenAI-SDK app mula OpenRouter patungong CheapTokens sa pamamagitan ng pagpalit ng base_url, key at model id
Sa pahinang ito
  1. Ano ang aktwal na nagbabago
  2. Ang code pagkatapos ng paglipat
  3. Tiyakin na gumana ito
  4. Aling modelo ang pumapalit sa ano
  5. Magkano ang parehong traffic
  6. Kung hindi ito gumana
  7. Bago mo i-ship

Ang iyong app ay tumatawag na sa OpenRouter sa pamamagitan ng OpenAI SDK, at gusto mong tumawag ito sa CheapTokens sa halip. Binabago mo ang tatlong value — base_url, ang API key at ang model id — at tinatanggal ang dalawang opsyonal na header. Ang natitirang code ay nananatiling gaya ng dati.

Nasa ibaba ang eksaktong mga linya para sa Python, JavaScript at curl, isang mabilis na paraan upang kumpirmahin na gumana ang paglipat, at isang talahanayan kung aling modelo ang angkop sa aling gawain. Kung hindi ka pa nagpadala ng request sa CheapTokens, ang unang gabay sa API request ay sumasaklaw sa account at key; ang docs ay may buong reference.

Ano ang aktwal na nagbabago#

Ang quickstart ng OpenRouter (sinuri noong 27 Oktubre 2026) ay nag-configure ng OpenAI client gamit ang base URL na https://openrouter.ai/api/v1 at pinangalanan ang mga modelo bilang provider/model-name. Ang CheapTokens ay nagsasalita ng parehong OpenAI Chat Completions format sa https://api.cheaptokens.dev/v1. Kaya ang client class, chat.completions.create at ang paraan ng pagbasa mo ng sagot ay hindi gumagalaw.

Bago at pagkatapos: ang tatlong value na nagbabago kapag lumipat mula OpenRouter patungong CheapTokens
Ang tatlong value na papalitan. Ang key ay ipinapakita bilang environment variable, hindi kailanman sa code.

Iyon ay isang palitan bawat linya:

  • base URL — https://api.cheaptokens.dev/v1 sa halip na ang OpenRouter address;
  • API key — isang key mula sa iyong CheapTokens account, binabasa mula sa environment variable;
  • model id — ang buong CheapTokens id, halimbawa deepseek-ai/DeepSeek-V4-Flash-0731. Kunin ang mga id mula sa CheapTokens docs: iba't ibang provider ang nagpapangalan sa parehong modelo nang iba, at ang mga maiikling id mula sa mga price label ay hindi tinatanggap.

At isang pagtanggal. Ang HTTP-Referer at X-OpenRouter-Title headers ng OpenRouter ay opsyonal at nagpapakain lamang sa mga leaderboard ng OpenRouter. Alisin ang mga ito mula sa default_headers / defaultHeaders; hindi mo kailangan ang mga ito dito.

Ang code pagkatapos ng paglipat#

Parehong request, tatlong runtime. Piliin ang ginagamit ng iyong app.

Ang iyong code pagkatapos ng paglipat

Python

python
import os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)

resp = client.chat.completions.create(
    model='deepseek-ai/DeepSeek-V4-Flash-0731',
    messages=[{'role': 'user', 'content': 'Reply with one word: ready'}],
    max_tokens=20,
)
print(resp.choices[0].message.content)

JavaScript

javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.cheaptokens.dev/v1',
  apiKey: process.env.CHEAPTOKENS_API_KEY,
});

const resp = await client.chat.completions.create({
  model: 'deepseek-ai/DeepSeek-V4-Flash-0731',
  messages: [{ role: 'user', content: 'Reply with one word: ready' }],
  max_tokens: 20,
});
console.log(resp.choices[0].message.content);

curl

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-ai/DeepSeek-V4-Flash-0731", "messages": [{"role": "user", "content": "Reply with one word: ready"}], "max_tokens": 20}'

Isa pang bagay bago mo ito patakbuhin. Kung ang iyong request ay may mga field na para lamang sa OpenRouter — routing o fallback lists, provider preferences, ~alias model ids — ang mga iyon ay pag-aari ng OpenRouter. Panatilihin ang request sa mga standard na Chat Completions field: model, messages, temperature, max_tokens, stream.

Tiyakin na gumana ito#

Hindi sapat na patunay ang isang sagot. I-print ang tatlong bagay sa tabi nito: aling modelo ang sumagot, bakit ito tumigil, at magkano ang sinisingil nito sa tokens.

python
print(resp.model)
print(resp.choices[0].finish_reason)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)
Ang environment at ang check script ay tumatakbo sa terminal
Itakda ang key nang isang beses, patakbuhin ang check, basahin ang model, finish_reason at usage.

Ang finish_reason ng stop ay nangangahulugang ang modelo ay natapos nang kusa. Ang length ay nangangahulugang pinutol ng max_tokens ang sagot. Ang usage ay nagpapakita ng input at output tokens nang hiwalay, at iyon ang dalawang numero na bumubuo sa iyong bill — pareho ng dalawang sinusubaybayan mo sa OpenRouter.

Subukan mo mismoSubukan: ano ang sinasabi ng finish_reason kung itinakda mo ang max_tokens sa 1?Ipakita ang sagot

Sinasabi nito na length — ang sagot ay pinutol ng max_tokens. Magandang pagsubok na hinahawakan ng iyong code ang isang putol na sagot.

Aling modelo ang pumapalit sa ano#

Piliin ang modelo ayon sa gawain, hindi ayon sa pangalan na ginamit mo sa OpenRouter. Ang mga katotohanan sa ibaba ay mula sa listahan ng presyo ng CheapTokens na sinuri noong 27 Oktubre 2026; isang balanse ang sumasaklaw sa lahat ng tatlong modelo at ang presyo ay hindi nagbabago sa oras ng araw.

Modelo model id Konteksto Max na sagot
DeepSeek-V4-Flash deepseek-ai/DeepSeek-V4-Flash-0731 380K 32,768 tokens
GLM-5.3-Flash zai-org/GLM-5.3-Flash 390K 8,192 tokens
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 180K 8,192 tokens

Hindi sigurado kung aling row ang sa iyo? Magsimula sa ginagawa ng app:

Piliin ang iyong kaso

Ano ang kadalasang ginagawa ng iyong app?

Maikli, madalas na request — classification, extraction, support replies

Subukan ang zai-org/GLM-5.3-Flash: 390K context, sagot hanggang 8,192 tokens, at mas mura ito kaysa OpenRouter sa kabuuan, input at output na pinagsama.

Mahahabang sagot, code, agent loops

Subukan ang deepseek-ai/DeepSeek-V4-Flash-0731: sagot hanggang 32,768 tokens, 380K context, isang presyo sa anumang oras ng araw.

Tuloy-tuloy na workload na binabayaran mo ng mataas na OpenRouter rate

Subukan ang MiniMaxAI/MiniMax-M2.7: 180K context, sagot hanggang 8,192 tokens, at sa kabuuan ay lumalabas na mas mura kaysa OpenRouter.

Magkano ang parehong traffic#

Sabihin nating ang iyong bot ay nagpapadala ng 1,000 request, bawat isa ay may humigit-kumulang 500 input tokens at 300 output tokens. Iyon ay isang assumption — palitan ng sarili mong numero mula sa usage. Ang talahanayan sa ibaba ay live: ang aming mga presyo at ang OpenRouter column ay mula sa kasalukuyang listahan ng presyo, input at output na pinagsama.

Modelo Bawat kahilingan 1,000 mga kahilingan OpenRouter, 1,000 mga kahilingan
GLM-5.3-Flash $0.000022 $0.022 $0.0434
DeepSeek-V4-Flash $0.000038 $0.0375 $0.0708
MiniMax-M2.7 $0.00007 $0.07 $0.51

500 input at 300 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.

Sa DeepSeek-V4-Flash ang 1,000 request na iyon ay umabot sa $0.0375. Ang buong presyo ay nasa pricing page; ang ideya ng sinisingil sa iyo ay nasa input vs output tokens.

Kung hindi ito gumana#

Pagkatapos ng paglipat, tatlong error ang sumasaklaw sa karamihan ng problema. Itugma ang mensahe sa sanhi:

Itugma ang mga pares

Itugma ang bawat sintomas sa sanhi nito

  • 401 UnauthorizedNawawala ang key, mali ang pagkakasulat, o OpenRouter pa rin ang gamit
  • 404 Not FoundMali ang base URL path o ang model id ay hindi buong CheapTokens id
  • Putol ang sagot sa gitna ng pangungusapMas mababa ang max_tokens kaysa kailangan ng sagot; sinasabi ng finish_reason na length

Ang artikulo sa 401 at 404 troubleshooting ay dumadaan sa bawat isa kasama ang eksaktong mga mensahe, at ang ano ang base_url ay nagpapaliwanag kung bakit isang maling slash ang sumisira sa path.

Bago mo i-ship#

Listahan ng dapat gawin

Checklist ng paglipat