BabelDOC দিয়ে একটা কাস্টম OpenAI base URL-এ PDF অনুবাদ করুন।
Updated 2026-07-30
BabelDOC-এর translator design অনুযায়ী OpenAI-compatible: তিনটা flag (--openai, --openai-base-url, --openai-api-key) প্লাস --openai-model endpoint এবং model বেছে নেয়। base URL-কে https://api.apisrouter.com/v1-এ point করুন এবং Claude, DeepSeek, GLM, বা Gemini দিয়ে এক key দিয়ে document অনুবাদ করুন।
দ্রুত উত্তর: তিনটা flag প্রতিটা translation call route করে।
BabelDOC-এর command line সরাসরি endpoint নেয়: --openai LLM translator চালু করে, --openai-base-url ঠিক করে request কোথায় যায়, --openai-api-key authenticate করে, এবং --openai-model model id বেছে নেয়। README-এর নিজস্ব example ঠিক এই flag set দেখায়, এবং এর translation-service note বলে যে শুধু OpenAI-compatible LLM-ই সাপোর্টেড, যা একটা multi-vendor OpenAI-compatible gateway-কে একটা workaround-এর বদলে natural fit বানায়। যেহেতু model id একটা plain string হিসেবে forward হয়, endpoint যা serve করে তা কাজ করে: upstream doc নিজেই GLM এবং DeepSeek family থেকে OpenAI-compatible-friendly model recommend করে, এবং APIsRouter দিয়ে সেগুলো একই base URL-এর পেছনে Claude এবং Gemini id-র পাশে বসে।
babeldoc --files paper.pdf \
--lang-in en --lang-out zh \
--openai \
--openai-model "deepseek-v4-flash" \
--openai-base-url "https://api.apisrouter.com/v1" \
--openai-api-key "$APISROUTER_API_KEY"BabelDOC কীভাবে একটা PDF-কে model call-এ পরিণত করে।
BabelDOC (GitHub-এ funstory-ai, প্রায় 9K star, Immersive Translate-এর পিছনের team থেকে) একটা PDF document translator যা layout সংরক্ষণ করে: এটা document structure parse করে, formula এবং figure protect করে, paragraph খুঁজে বের করে, LLM দিয়ে অনুবাদ করে, এবং PDF-কে একটা translated mono version এবং একটা side-by-side dual version হিসেবে rebuild করে। এটা একটা CLI এবং একটা Python API হিসেবে শিপ করে, এবং এটা hosted BabelDOC service-এর self-hosted counterpart। Translation phase-ই যেখানে endpoint গুরুত্বপূর্ণ। একটা document অনেকগুলো paragraph-sized chat-completions request হয়ে যায়, --qps flag দিয়ে throttled (default 4 query per second) এবং একটা worker pool দিয়ে process করা (pool-max-workers, যা default QPS value)। সেই shape-এর দুইটা পরিণতি আছে। প্রথমত, translation একটা volume workload: একটা লম্বা PDF মানে শত শত ছোট call, তাই per-token price দ্রুত compound হয়। দ্বিতীয়ত, retrieval workload-এর মতো না যেখানে model বেশিরভাগ পড়ে, translation প্রায় ততটাই লেখে যতটা পড়ে, তাই id তুলনা করার সময় output-token price input price-এর মতোই গুরুত্বপূর্ণ। BabelDOC translation-ও cache করে, তাই একটা document আবার চালালে --ignore-cache pass না করলে আগের result reuse হয়। Glossary CSV (--glossary-files) পুরো run জুড়ে terminology pin করে, এবং --max-pages-per-part খুব বড় document-কে part-এ split করে যা automatically translate ও merge হয়।
সম্পূর্ণ সেটআপ: CLI flag বা TOML config file।
বারবার ব্যবহারের জন্য, একই setting --config দিয়ে pass করা একটা TOML file-এ থাকে। [babeldoc] table ঠিক একই key kebab-case-এ accept করে: openai, openai-model, openai-base-url, openai-api-key, প্লাস throughput এবং output option। এটা key-কে আপনার shell history-র বাইরে রাখে এবং document জুড়ে একটা translation profile-কে reproducible বানায়। নিচের config একটা practical volume profile: বেশিরভাগ document-এর জন্য একটা fast id, একটা pooled gateway-র সাথে মেলাতে বাড়ানো QPS, এবং দুটো output mode-ই রাখা। এমন document-এ openai-model-কে একটা stronger id-তে swap করুন যেখানে throughput-এর চেয়ে nuance বেশি গুরুত্বপূর্ণ।
[babeldoc]
lang-in = "en-US"
lang-out = "zh-CN"
qps = 10
pool-max-workers = 10
# Translation service
openai = true
openai-model = "deepseek-v4-flash"
openai-base-url = "https://api.apisrouter.com/v1"
openai-api-key = "sk-YOUR-APISROUTER-KEY"
# Output control
no-dual = false
no-mono = false
watermark-output-mode = "no_watermark"একটা translation model বেছে নেওয়া।
তুলনার workflow concrete: একই দশ পাতা দুইটা id দিয়ে অনুবাদ করুন (প্রতি run-এ keyed cache সেগুলোকে আলাদা রাখে), dual পাশাপাশি পড়ুন, এবং প্রতি pass কত খরচ হয়েছে তা per-key usage log-এ check করুন। বেশিরভাগ team একটা fast default প্লাস একটা premium profile-এ settle হয়, দুটোই TOML file হিসেবে।
- Volume document (manual, একবার পড়া paper) deepseek-v4-flash-এর সাথে মানানসই: technical prose-এর জন্য translation quality ধরে রাখে এবং per-page cost প্রায় নগণ্য।
- Chinese-target translation glm-5.2 এবং DeepSeek family-র জন্য একটা home game; upstream doc নিজেই GLM এবং DeepSeek model-কে well-behaved OpenAI-compatible choice হিসেবে ইঙ্গিত করে।
- Nuance-critical document (contract, প্রকাশিত অনুবাদ) claude-sonnet-4-6 বা claude-haiku-4-5-20251001-কে justify করে, যা লম্বা document জুড়ে terminology এবং register বেশি বিশ্বস্তভাবে ধরে রাখে।
- এখানে output token গুরুত্বপূর্ণ। Translation যতটা পড়ে ততটাই লেখে, তাই শুধু input না, output price column-এও id তুলনা করুন।
- Fast id-র সাথে glossary জোড়া লাগান। একটা glossary CSV সেই terminology pin করে যেখানে fast model মাঝে মাঝে drift করে, যা technical text-এ quality gap-এর অনেকটাই বন্ধ করে দেয়।
ব্যবহার অনুযায়ী পেমেন্ট · অফিশিয়াল মূল্যের নিচে
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| মডেল | অফিশিয়াল মূল্য | আমাদের মূল্য |
|---|---|---|
| DeepSeek V4 Flash | $0.14 / $0.28 per M | $0.10 / $0.30 per M |
| GLM-5.2 | $1.14 / $4.00 per M | $1.10 / $4.00 per M |
| Gemini 3.5 Flash | $1.50 / $9.00 per M | $1.20 / $7.20 per M |
| Claude Haiku 4.5 20251001 | $1.00 / $5.00 per M | $0.80 / $4.00 per M |
| Claude Sonnet 4.6 | $3.00 / $15.00 per M | $2.40 / $12.00 per M |
Failure mode এবং throughput tuning।
QPS হলো সেই dial যা gateway-এর সাথে interact করে। Default 4 query per second conservative; pooled upstream capacity সাধারণত বেশি sustain করে, এবং --qps বাড়ানো (pool-max-workers সেটাকে অনুসরণ করে) একটা 300-page document-কে সারা বিকেল সময় নেওয়া থেকে থামায়। ঠান্ডা মাথায় একটা বড় সংখ্যায় লাফ না দিয়ে 429 response দেখতে দেখতে ramp করুন, কারণ rate-limited একটা paragraph retry করে এবং পুরো run ধীর করে দেয়। Flag শুধু তখনই প্রযোজ্য যখন --openai সেট থাকে। --openai ছাড়া একটা base URL pass করলে translator disabled থেকে যায়, যা PDF parse করে কিন্তু কখনো translate না করা একটা run হিসেবে দেখা যায়। Model id endpoint-এর /v1/models listing-এর বিরুদ্ধে exact string; একটা typo প্রথম paragraph call-কে model-not-found দিয়ে fail করে। একটা 401 মানে key এবং base URL একসাথে belong করে না। Layout problem endpoint problem না। Overlapping text, হারানো formula, বা ভাঙা table PDF parsing side-এ ট্রেস করে (--enhance-compatibility, scanned document-এর জন্য --ocr-workaround, বা rich-text toggle চেষ্টা করুন), এবং model পাল্টালে সেগুলো ঠিক হবে না। উল্টোটাও সত্য: ভুল অনুবাদ করা terminology একটা model বা glossary সমস্যা, parser সমস্যা না। Cache পরিবর্তন লুকিয়ে ফেলতে পারে। Model পাল্টানোর পর, নতুন id পুরনো id যা কভার করেছিল তা retranslate করাতে চাইলে --ignore-cache pass করুন; নাহলে cached paragraph যেমন ছিল তেমনই থাকে।
কারা একটা gateway দিয়ে BabelDOC route করে।
- বাল্কে paper অনুবাদ করা Researcher, যেখানে প্রতি document শত শত ছোট call volume pricing এবং per-key usage visibility-কেই পুরো খেলা বানায়।
- Bilingual documentation standardize করা Team, একটা fast default profile এবং একটা premium profile ভিন্ন model string দিয়ে একই endpoint-এর বিরুদ্ধে চালিয়ে।
- যেসব market-এ তাদের language pair-এর জন্য সবচেয়ে strong translation model ভিন্ন vendor-এ আছে তাদের ব্যবহারকারী: GLM, DeepSeek, Claude, এবং Gemini id সবই এক key-এর পিছনে।
- Confidential document-এর জন্য hosted service replace করা Self-hoster, parsing local রেখে শুধু paragraph text এক auditable endpoint-এ পাঠিয়ে।
- Developer যাদের কোনো নির্দিষ্ট vendor-এর billing-এ access নেই। কোনো card requirement ছাড়া Top-up based access per-provider sign-up dependency সরিয়ে দেয়।
Endpoint verify করুন এবং প্রথম document debug করুন।
একটা লম্বা run শুরু করার আগে আপনার key যেসব model address করতে পারে তা list করুন; --openai-model-কে exactly একটা served id-র সাথে মিলতে হবে। তারপর ছোট কিছু (একটা এক-পাতার PDF, বা একটা বড় document-এ --pages 1) end to end অনুবাদ করুন। প্রথম paragraph-এ একটা 401 মানে key base URL-এর সাথে মেলে না। Model-not-found একটা id typo। Parse করে কিন্তু endpoint কখনো call না করা একটা run মানে --openai missing। বারবার retry message সহ stall QPS-কে endpoint যা sustain করে তার চেয়ে বেশি সেট করার দিকে ইঙ্গিত করে; সেটা কমিয়ে আবার ধীরে ধীরে বাড়ান। Document flow শুরু হলে, APIsRouter console per-request model, token count, এবং spend দেখায়। Translation cost দুই দিকেই (input এবং output) document length-এর সাথে scale করে, এবং per-key usage log-ই যেখানে আপনি অনুমান না করে প্রতিটা model-এ per page-এ আসল cost জানেন।
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50
# then a one-page smoke test
babeldoc --config babeldoc.toml --files sample.pdf --pages 1সাধারণ প্রশ্ন
BabelDOC কি কাস্টম OpenAI-compatible endpoint সাপোর্ট করে?
হ্যাঁ, natively। CLI --openai-model-এর পাশাপাশি --openai-base-url এবং --openai-api-key expose করে, এবং TOML config একই key accept করে। Upstream README বলে OpenAI-compatible LLM-ই সাপোর্টেড translator type।
BabelDOC কি Claude, GLM, বা DeepSeek model দিয়ে অনুবাদ করতে পারে?
হ্যাঁ। Model id --openai-base-url-এর পেছনের endpoint-এ একটা plain string হিসেবে forward হয়, তাই যেকোনো catalog id কাজ করে। Upstream doc নিজেই GLM এবং DeepSeek family model-কে well-behaved choice হিসেবে recommend করে।
একটা PDF-এ কতগুলো API call খরচ হয়?
BabelDOC paragraph-sized chunk অনুবাদ করে, তাই একটা document শত শত ছোট chat-completions call হয়ে যায় যা --qps দিয়ে throttled। Input এবং output token দুটোই document length-এর সাথে scale করে; per-key usage log exact per-document cost দেখায়।
একটা gateway-র বিরুদ্ধে আমার কী QPS সেট করা উচিত?
Default 4-এর কাছে শুরু করুন এবং 429 response দেখতে দেখতে বাড়ান; pooled endpoint সাধারণত বেশি sustain করে, এবং pool-max-workers আলাদাভাবে সেট না করলে QPS value অনুসরণ করে। একটা স্থিতিশীল higher QPS-ই লম্বা document-এ মিনিট আর ঘণ্টার পার্থক্য।
আমি model পাল্টালাম কিন্তু translation পাল্টায়নি। কেন?
Translation cache। BabelDOC প্রতি document cached result reuse করে; --openai-model পাল্টানোর পর --ignore-cache pass করুন যাতে নতুন id আগে কভার করা content retranslate করে।
Endpoint choice কি layout, formula, বা table-কে প্রভাবিত করে?
না। Parsing, layout analysis, এবং PDF reconstruction endpoint নির্বিশেষে locally চলে। Layout সমস্যার নিজস্ব flag আছে (--enhance-compatibility, --ocr-workaround); base URL শুধু ঠিক করে কোন model text অনুবাদ করে।