Skip to content

LibreChat-কে Tokens-এর সাথে যুক্ত করুন

LibreChat-এ Tokens যোগ করুন librechat.yaml-এর custom endpoint হিসেবে: base URL, .env থেকে key, model list, সস্তা title model, Docker mount আর error সমাধান।

যেসব tool-এ কাজ করেLibreChat
Markdown-এ দেখুন
এই পাতায়

LibreChat একটা self-hosted chat application। OpenAI-compatible provider এতে যোগ করতে হয় librechat.yaml নামের file-এ, custom endpoint হিসেবে। base URL https://tokens.bd/v1 দিয়ে একটা custom endpoint বানালে LibreChat Tokens-এ Chat Completions request পাঠায়। Custom endpoint দিয়ে LibreChat Anthropic Messages API-র সাথেও কথা বলতে পারে, সেটা শেষের দিকে আছে।

এই গাইড LibreChat-এর documentation দেখে লেখা, 11 অক্টোবর 2026-এ মিলিয়ে দেখা হয়েছে। তখন সবচেয়ে নতুন release ছিল v0.8.8, আর তার repository-র librechat.example.yaml config version: 1.3.17 ব্যবহার করে। মিলিয়ে দেখা হয়েছে documentation-এর সাথে, কোনো live LibreChat install-এ শুরু থেকে শেষ পর্যন্ত চালিয়ে দেখা হয়নি।

শুরুর আগে#

  • একটা Tokens key। Dashboard থেকে বানিয়ে নিন। spend cap আর allowed models-এর কথা আছে API keys পেজে।
  • এমন LibreChat install, যেখানে librechat.yaml আর .env edit করা যায়, এবং restart করা যায়।
  • model catalog থেকে একটা model id। এই গাইডে deepseek/deepseek-v4.1-flash ব্যবহার করা হয়েছে। Id-র চেহারা provider/model।

.env-এ key যোগ করুন#

LibreChat-এর documentation বলে, key librechat.yaml-এ না লিখে .env থেকে ${VAR_NAME} দিয়ে ধরতে। LibreChat project-এর root-এ থাকা .env file-এ key-টা যোগ করুন:

.env
TOKENS_API_KEY=tok_live_your_key

.env যেন git-এ না যায়। Config-এর প্রতিটা ${...} reference-এর জন্য এখানে একটা মিল থাকা চাই। না থাকলে endpoint তবুও দেখা যায়, কিন্তু message পাঠানোর সময় Missing API Key for <endpoint> error আসে।

librechat.yaml-এ endpoint যোগ করুন#

.env-এর পাশে librechat.yaml বানান (অথবা .env-এ CONFIG_PATH-এ তার পুরো path দিন), তারপর endpoints.custom-এর নিচে Tokens যোগ করুন:

librechat.yaml
version: 1.3.17
cache: true
endpoints:
  custom:
    - name: 'Tokens'
      apiKey: '${TOKENS_API_KEY}'
      baseURL: 'https://tokens.bd/v1'
      models:
        default: ['deepseek/deepseek-v4.1-flash']
        fetch: true
      titleConvo: true
      titleModel: 'deepseek/deepseek-v4.1-flash'
      modelDisplayLabel: 'Tokens'

আগে থেকেই librechat.yaml থাকলে শুধু - name: 'Tokens' block-টা বিদ্যমান endpoints.custom list-এর নিচে বসান, আর আপনার নিজের version যেমন আছে তেমনই রাখুন।

LibreChat-এর reference অনুযায়ী প্রতিটা field কী করে:

  • name: আবশ্যক, আর unique হতে হবে (বড়-ছোট হাতের অক্ষর না দেখে মেলানো হয়)। Endpoint selector-এ এটাই title হয়ে দেখা যায়।
  • apiKey আর baseURL: দুটোই আবশ্যক। ${TOKENS_API_KEY} মানটা .env থেকে পড়ে। LibreChat user_provided-ও মানে, তখন প্রতিটা user interface-এ নিজের key টাইপ করে। Key সরাসরি file-এ plain text-এ লেখা সম্ভব, কিন্তু docs তা করতে বারণ করে।
  • models: আবশ্যক। default একটা ফাঁকা-নয় এমন list, আর fetch ব্যর্থ হলে এটাই ভরসা। fetch: true দিলে LibreChat endpoint-এর কাছ থেকে model list চেয়ে নেয়।
  • titleConvo আর titleModel: conversation-এর title চালু করে, আর কোন model title লিখবে তা ঠিক করে। নিচে দেখুন, কারণ এর ডিফল্ট Tokens-এর কোনো model নয়।
  • modelDisplayLabel: response-এর পাশে যে নাম দেখা যায়।

name, baseURL, apiKey বা models না থাকলে বা বানান ভুল হলে, অথবা models-এ fetch: true আর default list কোনোটাই না থাকলে, LibreChat entry-টা কোনো শব্দ না করেই বাদ দেয়। File-এর যেকোনো জায়গায় schema error থাকলে server থেমে যায়, আর সব custom endpoint বন্ধ হয়ে যায়। LibreChat না উঠলে docker compose logs api দেখুন।

Docker: file mount করুন#

Mount না করলে Docker container librechat.yaml দেখতেই পায় না। docker-compose.override.yml.example copy করে docker-compose.override.yml বানান, তারপর api service-এর নিচে যে bind mount ./librechat.yaml-কে /app/librechat.yaml-এ map করে, তার comment তুলে দিন। Compose override file-টা আপনা থেকেই docker-compose.yml-এর সাথে merge করে নেয়।

librechat.yaml বা .env যা-ই বদলান, পরে restart করুন:

bash
docker compose down && docker compose up -d

Docker ছাড়া local install হলে process বন্ধ করে npm run backend চালান। তারপর LibreChat খুলে endpoint selector-এ Tokens আছে কিনা দেখুন।

Model আর id-র slash#

fetch: true থাকলে দরকারের সময় LibreChat endpoint-এর model list চায়। Tokens GET https://tokens.bd/v1/models-এর উত্তরে শুধু আপনার key যে model-গুলো চালাতে পারে সেগুলো পাঠায়। তাই key-তে allowed-models list থাকলে শুধু সেগুলোই দেখা যায়। LibreChat-এর docs সতর্ক করে, endpoint দেরিতে সাড়া দিলে fetch করার কারণে প্রথমবার ব্যবহার ধীর হতে পারে। default ভরসা হিসেবে থেকেই যায়।

তার বদলে নির্দিষ্ট একটা list বেঁধে দিতে চাইলে fetch: false দিন আর যে id-গুলো চান সেগুলো লিখুন:

yaml
      models:
        default: ['deepseek/deepseek-v4.1-flash', 'provider/another-model']
        fetch: false

provider/another-model-এর জায়গায় catalog থেকে একটা আসল id বসান।

Model id-র slash নিয়ে LibreChat-এর documentation-এ বিশেষ কিছু বলা নেই। তাদের নিজের OpenRouter উদাহরণে id দেখতে meta-llama/llama-3-70b-instruct-এর মতো, আর সেগুলো default ও titleModel-এ সাধারণ string হিসেবেই বসানো। এখানেও একই নিয়ম: পুরো Tokens id লিখুন, provider/model।

ঠিকমতো চলছে কিনা যাচাই করুন#

  1. Endpoint selector-এ Tokens বেছে একটা model নিন।
  2. "Reply with OK" পাঠান। Response stream হয়ে আসবে, আর request-টা আপনার Tokens usage-এ দেখা যাবে।

LibreChat-এর বাইরে key পরীক্ষা করতে:

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"}]}'

Streaming আর tool calling#

Chat response Server-Sent Events হিসেবে stream হয়, Tokens সেটা পাস করে দেয় (Streaming)। LibreChat-এর custom-endpoint পেজে agent বা tool calling নিয়ে কিছু নেই, তাই custom endpoint-এ LibreChat কীভাবে tool ব্যবহার করে তা এই গাইডে বলা হয়নি। যে feature tool definition পাঠায় সেটা ব্যবহার করলে model-কে tool calling support করতে হবে। দেখুন Tool calling আর Choosing a model।

Upstream কোনো request parameter ফিরিয়ে দিলে Tokens 400 invalid_request ফেরত দেয়। তখন LibreChat-এ dropParams আছে, request থেকে একটা ডিফল্ট parameter সরানোর জন্য (যেমন dropParams: ['stop']), আর addParams আছে একটা parameter যোগ বা override করার জন্য। কোন parameter reject হচ্ছে তা আগে দেখে নিন, তারপরই এগুলো ব্যবহার করুন।

Chat title-এ credit খরচ হয়: সস্তা একটা titleModel দিন#

titleConvo true থাকলে LibreChat প্রতিটা conversation-এর নাম দিতে একটা বাড়তি request পাঠায়। LibreChat-এর reference থেকে দুটো সেটিং মনে রাখার:

  • titleConvo-র ডিফল্ট false। Title request একদম না চাইলে এটা তেমনই রাখুন।
  • titleModel-এর ডিফল্ট gpt-3.5-turbo। ওটা Tokens-এর model নয়, তাই titleConvo: true দিয়ে titleModel না দিলে title request 404 model_not_found দিয়ে fail করে।

titleModel-এ দিন একটা ছোট, দ্রুত Tokens model, user যে model-এ chat করছে সেটা নয়:

yaml
      titleConvo: true
      titleModel: 'provider/cheap-model-id'

catalog থেকে একটা সস্তা model বসান। current_model মানটাও চলে, তখন conversation-এর নিজের model-ই ব্যবহার হয়। User বড় model-এ chat করলে সেটাই সবচেয়ে দামি পথ।

ওই model-টা key-র allowed-models list-এ রাখুন। নইলে সাধারণ chat চলবে, কিন্তু title fail করবে 403 model_not_allowed_on_key দিয়ে।

তার বদলে Anthropic Messages API ব্যবহার করুন#

যে model-গুলোতে /v1/messages দিয়ে পৌঁছাতে চান, তার জন্য LibreChat provider: 'anthropic' দিয়ে custom endpoint support করে। তাদের docs বলে, এটা শুধু সেইসব endpoint-এর জন্য, যেগুলো native Anthropic Messages API চালায়। ওপরের entry-র মতো OpenAI-compatible gateway-র জন্য provider বাদ দিতে হয়। Tokens দুটোই serve করে। এই provider-এর baseURL হলো API root, /v1/messages path নয়, তাই সেটা https://tokens.bd:

librechat.yaml second entry under endpoints.custom
    - name: 'Tokens Messages'
      provider: 'anthropic'
      apiKey: '${TOKENS_API_KEY}'
      baseURL: 'https://tokens.bd'
      headers:
        anthropic-version: '2023-06-01'
      models:
        default: ['deepseek/deepseek-v4.1-flash']
        fetch: false
      titleConvo: true
      titleModel: 'provider/cheap-model-id'

এই provider-এ models.fetch কাজ করে না, তাই প্রতিটা model models.default-এ লিখতে হবে। anthropic-version header এসেছে LibreChat-এর নিজের Anthropic উদাহরণ থেকে। Tokens key নেয় x-api-key-তে অথবা Bearer token হিসেবে (Authentication), আর format আছে Messages-এ। বেশির ভাগ মানুষের শুধু প্রথম entry-টাই লাগে।

Shared server-এ চালানো#

.env-এ একটাই key রাখলে এক LibreChat instance-এর সব user একটাই Tokens account-এর খরচ করে, আর তার rate ও concurrency limit ভাগ করে নেয় (Rate limits)। শুধু এই instance-এর জন্য একটা key বানান, monthly spend cap আর allowed-models list সহ (API keys), আর list-এ আপনার titleModel-ও রাখুন। আরেকটা উপায় apiKey: 'user_provided': তখন প্রত্যেক user interface-এ নিজের Tokens key দেয়, ফলে প্রত্যেকের usage আর cap আলাদা থাকে। LibreChat সেই key-গুলো encrypt করে রাখে।

যা Tokens দিয়ে যায় না#

Tokens chat serve করে। Image, audio আর file endpoint 404 unsupported_endpoint দেয়, আর embeddings চলে শুধু embedding model-এর জন্য (Models and usage)। LibreChat-এর যে feature-গুলো এসব চায়, সেগুলো অন্য provider-এ রাখুন।

সমস্যা হলে#

Endpoint selector-এ Tokens নেই। LibreChat পরিষ্কার error না দিয়েই entry বাদ দেয়। name, baseURL, apiKey আর models-এ বানান ভুল আছে কিনা, block-টা endpoints.custom-এর নিচে ঠিকমতো indent করা কিনা, অন্য কোনো endpoint-এর একই নাম কিনা, আর Docker librechat.yaml mount করেছে কিনা দেখুন। প্রতিটা পরিবর্তনের পর restart করুন।

LibreChat চালু হচ্ছে না। File-এ schema error থাকলে custom endpoint বন্ধ হয়ে যায় আর server থেমে যায়। docker compose logs api পড়ুন।

Missing API Key for Tokens, বা 401 missing_api_key / invalid_api_key। TOKENS_API_KEY .env-এ নেই, অথবা container restart হয়নি, অথবা key ভুল বা rotate হয়ে গেছে। Rotate করলে পুরনো secret সাথে সাথে বন্ধ হয়ে যায়।

404 model_not_found। Id পুরো Tokens id নয়, অথবা title model এখনও ডিফল্ট gpt-3.5-turbo। Id মিলিয়ে দেখুন GET https://tokens.bd/v1/models দিয়ে।

403 model_not_allowed_on_key। Model-টা, প্রায়ই titleModel, key-র allowed list-এ নেই।

402 insufficient_credits, 403 monthly_spend_cap_exceeded। Credit শেষ, অথবা key তার cap ছুঁয়ে ফেলেছে। দেখুন billing।

429 rate_limited বা concurrency_limit। এক key-তে অনেক user বা অনেক request। Retry-After পর্যন্ত অপেক্ষা করুন। প্রতিটা নতুন chat-এ title-এর জন্য একটা করে বাড়তি request যায়।

প্রতিটা request-এ 404। baseURL হতে হবে https://tokens.bd/v1, /v1 পর্যন্ত, তার পরে কিছু নয়। শুধু directEndpoint: true দিলে অন্য কথা: LibreChat-এর reference বলে তখন baseURL সরাসরি completions-এর পুরো URL হিসেবে ব্যবহার হয়।

সব code-এর তালিকা আছে Errors-এ, আর আরও সমাধান Troubleshooting-এ।

সূত্র: LibreChat documentation, Custom Endpoints quick start, librechat.yaml আর custom endpoint object reference, সাথে LibreChat repository-র librechat.example.yaml, 11 অক্টোবর 2026-এ দেখা।

এই পাতাটা কি কাজে লেগেছে?

এখনো আটকে আছেন? Support ticket খুলুন

আপনার agent set up করতে সাহায্য লাগবে?

Connection tester দিয়ে সংযোগ পরীক্ষা করে নিন, অথবা একটা API key তৈরি করুন।