Open WebUI একটা self-hosted chat interface। যেকোনো OpenAI-compatible server-এর সাথে এটা কথা বলে OpenAI connection দিয়ে, যা Chat Completions request পাঠায়। তাই Tokens-এও চলে: base URL হবে https://tokens.bd/v1, সাথে একটা Tokens key। Connection যোগ করা যায় admin settings থেকে, অথবা environment variable দিয়ে।
এই গাইড Open WebUI-র documentation দেখে লেখা, 11 অক্টোবর 2026-এ মিলিয়ে দেখা হয়েছে (তখন সবচেয়ে নতুন release ছিল v0.12.0)। মিলিয়ে দেখা হয়েছে documentation-এর সাথে, কোনো live Open WebUI install-এ শুরু থেকে শেষ পর্যন্ত চালিয়ে দেখা হয়নি।
শুরুর আগে#
- একটা Tokens key। Dashboard থেকে বানিয়ে নিন। spend cap আর allowed models-এর কথা আছে API keys পেজে।
- আপনার Open WebUI instance-এ admin access।
- model catalog থেকে অন্তত একটা model id। এই গাইডে
deepseek/deepseek-v4.1-flashব্যবহার করা হয়েছে। Id-র চেহারাprovider/model।
Tokens-কে connection হিসেবে যোগ করুন#
- Open WebUI-তে Settings > Admin > Connections-এ যান।
- Manage OpenAI API Connections list-এর add বাটনে (Add Connection) ক্লিক করুন।
- Connection Type যেমন আছে, External-ই রেখে দিন।
- URL-এ দিন
https://tokens.bd/v1। - API Key-তে আপনার Tokens key paste করুন।
- Save করুন।
শুধু base URL দিন। Open WebUI-র documentation-এর সব উদাহরণ /v1-এ শেষ হয়, কোনোটাতেই /chat/completions-এর মতো path নেই। Tokens-এর নিজের base URL-ও /v1-এ শেষ।
Save করলেই connection test হয় না। Test করতে Verify Connection চাপুন, ওটা Bearer token দিয়ে GET /models call করে। Tokens এই call-এর উত্তরে আপনার key যে model-গুলো চালাতে পারে সেগুলো পাঠায়, তাই check পাস করা মানে key-ও ঠিক আছে। Advanced-এর নিচে Provider সেটিং Default-এ রাখুন, আর Forward cookies বন্ধ রাখুন। Open WebUI-র docs বলে, ওটা চালু করবেন শুধু এমন server-এর জন্য, যেটা আপনার নিজের আর cookie দিয়ে authenticate করে। তৃতীয় পক্ষের endpoint-এ কখনোই না।
অথবা environment variable দিয়ে সেট করুন#
Open WebUI environment variable থেকেও connection পড়ে। একটা connection-এর জন্য:
OPENAI_API_BASE_URL=https://tokens.bd/v1
OPENAI_API_KEY=tok_live_your_keyOPENAI_API_BASE_URLS আর OPENAI_API_KEYS-এ একাধিক মান দেওয়া যায়, semicolon দিয়ে আলাদা করে। অন্য provider-এর পাশে Tokens যোগ করতে এগুলো ব্যবহার করলে দুটো list-এর ক্রম একই রাখুন। Docker Compose file-এ key সরাসরি না লিখে আপনার shell থেকে পাঠান, অথবা compose file-এর পাশের একটা .env file থেকে। নইলে key commit করা file-এ চলে যায়:
services:
open-webui:
environment:
- OPENAI_API_BASE_URL=https://tokens.bd/v1
- OPENAI_API_KEY=${TOKENS_API_KEY}Open WebUI-র reference-এ এই variable-গুলোকে ConfigVar বলা হয়েছে। মানে, প্রথমবার চালু হওয়ার সময় মানটা store হয়ে যায়, তারপর Open WebUI environment-এর বদলে ওই store করা মানই ব্যবহার করে। পরে কিছু বদলাতে হলে Settings > Admin > Connections-এ গিয়ে বদলান। Environment variable-কে আবার আগে রাখার switch হলো ENABLE_PERSISTENT_CONFIG=False, তবে তখন UI থেকে করা পরিবর্তন restart-এর পর হারিয়ে যায়।
Docker আর host.docker.internal
Docker host-এ চলা model server-এর জন্য Open WebUI-র documentation host.docker.internal ব্যবহার করে। Tokens একটা remote address, তাই URL থাকে https://tokens.bd/v1-ই।
কোন model দেখা যাবে তা ঠিক করুন#
ডিফল্টভাবে Open WebUI সেই সব model দেখায় যেগুলো connection GET /models থেকে ফেরত দেয়। Tokens-এর ক্ষেত্রে সেটা আপনার key যে model-গুলো চালাতে পারে তার list। তাই key-তে allowed-models list থাকলে শুধু সেগুলোই দেখা যাবে।
Advanced-এর নিচের Model IDs field দিয়ে এটা বদলানো যায়:
- ফাঁকা (ডিফল্ট): provider-এর সব model detect হয়।
- ভরা: আপনি যে list দেন, সেটা fetch করা list-এর জায়গা নেয়। ওই connection-এর জন্য Open WebUI provider-এর
/modelscall করা বন্ধ করে দেয়, আর শুধু আপনার দেওয়া id-গুলো দেখায়। আপনার user-দের কাছ থেকে কিছু model লুকাতে চাইলে এটা কাজে লাগে।
হুবহু Tokens id লিখুন, যেমন deepseek/deepseek-v4.1-flash, তারপর plus বাটনে ক্লিক করে যোগ করুন। একই id দুবার দিলে নেয় না, আর আগে-পরের ফাঁকা জায়গা মুছে যায়।
Slash-ওয়ালা id#
Tokens-এর id-তে সবসময় একটা slash থাকে। Open WebUI-র documentation-এ model id-র slash নিয়ে বিশেষ কিছু বলা নেই, তাই provider যেমন পাঠায় id তেমনই দেখায়। Connection-প্রতি আলাদা label চাইলে Prefix ID field আছে। ওটা আপনার prefix আর model id-কে একটা dot দিয়ে জোড়ে (prefix tokens দিলে হয় tokens.provider/model), আর upstream-এ request যাওয়ার আগে আবার সরিয়ে ফেলে। Prefix লিখবেন শেষে slash ছাড়া। docs দেখায় groq/ দিলে groq/.model হয়ে যায়।
ঠিকমতো চলছে কিনা যাচাই করুন#
- নতুন chat খুলুন, model selector থেকে একটা Tokens model বেছে নিন।
- "Reply with OK" পাঠান।
- Reply stream হয়ে আসবে, আর request-টা আপনার Tokens usage-এ দেখা যাবে।
আগে Open WebUI-কে বাদ দিয়ে দেখতে চাইলে যেকোনো machine থেকে এটা চালান:
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#
Open WebUI-র docs-এ একমাত্র আবশ্যক endpoint হিসেবে POST /v1/chat/completions-এর কথা আছে, সাথে streaming আর temperature, top_p, max_tokens-এর মতো সাধারণ parameter। Tokens এই endpoint-এ Server-Sent Events দিয়ে stream করে। বিস্তারিত Streaming পেজে।
Tool use-এর জন্য এমন model আর provider লাগে, যারা tools আর tool_choice নেয়। Open WebUI-র docs এটাকে শর্ত হিসেবেই বলেছে। Tokens এগুলো পাস করে দেয়, কিন্তু সব model এগুলো ভালোভাবে সামলাতে পারে না। আপনার user-দের জন্য tools চালু করার আগে Choosing a model আর catalog-এ ওই model-এর পেজ দেখে নিন, আর request-এর format জানতে Tool calling পড়ুন।
Background task-এ credit খরচ হয়: সস্তা একটা task model দিন#
প্রতিটা conversation-এর পেছনে Open WebUI আরও কিছু request পাঠায়। তাদের task-models পেজে যেগুলোর কথা আছে: chat title, tag, follow-up suggestion, autocomplete, retrieval আর web search-এর query নতুন করে লেখা, image prompt, আর context compaction-এর summary। এগুলোর প্রতিটাই Tokens-এ billed request।
ডিফল্টে task model থাকে Current Model। মানে user যে model-এ chat করছে, এসব request-ও সেটাতেই যায়, দামি model হলেও। বদলাতে:
- Settings > Admin > Interface-এ গিয়ে Tasks section খুঁজুন।
- External Task Model-এ আপনার Tokens list থেকে একটা ছোট, দ্রুত, non-reasoning model বেছে নিন। Open WebUI-র docs ছোট non-reasoning model-ই recommend করে, কারণ সহজ output-এর জন্য reasoning model শুধু দেরি আর খরচ বাড়ায়। Tokens-এর জন্য এই picker-টাই খাটে, কারণ এটা Ollama-র মতো Local connection নয়। Environment variable-টা
TASK_MODEL_EXTERNAL। - Background request-এ কড়া সীমা চাইলে Task Model Parameters-এর নিচে
max_tokensসেট করুন। docs বলছে, যেকোনো একটা parameter সেট করলে title আর summary-র জন্য built-in 1000 token সীমা উঠে যায়, তাইmax_tokensনিজেই দিয়ে দিন। Variable-টাTASK_MODEL_PARAMS, একটা JSON object।
নির্দিষ্ট করা task model পাওয়া না গেলে Open WebUI fail না করে chat-এর নিজের model-এ ফিরে যায়। তার মানে, আপনার key যে task model চালাতে পারে না, সেটা দিলে চুপচাপ আবার দামি model-এ খরচ হতে থাকবে। Task model-কে key-র allowed-models list-এর ভেতরে রাখুন।
Task একেবারে বন্ধ করতে একই admin পেজের Generation-এর নিচে তাদের toggle বন্ধ করুন: Title Generation (ENABLE_TITLE_GENERATION), Tags Generation (ENABLE_TAGS_GENERATION), Follow Up Generation (ENABLE_FOLLOW_UP_GENERATION) আর Autocomplete Generation (ENABLE_AUTOCOMPLETE_GENERATION)। Open WebUI-র reference অনুযায়ী autocomplete ডিফল্টে বন্ধ, বাকিগুলো চালু। Autocomplete চলে user টাইপ করার সময়েই, তাই metered key-তে ওটা বন্ধ রাখুন। Context compaction-এর নিজস্ব picker আছে, Context Compaction Model, Chat-এর নিচে।
Shared server-এ চালানো#
Instance-এর সবাই connection-এ বসানো একটাই key-র খরচ করে, আর সেই account-এর rate আর concurrency limit ভাগ করে নেয় (Rate limits)। অন্য মানুষদের হাতে instance দেওয়ার আগে:
- শুধু এই instance-এর জন্য একটা key বানান, monthly spend cap আর allowed-models list সহ (API keys)।
- Task model-কে ওই list-এ রাখুন, ওপরে যেমন বলা হলো।
- Key এমন file-এ রাখবেন না যা commit হয়। Environment variable বা admin পেজ ব্যবহার করুন।
- Dashboard-এ usage দেখুন। Tokens account-এ আর কত বাকি, তা Open WebUI দেখায় না।
GET /v1/tokens/usageদেখায় (Models and usage)।
যা এই connection দিয়ে যায় না#
- Image, speech আর transcription। Image generation, text-to-speech আর speech-to-text-এর জন্য Open WebUI-তে আলাদা settings আর variable আছে। Tokens ওই endpoint-গুলো serve করে না, তারা 404
unsupported_endpointফেরত দেয়। এই feature-গুলো অন্য provider-এ পাঠান। - RAG-এর embeddings। Open WebUI-র docs
/v1/embeddings-কে optional বলে, RAG-এর কাজে লাগে। Tokens embeddings serve করে শুধু সেইসব model-এর জন্য, যেগুলো embedding model (Embeddings)। ওগুলোর একটা বেছে না নিলে ডিফল্ট RAG embedding সেটআপই রেখে দিন।
সমস্যা হলে#
Verify Connection fail করছে, বা model list ফাঁকা। URL-টা /v1-এ শেষ হয়েছে কিনা আর পরে কোনো path নেই কিনা দেখুন। Tokens থেকে list ফাঁকা আসার সাধারণ কারণ, active plan নেই আর wallet-এ ব্যালান্সও নেই। দেখুন Models and usage। Open WebUI-র docs এটাও বলে, check fail করা মানেই chat ভাঙা নয়: Model IDs-এ model id যোগ করে একটা chat চেষ্টা করুন।
Settings পেজ আটকে যাচ্ছে বা list ধীরে আসছে। Open WebUI ডিফল্টে model list fetch 10 সেকেন্ড পরে timeout করে দেয়। ধীর network-এ AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST বাড়ান। Save করা URL-এ পৌঁছানো না গেলে model list load হওয়ার সমস্যা নিয়ে Open WebUI-র connection-error গাইডে আলাদা একটা section আছে।
401 invalid_api_key বা missing_api_key। Key ভুল, rotate হয়ে গেছে বা ফাঁকা। Connection-এ নতুন একটা key paste করুন। Rotate করলে পুরনো secret সাথে সাথে বন্ধ হয়ে যায়।
404 model_not_found। Model id পুরো Tokens id নয়। Model list থেকে copy করুন, provider/model সহ।
403 model_not_allowed_on_key। Key-র allowed-models list-এ ওই model নেই। Task model list-এর বাইরে থাকলেও এটা হয়: তখন সাধারণ chat চলে, কিন্তু chat title fail করে।
402 insufficient_credits, 403 monthly_spend_cap_exceeded। Credit শেষ, অথবা key তার cap ছুঁয়ে ফেলেছে। billing-এ টাকা যোগ করুন, অথবা বেশি cap-ওয়ালা key নিন।
429 rate_limited বা concurrency_limit। একটা key-তে অনেক user, বা অনেক background task। Retry-After পর্যন্ত অপেক্ষা করুন, যে task toggle লাগে না সেগুলো বন্ধ করুন, অথবা দ্বিতীয় instance-এর জন্য দ্বিতীয় একটা key নিন।
সব code-এর তালিকা আছে Errors-এ, আর আরও সমাধান Troubleshooting-এ। support-এর কাছে সাহায্য চাইলে -i দিয়ে curl চালিয়ে পাওয়া x-tokens-request-id header-টা সাথে দিন।
সূত্র: Open WebUI documentation, OpenAI-compatible providers, Starting with OpenAI, task models আর environment variable reference, 11 অক্টোবর 2026-এ দেখা।