FinRobot کو ایک custom OpenAI-compatible endpoint پر چلائیں۔
Updated 2026-07-30
FinRobot اپنے LLM credentials ایک AutoGen OAI_CONFIG_LIST file سے پڑھتا ہے جس کی entries ایک base_url key قبول کرتی ہیں۔ https://api.apisrouter.com/v1 کی طرف point کرنے والی ایک entry اپنی gateway key کے ساتھ شامل کریں، اور forecaster، report-writer، اور RAG agents کیٹلاگ کے کسی بھی model id پر چل سکتے ہیں۔
فوری جواب: OAI_CONFIG_LIST میں ایک entry۔
FinRobot کی setup instructions آپ سے OAI_CONFIG_LIST_sample کا نام بدل کر OAI_CONFIG_LIST رکھنے اور credentials بھرنے کو کہتی ہیں۔ وہ file ایک standard AutoGen config list ہے: ایک JSON array جہاں ہر entry model اور api_key لیتی ہے، اور اختیاری طور پر base_url، جسے shipped sample پہلے سے non-default endpoints کے لیے demonstrate کرتا ہے۔ اپنی gateway key اور base_url کو https://api.apisrouter.com/v1 پر سیٹ کر کے ایک entry شامل کریں، اور file لوڈ کرنے والا ہر FinRobot agent اس کے ذریعے route ہو سکتا ہے۔ ایک وہ چیز جو لوگوں کا وقت ضائع کرتی ہے: tutorials file کو autogen.config_list_from_json کے ذریعے ایک filter_dict کے ساتھ لوڈ کرتے ہیں جو model name سے entries منتخب کرتا ہے۔ اگر آپ کی نئی entry claude-sonnet-4-6 کہتی ہے مگر filter اب بھی sample کی GPT id مانگ رہا ہو، تو آپ کی entry filter ہو کر رہ جاتی ہے اور run پرانے credentials پر fail ہو جاتا ہے۔ filter_dict کو اس model سے میچ کرنے کے لیے update کریں جو آپ نے شامل کیا، یا testing کے دوران filter ہٹا دیں۔
[
{
"model": "claude-sonnet-4-6",
"api_key": "sk-YOUR-APISROUTER-KEY",
"base_url": "https://api.apisrouter.com/v1"
}
]FinRobot اپنا LLM config کیسے استعمال کرتا ہے۔
FinRobot (GitHub پر AI4Finance-Foundation، تقریباً 7.6K stars) AutoGen (pyautogen 0.2.19 یا نیا) پر بنا ایک financial analysis کے لیے AI agent platform ہے۔ اس کے agents packaged workflows ہیں: ایک Market_Analyst forecaster جو company news اور fundamentals کھینچتا ہے اور اگلے ہفتے کی movement predict کرتا ہے، ایک annual-report writer جو filings کو ایک equity research PDF میں بدلتا ہے، اور earnings calls اور SEC filings پر retrieval-augmented QA agents۔ ہر tutorial ایک جیسی llm_config shape بناتا ہے: ایک dict جس کی config_list autogen.config_list_from_json سے آتی ہے جو OAI_CONFIG_LIST file پڑھتا ہے۔ وہ llm_config پھر finrobot.agents.workflow کے SingleAssistant اور SingleAssistantShadow جیسی wrapper classes کو دی جاتی ہے، جو underlying AutoGen agents کی مالک ہیں۔ endpoint کا فیصلہ اس طرح مکمل طور پر JSON file میں رہتا ہے: AutoGen کا OpenAI client منتخب کردہ entry کے base_url کی طرف /v1/chat/completions requests بھیجتا ہے اور model field کو ایک plain string کے طور پر آگے forward کرتا ہے۔ وہ plain string ہی عملی فائدہ ہے۔ جب base_url کے پیچھے endpoint متعدد vendors serve کرے، تو ایک Claude، DeepSeek، یا Qwen id بغیر FinRobot کو محسوس ہوئے اسی OpenAI-shaped config سے گزر جاتی ہے، اور analysis model بدلنا ایک-line کا JSON edit اور اس سے میچ کرتا filter_dict بن جاتا ہے۔
مکمل سیٹ اپ: config file، filter، اور data keys۔
FinRobot credentials کو دو files میں تقسیم کرتا ہے، اور ان میں سے صرف ایک LLM سے تعلق رکھتی ہے۔ OAI_CONFIG_LIST model endpoints اور keys رکھتی ہے۔ config_api_keys market-data credentials رکھتی ہے (FINNHUB_API_KEY، FMP_API_KEY، SEC_API_KEY، اور social keys)، جو register_keys_from_json کے ذریعے الگ سے لوڈ ہوتی ہے۔ LLM کو gateway کے ذریعے route کرنا پہلی file بدلتا ہے اور دوسری کو بغیر چھیڑے چھوڑ دیتا ہے، تو news pulls، fundamentals، اور filings بالکل پہلے جیسا behave کرتے ہیں۔ نیچے دیا گیا tutorial pattern forecaster notebook کا structure ہے جس میں gateway entry منتخب کی گئی ہے۔ وہی llm_config annual-report اور RAG tutorials کے لیے بھی کام کرتا ہے، جو صرف اس میں فرق رکھتے ہیں کہ وہ کون سی workflow class instantiate کرتے ہیں۔
import autogen
from finrobot.utils import register_keys_from_json
from finrobot.agents.workflow import SingleAssistant
llm_config = {
"config_list": autogen.config_list_from_json(
"../OAI_CONFIG_LIST",
filter_dict={"model": ["claude-sonnet-4-6"]}, # match your entry
),
"timeout": 120,
"temperature": 0,
}
register_keys_from_json("../config_api_keys") # finnhub/fmp/sec data keys
assistant = SingleAssistant("Market_Analyst", llm_config,
human_input_mode="NEVER")
assistant.chat("Analyze NVDA news this week and predict next week's movement.")ہر FinRobot workflow کے لیے models چننا۔
صاف experiment loop: ticker اور date range fix کریں، فی candidate entry ایک بار وہی workflow چلائیں، اور outputs کا موازنہ side by side کریں۔ ایک endpoint کے پیچھے ہر candidate ایک filter_dict edit ہے، اور per-key usage log آپ کو بغیر spreadsheet کام کے فی candidate token bill دے دیتا ہے۔
- Annual-report writer سب سے بھاری reasoning کام ہے: یہ filing sections پڑھتا ہے، ایک investment thesis synthesize کرتا ہے، اور ایک structured report drafts کرتا ہے۔ اس workflow میں claude-opus-4-7 یا gpt-5.5 وہ جگہ ہے جہاں output quality واضح طور پر بدلتی ہے۔
- Market forecaster ایک چھوٹا، بار بار دہرایا جانے والا کام ہے news اور fundamentals پر۔ claude-sonnet-4-6 یا deepseek-v4-pro اسے اچھی طرح handle کرتی ہے، اور یہ اہم ہوتا ہے جب آپ اسے روزانہ ایک watchlist پر چلاتے ہیں۔
- Earnings calls پر RAG QA retrieval کے ساتھ لمبے excerpts پر synthesis ہے، جو long-context ids کو ترجیح دیتا ہے؛ وہاں gemini-3.1-pro-preview کو claude-sonnet-4-6 کے مقابلے ٹیسٹ کرنے کے قابل ہے۔
- چونکہ entries filter_dict کے ذریعے منتخب ہوتی ہیں، آپ ایک ہی file میں ایک frontier entry اور ایک fast entry اسی base_url کے خلاف رکھ سکتے ہیں اور فی notebook چن سکتے ہیں، بجائے اس کے کہ فی-run credentials edit کریں۔
- Model ids exact strings ہیں۔ FinRobot انہیں بغیر validate کیے آگے گزارتا ہے، تو endpoint کی /v1/models listing ہی authoritative spelling ہے۔
استعمال کے مطابق ادائیگی · سرکاری قیمت سے کم
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| ماڈل | سرکاری قیمت | ہماری قیمت |
|---|---|---|
| Claude Opus 4.7 | $5.00 / $25.00 per M | $4.00 / $20.00 per M |
| Claude Sonnet 4.6 | $3.00 / $15.00 per M | $2.40 / $12.00 per M |
| GPT-5.4 | $2.50 / $15.00 per M | $2.00 / $12.00 per M |
| DeepSeek V4 Pro | $0.43 / $0.87 per M | $0.40 / $0.90 per M |
| Gemini 3.1 Pro Preview | $2.00 / $12.00 per M | $1.60 / $9.60 per M |
FinRobot سے مخصوص failure modes۔
filter_dict mismatch سب سے بڑا مسئلہ ہے۔ config_list_from_json صرف وہی entries واپس کرتا ہے جن کا model filter سے میچ کرے؛ ایک filter جو کچھ بھی میچ نہ کرے ایک empty config list کے بارے میں error دیتا ہے، اور ایک filter جو sample کی بچی ہوئی entries سے میچ کرے placeholder keys کے ساتھ OpenAI کو requests بھیجتا ہے، جو غلط host سے 401 کے طور پر سامنے آتا ہے۔ جب routing کی تبدیلیاں اثر انداز ہوتی نظر نہ آئیں، پہلے resolved config_list print کریں۔ Relative paths دوسرا مسئلہ ہیں۔ tutorials "../OAI_CONFIG_LIST" لوڈ کرتے ہیں کیونکہ notebooks repo root سے ایک level نیچے بیٹھتے ہیں؛ root پر موجود ایک script کو اس کی بجائے "OAI_CONFIG_LIST" چاہیے، اور AutoGen OAI_CONFIG_LIST environment variable بھی قبول کرتا ہے جو JSON string رکھتی ہو، جو containers میں path issues سے بچا دیتا ہے۔ Comment lines تیسرا مسئلہ ہیں۔ setup instructions آپ کو sample files سے comment notes ہٹانے کو کہتی ہیں کیونکہ یہ JSON کو invalid بنا دیتے ہیں؛ startup پر ایک JSONDecodeError کا مطلب ہے کوئی آوارہ comment باقی رہ گیا۔ Data credentials خودمختار طور پر fail ہوتی ہیں۔ اگر agent chats ٹھیک چلیں مگر news یا fundamentals خالی واپس آئیں، تو یہ config_api_keys کا مسئلہ ہے (Finnhub، FMP، SEC)، endpoint کا نہیں۔ اور الگ FinRobot Pro equity module اپنی keys config.ini کے ذریعے configure کرتا ہے؛ جولائی 2026 تک اس کی documented settings ایک openai_api_key کور کرتی ہیں مگر کوئی base-URL override نہیں، تو اس module کو direct-vendor سمجھیں جب تک upstream ایک documented نہ کرے۔
FinRobot کو gateway کے ذریعے کون route کرتا ہے۔
- وہ analysts جو ایک coverage list پر equity reports generate کرتے ہیں۔ فی report لمبے filing contexts فی-model price فرق کو اہم بنا دیتے ہیں، اور ایک endpoint model کو فی-run choice بنا دیتا ہے۔
- وہ quant teams جو روزانہ ایک watchlist پر forecaster چلاتی ہیں، جہاں ایک تیز mid-tier id workflow دوبارہ لکھے بغیر recurring bill کو flat رکھتی ہے۔
- وہ researchers جو identical financial tasks پر model families compare کرتے ہیں۔ ہر candidate ایک config entry ہے، نہ کہ vendor account اور SDK swap۔
- وہ teams جو AutoGen-based stacks standardize کرتی ہیں۔ FinRobot دیگر AutoGen projects کے ساتھ OAI_CONFIG_LIST convention share کرتا ہے، تو ایک gateway entry format سب کو serve کرتا ہے۔
- وہ developers جن کے پاس کسی مخصوص vendor کی billing تک رسائی نہیں۔ Top-up پر مبنی رسائی بغیر کارڈ کی شرط کے فی-provider sign-up کا انحصار ختم کر دیتی ہے۔
Endpoint verify کریں اور پہلا run debug کریں۔
notebook کھولنے سے پہلے وہ models list کریں جن سے آپ کی key بات کر سکتی ہے؛ OAI_CONFIG_LIST میں ہر model string اور ہر filter_dict value کو کسی served id سے exact میچ ہونا چاہیے۔ پھر SingleAssistant کے ذریعے مختصر ترین ممکنہ chat چلائیں اور console دیکھیں۔ ایک 401 کا مطلب ہے منتخب entry کی api_key اس کے base_url والے endpoint سے تعلق نہیں رکھتی؛ چیک کریں کہ filter نے دراصل کون سی entry چنی۔ ایک model-not-found error entry میں ایک id typo ہے۔ ایک connection error عموماً مطلب ہے base_url نے اپنا /v1 suffix کھو دیا۔ اگر agent بغیر tool results کے loop کرے، تو config_api_keys میں موجود data keys مشتبہ ہیں، LLM endpoint نہیں۔ جب requests چلنے لگیں، APIsRouter console per-request model، token counts، اور spend دکھاتا ہے۔ Report-writing runs لمبی multi-turn conversations ہوتی ہیں، اور usage view دکھاتا ہے کہ ایک report کی حقیقی قیمت کیا ہے اس سے پہلے کہ آپ ایسی پچاس schedule کریں۔
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50عمومی سوالات
کیا FinRobot ایک custom OpenAI-compatible endpoint سپورٹ کرتا ہے؟
جی ہاں۔ FinRobot AutoGen-style OAI_CONFIG_LIST entries پڑھتا ہے، اور entries model اور api_key کے ساتھ ساتھ ایک base_url key بھی قبول کرتی ہیں۔ base_url کو gateway کی طرف point کریں، اپنے filter_dict کو entry کے model سے میچ رکھیں، اور agents اس کے ذریعے route ہو جاتے ہیں۔
کیا FinRobot agents Claude، DeepSeek، یا Qwen models پر چل سکتے ہیں؟
جی ہاں۔ AutoGen model field کو /v1/chat/completions پر ایک plain string کے طور پر forward کرتا ہے، تو endpoint جو بھی id serve کرے وہ چلتی ہے۔ entry اور filter_dict میں model name کو صرف کیٹلاگ id سے exact میچ ہونا ہے۔
FinRobot میری نئی OAI_CONFIG_LIST entry کیوں نظر انداز کرتا ہے؟
تقریباً ہمیشہ filter_dict کی وجہ سے۔ tutorials model name سے entries filter کرتے ہیں، تو ایک entry جس کا model filter سے میچ نہ کرے خاموشی سے exclude ہو جاتی ہے۔ filter_dict کو اپنی نئی model id پر update کریں، یا testing کے دوران بغیر filter کے file لوڈ کریں۔
جب میں LLM endpoint بدلوں تو کیا میری Finnhub، FMP، اور SEC keys بدل جاتی ہیں؟
نہیں۔ Market-data credentials config_api_keys میں رہتی ہیں اور register_keys_from_json کے ذریعے لوڈ ہوتی ہیں، جو OAI_CONFIG_LIST سے مکمل طور پر الگ ہے۔ LLM کو gateway کے ذریعے route کرنا data pipeline کو نہیں چھوتا۔
یہ کس AutoGen version پر لاگو ہوتا ہے؟
FinRobot pyautogen 0.2.19 یا نیا pin کرتا ہے اور 0.2-style config_list_from_json loader استعمال کرتا ہے۔ config entries میں base_url key اس generation میں standard ہے، تو کسی FinRobot code تبدیلی کی ضرورت نہیں۔
کیا FinRobot Pro equity module بھی base_url کا احترام کرتا ہے؟
جیسا documented ہے ویسا نہیں۔ اس کی config.ini API_KEYS کے تحت ایک openai_api_key expose کرتی ہے مگر جولائی 2026 تک کوئی endpoint override نہیں۔ یہاں بیان کردہ OAI_CONFIG_LIST routing اصل FinRobot agents اور tutorials پر لاگو ہوتی ہے۔