ایک سطر والا دعویٰ، اور یہ کس حد تک درست ہے
"Change your AI provider with one line" ایسا دعویٰ لگتا ہے جو محض مارکیٹنگ ہو — جب تک آپ اسے خود کر نہ لیں، اور پھر یہ بات سیدھی سادی لگتی ہے۔ اس کے پیچھے کا طریقہ واقعی سادہ ہے: اگر دو فراہم کنندگان OpenAI API فارمیٹ بولتے ہیں، تو جو کوڈ ایک سے بات کرتا ہے وہ صرف ایک قدر — وہ base URL جس کی طرف کلائنٹ اشارہ کرتا ہے — بدل کر دوسرے سے بھی بات کر سکتا ہے۔ کوئی نیا SDK نہیں، کوئی ریکویسٹ بنانے کا طریقہ دوبارہ نہیں لکھنا، کوئی نیا ریسپانس پارسنگ نہیں۔ بس ایک سطر۔
لیکن "ایک سطر" سرخی ہے، پوری کہانی نہیں۔ base-URL کا تبادلہ ان کاموں کے لیے صاف طور پر کام کرتا ہے جو زیادہ تر ایپلیکیشنز کے مرکز میں ہوتے ہیں، اور جب آپ بنیادی باتوں سے آگے جاتے ہیں تو اس کے کنارے بھی ہیں۔ یہ تحریر گہرا جائزہ ہے: جب آپ base URL بدلتے ہیں تو حقیقت میں کیا ہوتا ہے، کیا ایک جیسا رہتا ہے، کنارے کہاں ہیں، اور آج کن ماڈل اقسام تک یہ پیٹرن پہنچتا ہے۔ اگر آپ تول رہے ہیں کہ "drop-in compatible" حقیقت ہے یا نعرہ، تو یہ اس کا تکنیکی جواب ہے۔
معیاری chat completions — جو زیادہ تر پروڈکشن AI ورک لوڈز کا بڑا حصہ ہیں — کے لیے base-URL کا تبادلہ حقیقت ہے اور واقعی ایک سطر ہے۔ کنارے حاشیوں میں رہتے ہیں: فراہم کنندہ مخصوص فیچرز، ریسپانس کی باریک ساختی فرق، اور غیر متنی موڈیلٹیز۔ جانیں کہ یہ کنارے کہاں ہیں تو پیٹرن قابلِ اعتماد ہے؛ اسے مطلق سمجھیں گے تو حیرت ہوگی۔
Base URL اصل میں کیا ہے
طریقہ کار سے شروع کریں۔ جب آپ کسی AI فراہم کنندہ کے SDK کا استعمال کرتے ہیں، تو وہ ہر ریکویسٹ ایک base URL — فراہم کنندہ کے API کا بنیادی پتہ — پر بھیجتا ہے۔ OpenAI Python SDK بطورِ ڈیفالٹ ریکویسٹ OpenAI کے اپنے اینڈ پوائنٹ پر بھیجتا ہے۔ base URL ریکویسٹ کا وہ حصہ ہے جو کہتا ہے "یہ OpenAI کے سرورز کو بھیجو"۔
SDK ریکویسٹ کے باقی حصے بناتا ہے — راستہ، ہیڈرز، JSON باڈی، توثیق — OpenAI API کی وضاحت کے مطابق۔ یہ وضاحت عوامی اور واضح ہے۔ کوئی بھی فراہم کنندہ جو اسی وضاحت کو نافذ کرتا ہے بالکل وہی ریکویسٹ قبول کر سکتا ہے۔ لہٰذا اگر آپ صرف base URL بدلتے ہیں، تو SDK ایک یکساں ریکویسٹ بناتا ہے اور اسے کہیں اور بھیجتا ہے — اس فراہم کنندہ کو جو وہی فارمیٹ بولتا ہے۔ SDK جو ریکویسٹ بناتا ہے وہ بالکل نہیں بدلتا؛ صرف اس کی منزل بدلتی ہے۔
یہ رہا معیاری مثال۔ ایک عام OpenAI SDK سیٹ اپ:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"]
)
response = client.chat.completions.create(
model="gpt-5.5",
messages=[
{
"role": "user",
"content": "Hello"
}
]
)
print(response.choices[0].message.content)
اور وہی کوڈ، مگر OpenAI-compatible ایگریگیٹر کی طرف نشانہ بند — تبدیلی صرف کنفیگریشن کی دو لائنوں میں ہے (base URL اور key)، اور اس کے بعد کی ہر چیز جوں کی توں رہتی ہے:
from openai import OpenAI
client = OpenAI(
api_key="sk-your-cometapi-key",
base_url="https://api.cometapi.com/v1" # 关键配置:使用 CometAPI 的接口
)
response = client.chat.completions.create(
model="claude-sonnet-4-6", # 调用 Claude Sonnet 4.6 模型
messages=[
{
"role": "user",
"content": "Hello"
}
]
)
print(response.choices[0].message.content)
نوٹ کریں کیا بدلا اور کیا نہیں بدلا۔ base URL بدلا۔ API key بدلی (آپ ایک مختلف سروس پر توثیق کر رہے ہیں)۔ model string بدلی (آپ ایک مختلف ماڈل مانگ رہے ہیں)۔ لیکن SDK وہی ہے، method call وہی ہے، message فارمیٹ وہی ہے، اور جو ریسپانس ملتا ہے اس کی شکل بھی وہی ہے۔ آپ OpenAI پر GPT-5.5 سے ایک ایگریگیٹر کے ذریعے Claude Sonnet 4.6 پر منتقل ہوئے، اور واحد ساختی تبدیلی base URL تھی۔ یہی وہ "ایک سطر" ہے۔
اسی لیے اس پیٹرن کو اکثر فراہم کنندگان کو "کنفیگریشن ویلیو" بنانے کے طور پر بیان کیا جاتا ہے نہ کہ "کوڈ ڈیپنڈنسی"۔ عملی طور پر، ٹیمیں base URL اور model name کو environment variables میں رکھتی ہیں، اور فراہم کنندہ بدلنا ایک env var بدل کر ری ڈپلائے کرنا بن جاتا ہے — کوئی کوڈ تبدیلی نہیں۔ ایک ٹھوس واک تھرو کہ SDK کو اسی طریقے سے non-OpenAI ماڈل کی طرف کیسے نشانہ بند کریں، موجود ہے Claude Opus 4.7 کو OpenAI-compatible API کے ذریعے کیسے استعمال کریں میں، جو وہی ریکویسٹ اسٹرکچر دکھاتا ہے اور بدلے میں Claude کا ریسپانس ملتا ہے۔
تبادلے کے بعد کیا چیزیں یکساں رہتی ہیں
base URL تبدیل ہونے کی وجہ یہ حقیقی ورک لوڈز کے لیے کام کرتی ہے، محض کھلونوں کے لیے نہیں، کہ OpenAI-compatible سطح وہ زیادہ تر حصے ڈھانپتی ہے جنہیں پروڈکشن ایپلیکیشنز واقعی استعمال کرتی ہیں۔ جب base URL بدلتا ہے تو ذیل کی تمام چیزیں بغیر کسی ترمیم کے کام کرتی رہتی ہیں:
- بولڈ: The chat completions call.
بنیادی create-a-completion ریکویسٹ — messages، model، temperature، max tokens، اور معیاری sampling پیرامیٹرز — compatible فراہم کنندگان میں یکساں طریقے سے کام کرتی ہے۔ - بولڈ: Streaming.
stream=true سیٹ کرنا اور ریسپانس چنکس پر iterate کرنا اسی طرح کام کرتا ہے۔ اسٹریمنگ چنک فارمیٹ OpenAI کی شکل کی پیروی کرتا ہے، لہٰذا جو کوڈ OpenAI سے stream کھاتا ہے وہ compatible فراہم کنندہ سے بھی بغیر تبدیلی کے کھا لیتا ہے۔ - بولڈ: Tool / function calling.
tools کی array پاس کرنا اور ماڈل کے tool-call ریسپانس کو پڑھنا OpenAI کے tool-calling فارمیٹ کے مطابق ہے۔ compatible فراہم کنندگان وہی tools سکیمہ قبول کرتے ہیں اور tool calls اسی ساخت میں واپس کرتے ہیں۔ - بولڈ: Structured outputs اور JSON موڈ۔
response format پیرامیٹر کے ذریعے JSON-فارمیٹڈ آؤٹ پٹ مانگنا زیادہ تر فراہم کنندگان کے compatible سطح کا حصہ ہے، اگرچہ یہ ان جگہوں میں سے ایک ہے جہاں کنارے نمودار ہوتے ہیں (نیچے دیکھیے)۔ - بولڈ: Multi-turn گفتگو اور system prompts۔
messages کی array اپنے role اسٹرکچر — system، user، assistant — کے ساتھ یکساں ہے۔ گفتگو کی ہسٹری اور system-prompt ہینڈلنگ بغیر تبدیلی کے ساتھ چلتی ہے۔
ان ایپلیکیشنز کے لیے جن کا AI استعمال chat completions، streaming، tool calls، اور system prompts ہے — جو پروڈکشن LLM فیچرز کی بڑی اکثریت بیان کرتا ہے — base-URL کا تبادلہ تقریباً سب کچھ ڈھانپ لیتا ہے۔ اسی لیے "ایک سطر" کا دعویٰ محض ڈیموز نہیں بلکہ حقیقی کام کے لیے بھی درست رہتا ہے۔ compatible سطح بالکل انہی آپریشنز کے گرد ڈیزائن کی گئی تھی جن پر زیادہ تر ایپلیکیشنز انحصار کرتی ہیں۔
وہ کنارے جن سے آگاہ رہنا چاہیے
اب بات کھری۔ base-URL کا تبادلہ بنیادی سطح کے لیے قابلِ اعتماد ہے، مگر ایسے کنارے ہیں جہاں "OpenAI-compatible" ہونا مکمل ضمانت نہیں رہتا۔ ان میں سے کوئی بھی زیادہ تر ایپلیکیشنز کے لیے پیٹرن کو نہیں توڑتا؛ مگر ان پر انحصار کرنے سے پہلے جاننا ضروری ہے۔
1. فراہم کنندہ مخصوص پیرامیٹرز ہمیشہ ساتھ نہیں چلتے
کچھ فراہم کنندگان ایسے پیرامیٹرز فراہم کرتے ہیں جو OpenAI کی وضاحت کا حصہ نہیں — کسی وینڈر کا مخصوص reasoning کنٹرول، caching ہدایت، یا safety سیٹنگ۔ جب آپ فراہم کنندہ بدلتے ہیں، تو جو پیرامیٹر صرف ایک وینڈر سپورٹ کرتا ہے وہ دوسرے پر چپ چاپ نظر انداز ہو سکتا ہے یا مسترد کیا جا سکتا ہے۔ بنیادی پیرامیٹرز (temperature، max tokens، top-p) ہر جگہ چلتے ہیں؛ وینڈر مخصوص اضافے وہ جگہ ہیں جہاں آپ کو جانچ کرنی چاہیے۔ فیل ہونے کا قرینہ عموماً خاموش ہوتا ہے: ریکویسٹ کامیاب ہو جاتی ہے، مگر جس پیرامیٹر پر آپ تکیہ کیے بیٹھے تھے اس کا کوئی اثر نہیں ہوا۔
2. ریسپانس کی ساختی باریکیاں حاشیوں پر مختلف ہو سکتی ہیں
اوپر کی سطح کی ریسپانس ساخت یکساں ہے — جنریٹڈ متن وہیں ملتا ہے، usage آبجیکٹ وہیں ہوتا ہے۔ مگر باریکی میں فرق آ سکتا ہے: usage آبجیکٹ میں موجود عین فیلڈز، finish reasons کے لیبل، کسی tool call کے arguments کی دقیق ساخت۔ جو کوڈ بنیادی ریسپانس فیلڈز پڑھتا ہے وہ محفوظ ہے؛ جو کوڈ کسی مخصوص حاشیائی فیلڈ پر منحصر ہے وہیں تبادلہ کوئی ہلکا سا بریک لا سکتا ہے۔ تدارک یہ ہے کہ معیاری فیلڈز پر انحصار کریں اور کچھ بھی غیر معمولی ہو تو اپنی حد پر اسے normalize کریں۔
3. Structured-output کی سختی مختلف ہو سکتی ہے
JSON موڈ اور structured outputs compatible سطح کا حصہ ہیں، مگر ہر فراہم کنندہ سکیمہ کو کتنی سختی سے لاگو کرتا ہے یہ مختلف ہوتا ہے۔ ایک فراہم کنندہ سکیمہ-مطابق آؤٹ پٹ کی ضمانت دے سکتا ہے؛ دوسرا اسے مضبوط اشارہ سمجھ سکتا ہے۔ اگر آپ کی ایپلیکیشن سخت سکیمہ conformance پر منحصر ہے، تو یہ اس مخصوص ماڈل پر ضرور ٹیسٹ کریں جس پر آپ منتقل ہو رہے ہیں، بجائے اس کے کہ سمجھیں ضمانت ساتھ منتقل ہو جائے گی۔ ریکویسٹ فارمیٹ وہی ہے؛ اس کے پیچھے موجود ضمانت کی قوت ایک جیسی نہیں۔
4. ماڈل مخصوص رویہ SDK کا مسئلہ نہیں
یہ وہ کنارہ ہے جسے لوگ اکثر compatibility مسئلہ سمجھ بیٹھتے ہیں۔ جب آپ GPT-5.5 سے Claude Sonnet 4.6 پر بدلتے ہیں، API کال یکساں ہوتی ہے — مگر ماڈلز مختلف طریقے سے برتاؤ کرتے ہیں۔ Claude system prompts کو مختلف انداز سے ہینڈل کرتا ہے، ڈیفالٹ verbosity مختلف ہے، tools کے استعمال کے رجحان مختلف ہیں۔ یہ ماڈل کا فرق ہے، SDK کا نہیں، اور یہ کسی بھی compatible اینڈ پوائنٹ پر برقرار رہتا ہے۔ base-URL کا تبادلہ کال کو چلنے کے قابل بناتا ہے؛ یہ دو مختلف ماڈلز کو ایک جیسا آؤٹ پٹ دینے پر مجبور نہیں کرتا۔ ماڈل بدلتے وقت پرامپٹس میں ردوبدل کا منصوبہ رکھیں — compatibility کی ناکامی کی وجہ سے نہیں، بلکہ اس لیے کہ آپ واقعی ایک مختلف ماڈل سے بات کر رہے ہیں۔
بولڈ: کناروں کا اصول:
معیاری OpenAI سطح — chat completions، streaming، tool calls، معیاری پیرامیٹرز — پر انحصار کریں تو تبادلہ محفوظ ہے۔ جہاں کہیں آپ نے کسی وینڈر مخصوص شے — غیر معمولی پیرامیٹر، ریسپانس کا حاشیائی فیلڈ، سخت سکیمہ ضمانت — کو اپنایا ہے، اسے ایسی وابستگی سمجھیں جسے بدلنے سے پہلے تصدیق کرنی ہو، نہ کہ کوئی ایسی شے جو base URL مفت میں ساتھ لے جائے۔ اور ہمیشہ توقع رکھیں کہ ماڈل کا برتاؤ مختلف ہوگا، کیونکہ فرق ماڈل کا ہے، اینڈ پوائنٹ کا نہیں۔
بولڈ: کن ماڈل اقسام میں آج یہ پیٹرن سپورٹڈ ہے
base-URL کا تبادلہ ٹیکسٹ ماڈلز کے لیے سب سے صاف ہے، اور جیسے جیسے آپ دیگر موڈیلٹیز کی طرف بڑھتے ہیں سپورٹ گھٹتی ہے۔ مختلف ماڈل اقسام کے بارے میں موجودہ صورتِ حال یہ ہے۔
| Model type | Base-URL swap سپورٹ | Notes |
|---|---|---|
| متن/چیٹ (LLMs) | مکمل | بنیادی compatible سطح۔ Chat completions، streaming، tool calls، structured output سب معیاری OpenAI فارمیٹ کے ذریعے کام کرتے ہیں۔ |
| Embeddings | مکمل | embeddings اینڈ پوائنٹ OpenAI وضاحت کا حصہ ہے اور compatible فراہم کنندگان میں اسی ریکویسٹ/ریسپانس شکل کے ساتھ وسیع پیمانے پر سپورٹڈ ہے۔ |
| ویژن (تصویری ان پٹ) | مضبوط | messages array میں image inputs compatible فراہم کنندگان پر OpenAI ملٹی ماڈل فارمیٹ کی پیروی کرتے ہیں؛ مخصوص ماڈل کی vision سپورٹ کی تصدیق کریں۔ |
| تصویر جنریشن | جزوی | اکثر اسی اینڈ پوائنٹ کے ذریعے فراہم کنندہ کے اپنے model strings سے ظاہر کی جاتی ہے، مگر ریکویسٹ پیرامیٹرز (size، quality) ماڈل کے لحاظ سے بدل سکتے ہیں۔ فی ماڈل ٹیسٹ کریں۔ |
| آڈیو (اسپیچ/ٹرانسکرپشن) | جزوی | بہت سے compatible ایگریگیٹرز پر دستیاب، مگر پیرامیٹر سطح chat کی نسبت کم یکساں ہے۔ مخصوص ماڈل کے متوقع فارمیٹ کو چیک کریں۔ |
| ویڈیو جنریشن | مختلف | بڑھتی ہوئی دستیابی ایگریگیٹرز کے ذریعے model strings سے، مگر قیمت اور پیرامیٹرز فی ماڈل ہوتے ہیں نہ کہ ایک یکساں وضاحت کے ذریعے۔ |
اس جدول سے لینے کا پیٹرن: متن اور embeddings سب سے محفوظ میدان ہیں، جہاں base-URL کا تبادلہ واقعی ایک سطر ہے۔ جیسے جیسے آپ تصویر، آڈیو اور ویڈیو کی طرف بڑھتے ہیں، اینڈ پوائنٹ تو یکساں رہتا ہے مگر فی-ماڈل پیرامیٹر سطح پھیلتی ہے، لہٰذا "بدلو اور چلاؤ" "بدلو اور اس ماڈل کے پیرامیٹرز کی تصدیق کرو" بن جاتا ہے۔ ایک ایگریگیٹر جو سیکڑوں ماڈلز کو ایک OpenAI-compatible اینڈ پوائنٹ کے ذریعے سامنے لاتا ہے، ان سب تک ایک ہی base URL اور key سے رسائی دیتا ہے — یکسانیت رسائی میں ہے، جبکہ فی موڈیلٹی پیرامیٹر فرق وہ چیز ہے جسے چیک کرنا چاہیے۔
اسے صاف طریقے سے سیٹ اپ کرنا
اگر آپ base-URL پیٹرن کو اس انداز میں اپنانا چاہتے ہیں کہ آئندہ فراہم کنندہ کی تبدیلیاں معمولی رہیں، تو چند طرزِ عمل اسے مضبوط بناتے ہیں:
- base URL اور model کو environment variables میں رکھیں۔ انہیں کبھی hard-code نہ کریں۔ دونوں env vars ہوں تو فراہم کنندہ یا ماڈل بدلنا محض کنفیگ تبدیلی اور ری ڈپلائے ہے — کوڈ چھوئے بغیر۔ یہی عملی طور پر "ایک سطر" کو واقعی ایک سطر بناتا ہے۔
- اپنے بنیادی راستوں میں معیاری OpenAI سطح پر قائم رہیں۔ جن ورک لوڈز کو آپ portable رکھنا چاہتے ہیں ان میں معیاری پیرامیٹرز اور معیاری ریسپانس فیلڈز استعمال کریں۔ وینڈر مخصوص فیچرز کو وہاں محفوظ رکھیں جہاں آپ نے باشعور فیصلہ کیا ہو کہ lock-in قابلِ قبول ہے۔
- ریسپانس کو اپنی حد پر normalize کریں۔ وہ فیلڈز نکالیں جن کی آپ کی ایپلیکیشن کو ضرورت ہے — text، usage، tool calls — اور انہیں اپنے اندرونی سٹرکچر میں ڈھالیں بالکل وہیں جہاں ریسپانس آتا ہے۔ نیچے کے کوڈ کا انحصار آپ کی شکل پر ہوگا، یوں فراہم کنندگان کے درمیان ریسپانس کے حاشیائی فرق کبھی نیچے تک نہیں پہنچیں گے۔
- پہلے غیر اہم ورک لوڈ پر تبادلہ ٹیسٹ کریں۔ پروڈکشن راستہ بدلنے سے پہلے، ایک کم حساس ورک لوڈ کو نئے base URL پر پوائنٹ کریں اور اپنے حقیقی پرامپٹس اس پر چلائیں۔ کناروں — پیرامیٹر ہینڈلنگ، structured-output کی سختی، ماڈل کا برتاؤ — کو دیکھیں اور تصدیق کریں کہ وہ آپ کے مخصوص استعمال کے لیے قائم ہیں۔
- ماڈل بدلنے کے بعد پرامپٹس ٹیون کرنے کی توقع رکھیں۔ ماڈل بدلتے وقت پرامپٹس میں معمولی ایڈجسٹمنٹ کے لیے وقت رکھیں۔ کال فوراً کام کرتی ہے؛ نئے ماڈل کو پرانے کے آؤٹ پٹ معیار سے قریب لانا پرامپٹ ورک ہے، اور یہ معمول کی بات ہے۔
base-URL پیٹرن بالکل درست آرکیٹیکچر ہے یا نہیں، یہ آپ کی صورتِ حال پر منحصر ہے — ایک واحد-ماڈل، زیادہ حجم والا پروڈکشن راستہ براہِ راست فراہم کنندہ پر بہتر ہو سکتا ہے، جبکہ کثیر-ماڈل یا تیز رفتار تکراری ورک لوڈ swap-friendly سیٹ اپ سے زیادہ فائدہ اٹھاتا ہے۔ ٹریڈ آفز یہاں بیان ہیں: یکجا گیٹ وے کب استعمال کریں اور کب براہِ راست فراہم کنندہ APIs۔
بولڈ: اس کے نتیجے میں آپ کے پاس کیا رہتا ہے
"Change your AI provider with one line" درست ہے — اس دقت کے ساتھ جو اس تحریر نے شامل کی۔ اس معیاری OpenAI سطح کے لیے جس پر زیادہ تر پروڈکشن AI چلتا ہے (chat completions، streaming، tool calls، embeddings)، base-URL کا تبادلہ واقعی ایک واحد کنفیگریشن تبدیلی ہے، اور SDK، ریکویسٹ فارمیٹ، اور ریسپانس شکل سب بغیر چھوئے منتقل ہو جاتے ہیں۔ کنارے — وینڈر مخصوص پیرامیٹرز، ریسپانس کی حاشیائی ساخت، structured-output کی سختی، اور غیر متنی موڈیلٹیز — حقیقی ہیں مگر معلوم شدہ، اور عام استعمال کے لیے ان میں سے کوئی بھی پیٹرن کو نہیں توڑتا۔ اور ماڈل کا برتاؤ ہمیشہ تبادلے کے بعد مختلف ہوگا، کیونکہ یہ ماڈل کی اپنی روش ہے، اینڈ پوائنٹ کی ناکامی نہیں۔
اٹالک: عملی اگلا قدم:
اپنا base URL اور model name environment variables میں رکھیں، اپنے بنیادی راستوں کو معیاری OpenAI سطح پر رکھیں، اور ایک غیر اہم ورک لوڈ پر تبادلہ ٹیسٹ کریں۔ جب آپ اسے چلتا دیکھ لیں، تو فراہم کنندہ کا انتخاب ایک کنفیگ ویلیو بن جاتا ہے، آرکیٹیکچرل کمٹمنٹ نہیں۔ ایک OpenAI-compatible اینڈ پوائنٹ جو بہت سے ماڈلز کو سامنے لاتا ہے، ہر تبادلے کو ایک سطر کی تبدیلی بنائے رکھنے کا آسان ترین طریقہ ہے — ایک ہی key سے۔
base-URL کا تبادلہ اس لیے کام کرتا ہے کہ compatible فراہم کنندگان وہی OpenAI API وضاحت نافذ کرتے ہیں — base URL بدلیں اور SDK ایک یکساں ریکویسٹ مختلف منزل پر بھیجتا ہے۔ chat، streaming، tool calls، اور embeddings کے لیے یہ واقعی ایک سطر ہے۔ کناروں (وینڈر مخصوص پیرامیٹرز، structured-output کی سختی، غیر متنی موڈیلٹیز) کو اپنانے سے پہلے تصدیق کریں، اپنے بنیادی راستوں کو معیاری رکھیں، اور توقع رکھیں کہ ماڈل کا برتاؤ — کال نہیں — تبادلے کے بعد مختلف ہوگا۔
ذرائع: OpenAI API وضاحت اور compatibility کا برتاؤ موجودہ OpenAI، Anthropic، اور Google API دستاویزات کے مقابلے پر، اور CometAPI اینڈ پوائنٹ دستاویزات کے ساتھ، جون 2026 تک تصدیق شدہ۔ ماڈل-قسم سپورٹ بڑے ایگریگیٹرز کی موجودہ compatible سطح کی عکاسی کرتا ہے اور فراہم کنندگان کے API بڑھانے کے ساتھ تبدیل ہو سکتا ہے۔
اٹالک: API سطحیں ارتقا پذیر ہیں۔ یہ مضمون سہ ماہی ریفریش شیڈول پر ہے — آخری تصدیق جون 2026۔
