# Factory Droid-কে Tokens-এর সাথে যুক্ত করুন

> ~/.factory/settings.json-এ custom model হিসেবে Factory-র Droid CLI-তে Tokens-এর model যোগ করুন, Chat Completions বা Anthropic Messages protocol দিয়ে।

Droid হলো Factory-র terminal coding agent। এটা bring-your-own-key **custom model** সাপোর্ট করে, যেগুলো ঘোষণা করতে হয় `~/.factory/settings.json`-এ। Tokens-এর জন্য ব্যবহার করুন `generic-chat-completion-api` provider type, যেটা OpenAI Chat Completions request পাঠায় `https://tokens.bd/v1`-এ। Anthropic Messages variant নিচে আলাদা করে বলা আছে।

## Droid install করুন

Factory-র quickstart থেকে:

```bash
# macOS / Linux
curl -fsSL https://app.factory.ai/cli | sh

# or
brew install --cask droid
npm install -g droid
```

```powershell
# Windows PowerShell
irm https://app.factory.ai/cli/windows | iex
```

## ~/.factory/settings.json-এ Tokens custom model যোগ করুন

### 1. আপনার key export করুন

Dashboard থেকে একটা key তৈরি করুন (cap আর allow-list-এর কথা আছে [API keys](/docs/api-keys) পাতায়), তারপর shell profile-এ সেটা export করুন:

```bash
export TOKENS_API_KEY=tok_live_your_key
```

### 2. custom model যোগ করুন

`~/.factory/settings.json`-এ একটা `customModels` array যোগ করুন:

```json title="~/.factory/settings.json"
{
  "customModels": [
    {
      "model": "deepseek/deepseek-v4.1-flash",
      "displayName": "DeepSeek V4.1 Flash (Tokens)",
      "baseUrl": "https://tokens.bd/v1",
      "apiKey": "${TOKENS_API_KEY}",
      "provider": "generic-chat-completion-api",
      "maxOutputTokens": 8192,
      "noImageSupport": true
    }
  ]
}
```

প্রতিটা field-এর কাজ:

- `model` হলো Tokens-এর হুবহু ID, যেমন আছে তেমনই upstream-এ যায়। ID-র ভেতরের slash নিয়ে চিন্তার কিছু নেই।
- `displayName` হলো Droid-এর model menu-তে যে নামে দেখবেন।
- `baseUrl` হলো OpenAI-compatible base, `/v1` সহ।
- `apiKey`-তে `${VAR}` expansion ব্যবহার হয়েছে, তাই key file-এ না থেকে আপনার environment-এই থাকে।
- `provider` ঠিক করে কোন protocol চলবে। নিচের table দেখুন।
- `maxOutputTokens` একটা উদাহরণ। [model catalog](/models) থেকে model-এর output সীমা দেখে বসান।
- `noImageSupport: true` দিলে text-only model-এ Droid image পাঠায় না। catalog-এ যে model-এর image input আছে, সেটার জন্য এটা সরিয়ে দিন।

file-এ আগে থেকে অন্য settings থাকলে file বদলে না দিয়ে তার পাশে `customModels` যোগ করুন।

### provider type বেছে নিন

`provider`-এর মান অবশ্যই এগুলোর একটা হতে হবে:

| `provider`                    | Protocol                | Tokens endpoint        |
| ----------------------------- | ----------------------- | ---------------------- |
| `generic-chat-completion-api` | OpenAI Chat Completions | `/v1/chat/completions` |
| `openai`                      | OpenAI Responses        | `/v1/responses`        |
| `anthropic`                   | Anthropic Messages      | `/v1/messages`         |

Tokens-এর জন্য `generic-chat-completion-api` ব্যবহার করুন। `openai` type-টাকেই স্বাভাবিক পছন্দ মনে হয়, কিন্তু ওটার মানে Responses API। Tokens `/v1/responses` চালায় ঠিকই, তবে সেটা কাজ করবে কিনা নির্ভর করে প্রতিটা model-এর পেছনের upstream provider-এর ওপর।

### Anthropic Messages variant

Messages API-র জন্য `"provider": "anthropic"` আর `"baseUrl": "https://tokens.bd"` দিন, `/v1` ছাড়া। Factory-র নিজের `https://api.anthropic.com` উদাহরণের সাথে এটা মেলে। Droid default-এ key পাঠায় `x-api-key` header-এ, আর Tokens সেটা গ্রহণ করে। চাইলে `"authMode": "bearer"` দিলে সেটা `Authorization: Bearer`-এ বদলে যায়। format-এর বিবরণ আছে [Messages](/docs/messages) পাতায়।

### পুরোনো config.json

পুরোনো setup-এ `~/.factory/config.json` আর snake_case-এর `custom_models` ব্যবহার হতো। Droid এখনো ওটা load করে, কিন্তু ওই file-এ `${VAR}` expand হয় না, তাই key plain text-এ লিখতে হবে। `settings.json`-এ চলে আসুন।

## model বদলান

প্রতিটা Tokens model-এর জন্য `customModels`-এ একটা করে object যোগ করুন। Droid-এ `/model` চালান। custom model-গুলো "Custom models" নামে আলাদা section-এ দেখা যায়। Droid settings file-এর ওপর নজর রাখে, তাই নতুন entry restart ছাড়াই দেখা যায়।

সঠিক ID পাবেন [catalog](/models) থেকে, অথবা:

```bash
curl -s https://tokens.bd/v1/models -H "Authorization: Bearer $TOKENS_API_KEY"
```

agent-এর কাজে কোন model ভালো, তা [Choosing a model](/docs/choosing-a-model) পাতায় আছে।

## ঠিকমতো চলছে কিনা দেখুন

আগে key আর model সরাসরি পরীক্ষা করুন:

```bash
curl -s https://tokens.bd/v1/chat/completions \
  -H "Authorization: Bearer $TOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek/deepseek-v4.1-flash", "max_tokens": 16, "messages": [{"role": "user", "content": "Reply with OK"}]}'
```

এরপর `droid` চালান, `/model` থেকে "DeepSeek V4.1 Flash (Tokens)" বেছে নিন, আর বর্তমান project-এর একটা file পড়তে বলুন। request-টা আপনার Dashboard-এর usage analytics-এ দেখা যাবে।

## সমস্যা হলে

**Custom models-এর নিচে model আসছে না।** JSON ভুল আছে (সাধারণত শেষে বাড়তি comma থাকলে এটা হয়), অথবা `customModels` camelCase নামে `config.json`-এ বসানো হয়েছে।

**401 `missing_api_key`।** `${TOKENS_API_KEY}` expand হয়ে ফাঁকা হয়ে গেছে। যে shell থেকে `droid` চালান সেখানে variable-টা export করুন।

**401 `invalid_api_key`।** key ভুল, revoke করা বা rotate করা। rotate করলে পুরোনো secret সঙ্গে সঙ্গে বন্ধ হয়ে যায়।

**404 `model_not_found`।** `model`-এ provider prefix সহ Tokens-এর পুরো ID দিতে হবে।

**প্রতিটা request-এ 404।** `baseUrl` দেখুন: `generic-chat-completion-api`-র জন্য `https://tokens.bd/v1`, `anthropic`-এর জন্য `https://tokens.bd`।

**tool বা caching-এ অদ্ভুত আচরণ।** Factory বলছে, Droid-এর সাথে শুধু official Anthropic আর OpenAI model পুরোপুরি পরীক্ষা করা, আর generic provider-এ prompt caching-এর নিশ্চয়তা নেই। gateway-র দোষ ধরার আগে অন্য একটা model দিয়ে দেখুন।

**429 error।** `Retry-After` দেখুন, আর প্রতিটা rate limit code-এর জন্য [Troubleshooting](/docs/troubleshooting) পড়ুন।

request-এর format আছে [Chat Completions](/docs/chat-completions) পাতায়। একই ধাঁচের setup-ওয়ালা আরও terminal agent: [Claude Code](/docs/claude-code), [OpenCode](/docs/opencode) আর [Crush](/docs/crush)।

সূত্র: [Factory docs, BYOK overview](https://docs.factory.com/cli/byok/overview), [Droid quickstart](https://docs.factory.com/droid-cli/quickstart), 2026 সালের অক্টোবরে যাচাই করা।

---
Page: https://tokens.bd/bn/docs/factory-droid
