OpenCode হলো AI SDK provider package-এর ওপর বানানো open-source terminal coding agent। এটা Tokens-এ জোড়া লাগে @ai-sdk/openai-compatible দিয়ে, যা chat completions পাঠায় https://tokens.bd/v1-এ।
Tokens CLI দিয়ে দ্রুত setup#
Tokens CLI browser দিয়ে আপনাকে sign in করায়, key তৈরি করে, default model বেছে নিতে দেয় আর OpenCode-এ একটা tokens provider যোগ করে। এর জন্য Node 18 বা তার পরের version লাগবে।
curl -fsSL https://tokens.bd/cli/tokens.mjs -o tokens.mjs && node tokens.mjs setup --base-url https://tokens.bd --agents opencodeiwr https://tokens.bd/cli/tokens.mjs -OutFile tokens.mjs; node tokens.mjs setup --base-url https://tokens.bd --agents opencodeCLI provider-টা ~/.config/opencode/opencode.json-এ merge করে, "model": "tokens/<your model>" সেট করে, আর পুরোনো file-টা opencode.json.tokens-backup-<timestamp> নামে backup রাখে। দুটো কথা মনে রাখবেন:
- key-টা file-এ লেখা হয়
options.apiKeyহিসেবে। home folder-এর file-এ এটা ঠিক আছে, কিন্তু কোনো repository-তে copy করবেন না। - model-এ
limitসেট করা হয় না। পরে (নিচে দেখুন) আসল context আর output limit নিজে বসিয়ে নিন। নইলে OpenCode লম্বা session ঠিকমতো compact করতে পারবে না।
আপনার opencode.json-এ comment থাকলে CLI file নতুন করে লেখার ঝুঁকি নেয় না। সে আপনাকে snippet-এর জন্য /dashboard/connect-এ পাঠিয়ে দেয়।
opencode.json নিজে সাজান#
OpenCode এখনো না থাকলে install করুন:
curl -fsSL https://opencode.ai/install | bash
# or
npm install -g opencode-aiআপনার key export করুন (spend cap দিয়ে key কীভাবে বানাবেন, তা আছে API keys-এ):
export TOKENS_API_KEY="tok_live_your_key"$env:TOKENS_API_KEY = "tok_live_your_key" # this window
setx TOKENS_API_KEY "tok_live_your_key" # new windowsএরপর provider যোগ করুন। global file হলো ~/.config/opencode/opencode.json। চাইলে project-এর root-এও নিজস্ব opencode.json রাখতে পারেন, আর OPENCODE_CONFIG দিয়ে অন্য কোনো path দেখানো যায়। OpenCode এই file-গুলো একটা দিয়ে আরেকটা বদলে ফেলে না, merge করে।
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"tokens": {
"npm": "@ai-sdk/openai-compatible",
"name": "Tokens",
"options": {
"baseURL": "https://tokens.bd/v1",
"apiKey": "{env:TOKENS_API_KEY}"
},
"models": {
"deepseek/deepseek-v4.1-flash": {
"name": "DeepSeek V4.1 Flash",
"limit": { "context": 128000, "output": 8192 }
}
}
}
},
"model": "tokens/deepseek/deepseek-v4.1-flash"
}{env:TOKENS_API_KEY} লিখলে OpenCode key-টা environment থেকে পড়ে, তাই file commit করলেও ভয় নেই। limit-এর সংখ্যাগুলো placeholder: model-এর আসল context window আর max output /models-এ ওই model-এর পাতা থেকে copy করে বসান।
model-এর reference লিখতে হয় provider_id/model_id ধাঁচে। আমাদের model id-তেই একটা slash আছে, তাই পুরো reference দাঁড়ায় tokens/deepseek/deepseek-v4.1-flash।
Config বানিয়ে নিন#
একটা model বেছে নিন, নিচের generator আপনার জন্য provider block ভরে দেবে:
{
"provider": {
"tokens": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://tokens.bd/v1",
"apiKey": "tok_live_your_key"
},
"models": {
"deepseek/deepseek-v4.1-flash": {}
}
}
}
}Project or global configuration for OpenCode CLI / IDE agent.
{
"env": {
"ANTHROPIC_BASE_URL": "https://tokens.bd",
"ANTHROPIC_AUTH_TOKEN": "tok_live_your_key",
"ANTHROPIC_MODEL": "deepseek/deepseek-v4.1-flash"
}
}Configure Claude Code CLI via ~/.claude/settings.json or environment exports.
# ~/.codex/config.toml model = "deepseek/deepseek-v4.1-flash" model_provider = "tokens" [model_providers.tokens] name = "Tokens" base_url = "https://tokens.bd/v1" env_key = "TOKENS_API_KEY" wire_api = "responses" # In your shell profile (~/.bashrc, ~/.zshrc): export TOKENS_API_KEY="tok_live_your_key"
Add a custom model provider to ~/.codex/config.toml and export the key in your shell.
export OPENAI_API_BASE="https://tokens.bd/v1" export OPENAI_API_KEY="tok_live_your_key" aider --model openai/deepseek/deepseek-v4.1-flash
Run Aider terminal pair programmer against the Tokens gateway.
from openai import OpenAI
client = OpenAI(
base_url="https://tokens.bd/v1",
api_key="tok_live_your_key",
)
response = client.chat.completions.create(
model="deepseek/deepseek-v4.1-flash",
messages=[
{"role": "system", "content": "You are an expert coding assistant."},
{"role": "user", "content": "Write a quick hello world in Python"},
],
temperature=0.7,
)
print(response.choices[0].message.content)Official OpenAI Python library pointing to Tokens endpoint.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://tokens.bd/v1",
apiKey: "tok_live_your_key",
});
async function main() {
const response = await client.chat.completions.create({
model: "deepseek/deepseek-v4.1-flash",
messages: [
{ role: "system", content: "You are an expert coding assistant." },
{ role: "user", content: "Write a quick hello world in Python" },
],
temperature: 0.7,
});
console.log(response.choices[0]?.message?.content);
}
main().catch(console.error);Official OpenAI Node.js SDK pointing to Tokens endpoint.
curl -X POST "https://tokens.bd/v1/chat/completions" \
-H "Authorization: Bearer tok_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-v4.1-flash",
"messages": [
{"role": "system", "content": "You are an expert coding assistant."},
{"role": "user", "content": "Write a quick hello world in Python"}
],
"temperature": 0.7
}'Raw HTTP POST request to OpenAI-compatible chat completions.
/connect দিয়ে key রাখা#
key environment-এ না রেখেও চলে: OpenCode TUI-তে /connect চালান, "Other" বেছে নিন, provider id দিন tokens, আর key paste করুন। OpenCode সেটা রাখে ~/.local/share/opencode/auth.json-এ। provider id আপনার config-এর id-র সাথে হুবহু মিলতে হবে, আর তারপর options থেকে apiKey বাদ দিতে পারবেন।
Model বদলানো#
provider.tokens.models-এর নিচে আরও entry যোগ করুন, প্রতিটা model-এর জন্য একটা করে, id নিন /models বা GET /v1/models থেকে:
"models": {
"deepseek/deepseek-v4.1-flash": { "name": "DeepSeek V4.1 Flash", "limit": { "context": 128000, "output": 8192 } },
"moonshotai/kimi-k3": { "name": "Kimi K3", "limit": { "context": 128000, "output": 8192 } }
}দ্বিতীয় id-টা একটা উদাহরণ, ঠিক id /models-এ মিলিয়ে নিন। এরপর TUI-তে /models দিয়ে model বদলাতে পারেন, নয়তো top-level model পাল্টে দিন, কিংবা একবারের জন্য --model দিন। OpenCode-এর হালকা কাজের জন্য সস্তা model চাইলে small_model-ও একই tokens/... ধাঁচে লিখতে হয়। বাছাইয়ে সাহায্য পাবেন Choosing a model-এ।
ঠিকমতো চলছে কি না দেখুন#
opencode models tokens
opencode run --model tokens/deepseek/deepseek-v4.1-flash "Reply with OK"প্রথম command-এ আপনার Tokens model-গুলোর list আসার কথা, আর দ্বিতীয়টা ছোট একটা উত্তর ছাপবে। TUI-তে /models দিলেও একই list দেখা যায়।
সমস্যা হলে#
401 missing_api_key। {env:TOKENS_API_KEY} ফাঁকা string হয়ে গেছে, কারণ যে shell থেকে OpenCode চালু করেছেন সেখানে variable-টা সেট নেই। Windows-এ setx-এর পর নতুন terminal খুলুন।
model list-এ নেই, অথবা 404 model_not_found আসছে। models-এর ভেতরের key-টা Tokens-এর id-র সাথে হুবহু মিলছে কি না দেখুন, আর model যে tokens/ আর তার পরে ওই id দিয়ে লেখা, সেটাও। slash-ওয়ালা model id নিয়ে OpenCode-এর docs আলাদা করে কিছু বলে না। OpenRouter-ধাঁচের id-ও একই রকম, তাই বানান ভুল হওয়ার সম্ভাবনাই বেশি।
ভুল package। @ai-sdk/openai-compatible ব্যবহার করুন, এটা chat completions বোঝে। @ai-sdk/openai যায় Responses API-তে, যেটা সব upstream support করে না (Responses API দেখুন)।
লম্বা session compact না হয়ে ব্যর্থ হয়। limit.context আর limit.output-এ model-এর আসল value বসান।
/connect-এর key কাজ করছে না। /connect-এ যে provider id লিখেছেন, সেটা ঠিক tokens হতে হবে।
CLI OpenCode বাদ দিয়ে গেছে। আপনার file-এ comment আছে, নয়তো JSON ভুল। ওপরের block-টা নিজের হাতে বসিয়ে নিন।
402, 403 আর 429 error-এর জন্য Troubleshooting দেখুন।