BabelDOC سے PDFs کو ایک custom OpenAI base URL پر ترجمہ کریں۔
Updated 2026-07-30
BabelDOC کا translator design کے اعتبار سے OpenAI-compatible ہے: تین flags (--openai، --openai-base-url، --openai-api-key) اور --openai-model مل کر endpoint اور model منتخب کرتے ہیں۔ base URL کو https://api.apisrouter.com/v1 پر point کریں اور Claude، DeepSeek، GLM، یا Gemini کے ساتھ ایک ہی key کے ذریعے documents ترجمہ کریں۔
فوری جواب: تین flags ہر translation call کو route کرتے ہیں۔
BabelDOC کی command line سیدھا endpoint لیتی ہے: --openai LLM translator کو enable کرتا ہے، --openai-base-url طے کرتا ہے کہ requests کہاں جائیں، --openai-api-key authenticate کرتا ہے، اور --openai-model model id چنتا ہے۔ README کی اپنی examples بالکل یہی flag set دکھاتی ہیں، اور اس کا translation-service note بیان کرتا ہے کہ صرف OpenAI-compatible LLMs سپورٹڈ ہیں، جو ایک multi-vendor OpenAI-compatible gateway کو workaround کی بجائے قدرتی fit بنا دیتا ہے۔ چونکہ model id ایک plain string کے طور پر forward ہوتی ہے، endpoint جو کچھ بھی serve کرے وہ کام کرتا ہے: upstream docs خود GLM اور DeepSeek families سے OpenAI-compatible-friendly models تجویز کرتی ہیں، اور APIsRouter کے ذریعے وہ اسی base URL کے پیچھے Claude اور Gemini ids کے ساتھ بیٹھی ہیں۔
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 calls میں کیسے بدلتا ہے۔
BabelDOC (GitHub پر funstory-ai، تقریباً 9K stars، Immersive Translate کی ٹیم کی طرف سے) ایک PDF document translator ہے جو layout کو محفوظ رکھتا ہے: یہ document structure کو parse کرتا ہے، formulas اور figures کی حفاظت کرتا ہے، paragraphs ڈھونڈتا ہے، انہیں LLM سے ترجمہ کرتا ہے، اور PDF کو ایک translated mono version اور ایک side-by-side dual version کے طور پر دوبارہ بناتا ہے۔ یہ ایک CLI اور ایک Python API کے طور پر ship ہوتا ہے، اور یہ hosted BabelDOC service کا self-hosted ہم منصب ہے۔ Translation phase وہ جگہ ہے جہاں endpoint اہم ہوتا ہے۔ ایک document paragraph-سائز کی کئی chat-completions requests بن جاتا ہے، --qps flag سے throttled (default 4 queries per second) اور ایک worker pool (pool-max-workers، جو default QPS value پر ہوتا ہے) سے process شدہ۔ اس شکل کے دو نتائج ہیں۔ پہلا، translation ایک volume workload ہے: ایک لمبا PDF سینکڑوں چھوٹی calls ہے، تو فی-token قیمت تیزی سے compound ہوتی ہے۔ دوسرا، retrieval workloads کے برعکس جہاں model زیادہ تر پڑھتا ہے، translation تقریباً اتنا ہی لکھتا ہے جتنا پڑھتا ہے، تو ids compare کرتے وقت output-token قیمت بھی input قیمت جتنی ہی اہم ہے۔ BabelDOC translations کو cache بھی کرتا ہے، تو ایک document کو دوبارہ run کرنا پچھلے نتائج دوبارہ استعمال کرتا ہے جب تک آپ --ignore-cache pass نہ کریں۔ Glossary CSVs (--glossary-files) پورے run میں terminology pin کرتی ہیں، اور --max-pages-per-part بہت بڑے documents کو parts میں تقسیم کر دیتا ہے جو خودکار طور پر ترجمہ اور merge ہو جاتے ہیں۔
مکمل سیٹ اپ: CLI flags یا TOML config file۔
بار بار استعمال کے لیے، یہی settings ایک TOML file میں رہتی ہیں جو --config کے ساتھ pass ہوتی ہے۔ [babeldoc] table وہی keys kebab-case میں قبول کرتی ہے: openai، openai-model، openai-base-url، openai-api-key، ساتھ ہی throughput اور output options۔ یہ key کو آپ کی shell history سے باہر رکھتا ہے اور documents کے پار ایک translation profile کو reproducible بناتا ہے۔ نیچے دی گئی config ایک عملی volume profile ہے: زیادہ تر documents کے لیے ایک تیز id، ایک pooled gateway سے میچ کرنے کے لیے بڑھا ہوا QPS، اور دونوں output modes برقرار۔ ایسے documents کے لیے openai-model کو ایک زیادہ مضبوط id سے بدلیں جہاں 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 چننا۔
Comparison workflow واضح ہے: ایک ہی دس pages کو دو ids سے ترجمہ کریں (فی run keyed cache انہیں الگ رکھتا ہے)، duals کو ساتھ ساتھ پڑھیں، اور ہر pass کی قیمت کے لیے per-key usage log چیک کریں۔ زیادہ تر teams ایک fast default اور ایک premium profile پر settle ہوتی ہیں ان documents کے لیے جو اس کے حق دار ہوں، دونوں TOML files کے طور پر۔
- Volume documents (manuals، ایک بار پڑھے جانے والے papers) deepseek-v4-flash کے لیے موزوں ہیں: technical prose کے لیے translation quality برقرار رہتی ہے اور فی-page قیمت تقریباً negligible ہے۔
- Chinese-target translation glm-5.2 اور DeepSeek family کے لیے ایک home game ہے؛ upstream docs خود GLM اور DeepSeek models کو well-behaved OpenAI-compatible انتخاب کے طور پر بتاتی ہیں۔
- Nuance-critical documents (contracts، published translations) claude-sonnet-4-6 یا claude-haiku-4-5-20251001 کا حق رکھتے ہیں، جو لمبے documents میں terminology اور register کو زیادہ وفاداری سے track کرتے ہیں۔
- Output tokens یہاں اہم ہیں۔ Translation اتنا ہی لکھتا ہے جتنا پڑھتا ہے، تو ids کو output قیمت column پر بھی compare کریں، نہ صرف input پر۔
- Glossaries کو تیز ids کے ساتھ pair کریں۔ ایک glossary CSV اس terminology کو pin کرتی ہے جس پر fast models کبھی کبھار 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 modes اور throughput tuning۔
QPS وہ knob ہے جو gateway کے ساتھ interact کرتا ہے۔ 4 queries per second کا default conservative ہے؛ pooled upstream capacity عام طور پر زیادہ برداشت کرتی ہے، اور --qps بڑھانا (pool-max-workers اس کی پیروی کرتے ہوئے) وہی طریقہ ہے جس سے ایک 300-page document پورا afternoon لینا بند کر دیتا ہے۔ سیدھا ایک بڑے نمبر پر جانے کی بجائے 429 responses دیکھتے ہوئے آہستہ بڑھائیں، کیونکہ ایک rate-limited paragraph retry ہوتا ہے اور پورا run سست کر دیتا ہے۔ یہ flags صرف تب لاگو ہوتے ہیں جب --openai سیٹ ہو۔ --openai کے بغیر base URL pass کرنا translator کو disabled چھوڑ دیتا ہے، جو ایک ایسے run کے طور پر ظاہر ہوتا ہے جو PDF parse تو کرے مگر کبھی ترجمہ نہ کرے۔ Model ids endpoint کی /v1/models listing کے خلاف exact strings ہیں؛ ایک typo پہلی paragraph call کو model-not-found سے fail کر دیتی ہے۔ ایک 401 مطلب ہے key اور base URL ایک دوسرے سے میل نہیں کھاتے۔ Layout problems endpoint problems نہیں ہیں۔ Overlapping text، گم شدہ formulas، یا ٹوٹی ہوئی tables PDF parsing side سے آتی ہیں (--enhance-compatibility، scanned documents کے لیے --ocr-workaround، یا rich-text toggle آزمائیں)، اور models بدلنا انہیں ٹھیک نہیں کرے گا۔ الٹا بھی سچ ہے: غلط ترجمہ کی گئی terminology ایک model یا glossary issue ہے، parser issue نہیں۔ Cache تبدیلیوں کو چھپا سکتی ہے۔ Models بدلنے کے بعد، اگر آپ چاہتے ہیں کہ نئی id وہ content دوبارہ ترجمہ کرے جو پرانی id پہلے ہی cover کر چکی تھی تو --ignore-cache pass کریں؛ ورنہ cached paragraphs ویسے ہی رہتے ہیں جیسے تھے۔
BabelDOC کو gateway کے ذریعے کون route کرتا ہے۔
- وہ researchers جو papers کو bulk میں ترجمہ کرتے ہیں، جہاں فی document سینکڑوں چھوٹی calls volume pricing اور per-key usage visibility کو پورا کھیل بنا دیتی ہیں۔
- وہ teams جو bilingual documentation standardize کر رہی ہیں، ایک fast default profile اور ایک premium profile کو مختلف model strings کے ساتھ اسی endpoint کے خلاف چلاتے ہوئے۔
- وہ users جن کی زبان جوڑی کے لیے سب سے مضبوط translation models مختلف vendors کے پاس ہیں: GLM، DeepSeek، Claude، اور Gemini ids سب ایک key کے پیچھے۔
- وہ self-hosters جو confidential documents کے لیے hosted service کی جگہ لے رہے ہیں، parsing کو local رکھتے ہوئے اور صرف paragraph text کو ایک auditable endpoint پر بھیجتے ہوئے۔
- وہ developers جن کے پاس کسی مخصوص vendor کی billing تک رسائی نہیں۔ Top-up پر مبنی رسائی بغیر کارڈ کی شرط کے فی-provider sign-up کا انحصار ختم کر دیتی ہے۔
Endpoint verify کریں اور پہلا document debug کریں۔
لمبا run شروع کرنے سے پہلے وہ models list کریں جنہیں آپ کی key address کر سکتی ہے؛ --openai-model کو ایک served id سے بالکل میچ ہونا چاہیے۔ پھر کوئی چھوٹی سی چیز (ایک-page کا PDF، یا کسی بڑے پر --pages 1) end to end ترجمہ کریں۔ پہلی paragraph پر ایک 401 مطلب ہے key base URL سے میچ نہیں کرتی۔ Model-not-found ایک id typo ہے۔ ایک run جو parse تو کرے مگر endpoint کو کبھی call نہ کرے اس میں --openai missing ہے۔ retry messages کے ساتھ بار بار رکنا اس بات کی نشاندہی کرتا ہے کہ QPS اس سے زیادہ سیٹ ہے جتنا endpoint برداشت کرتا ہے؛ اسے کم کریں اور دوبارہ آہستہ بڑھائیں۔ جب documents چلنے لگیں، APIsRouter console per-request model، token counts، اور spend دکھاتا ہے۔ Translation قیمت document کی لمبائی کے ساتھ دونوں سمتوں میں (input اور output) scale کرتی ہے، اور فی key usage log وہی طریقہ ہے جس سے آپ ہر model کے لیے اپنی اصل فی-page قیمت جانتے ہیں، اندازہ لگانے کی بجائے۔
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 custom OpenAI-compatible endpoints سپورٹ کرتا ہے؟
جی ہاں، native طور پر۔ CLI --openai-model کے ساتھ --openai-base-url اور --openai-api-key expose کرتی ہے، اور TOML config وہی keys قبول کرتی ہے۔ upstream README بیان کرتا ہے کہ OpenAI-compatible LLMs ہی سپورٹڈ translator type ہیں۔
کیا BabelDOC Claude، GLM، یا DeepSeek models سے ترجمہ کر سکتا ہے؟
جی ہاں۔ Model id ایک plain string کے طور پر --openai-base-url کے پیچھے endpoint کو forward ہوتی ہے، تو کوئی بھی کیٹلاگ id کام کرتی ہے۔ upstream docs خود GLM اور DeepSeek family models کو well-behaved انتخاب کے طور پر تجویز کرتی ہیں۔
ایک PDF کتنی API calls لیتا ہے؟
BabelDOC paragraph-سائز کے حصے ترجمہ کرتا ہے، تو ایک document سینکڑوں چھوٹی chat-completions calls بن جاتا ہے جو --qps سے throttled ہوتی ہیں۔ Input اور output دونوں tokens document کی لمبائی کے ساتھ scale کرتے ہیں؛ per-key usage log exact فی-document قیمت دکھاتا ہے۔
مجھے gateway کے خلاف کون سا QPS سیٹ کرنا چاہیے؟
default 4 کے قریب شروع کریں اور 429 responses دیکھتے ہوئے بڑھاتے جائیں؛ pooled endpoints عام طور پر زیادہ برداشت کرتے ہیں، اور pool-max-workers QPS value کی پیروی کرتا ہے جب تک الگ سے سیٹ نہ کیا جائے۔ ایک stable زیادہ QPS لمبے documents پر منٹوں اور گھنٹوں کا فرق ہے۔
میں نے model بدلا مگر translation نہیں بدلا۔ کیوں؟
Translation cache۔ BabelDOC فی document cached نتائج دوبارہ استعمال کرتا ہے؛ --openai-model بدلنے کے بعد --ignore-cache pass کریں تاکہ نئی id پہلے سے cover شدہ content دوبارہ ترجمہ کرے۔
کیا endpoint کا انتخاب layout، formulas، یا tables کو متاثر کرتا ہے؟
نہیں۔ Parsing، layout analysis، اور PDF reconstruction endpoint سے قطع نظر local چلتے ہیں۔ Layout issues کے اپنے flags ہیں (--enhance-compatibility، --ocr-workaround)؛ base URL صرف یہ فیصلہ کرتا ہے کہ کون سا model text ترجمہ کرے۔