FinRobot একটা কাস্টম OpenAI-compatible endpoint-এ চালান।

Updated 2026-07-30

FinRobot তার LLM credential একটা AutoGen OAI_CONFIG_LIST file থেকে পড়ে যার entry base_url key accept করে। https://api.apisrouter.com/v1-এ point করা একটা gateway key সহ একটা entry যোগ করুন, এবং forecaster, report-writer, এবং RAG agent catalog-এর যেকোনো model id-তে চলতে পারবে।

দ্রুত উত্তর: OAI_CONFIG_LIST-এ একটা entry।

FinRobot-এর setup instruction আপনাকে OAI_CONFIG_LIST_sample-কে OAI_CONFIG_LIST-এ rename করতে এবং credential পূরণ করতে বলে। সেই file একটা standard AutoGen config list: একটা JSON array যার প্রতিটা entry model এবং api_key নেয়, এবং optionally base_url, যা shipped sample non-default endpoint-এর জন্য ইতিমধ্যে demonstrate করে। আপনার gateway key এবং base_url-কে https://api.apisrouter.com/v1-এ সেট করা একটা entry যোগ করুন, এবং file load করা প্রতিটা FinRobot agent এর মধ্য দিয়ে route হতে পারে। একটা catch যা মানুষের সময় নষ্ট করে: tutorial-গুলো autogen.config_list_from_json দিয়ে file load করে একটা filter_dict সহ যা model name দিয়ে entry select করে। আপনার নতুন entry যদি claude-sonnet-4-6 বলে কিন্তু filter এখনও sample-এর GPT id চায়, তাহলে আপনার entry filter হয়ে বাদ যায় এবং run পুরনো credential-এ fail করে। filter_dict-কে আপনার যোগ করা model-এর সাথে match করে update করুন, বা test করার সময় filter drop করুন।

[
    {
        "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 star) হলো AutoGen (pyautogen 0.2.19 বা তার পরে)-এর উপর বানানো financial analysis-এর জন্য একটা AI agent platform। এর agent-গুলো packaged workflow: একটা Market_Analyst forecaster যা company news এবং fundamentals টানে ও পরের সপ্তাহের movement predict করে, একটা annual-report writer যা filing-কে একটা equity research PDF-এ পরিণত করে, এবং earnings call ও SEC filing-এর উপর retrieval-augmented QA agent। প্রতিটা tutorial একই llm_config shape বানায়: একটা dict যার config_list আসে autogen.config_list_from_json থেকে যা OAI_CONFIG_LIST file পড়ে। সেই llm_config finrobot.agents.workflow-এর SingleAssistant এবং SingleAssistantShadow-এর মতো wrapper class-কে handed হয়, যারা underlying AutoGen agent-এর owner। তাই endpoint decision সম্পূর্ণ JSON file-এ থাকে: AutoGen-এর OpenAI client selected entry যে base_url রাখে তার কাছে /v1/chat/completions request পাঠায় এবং model field একটা plain string হিসেবে forward করে। সেই plain string-ই practical জয়। base_url-এর পিছনের endpoint একাধিক vendor serve করলে, একটা Claude, DeepSeek, বা Qwen id FinRobot-কে না জানিয়ে একই OpenAI-shaped config দিয়ে চড়ে, এবং analysis model swap করা একটা এক-লাইনের JSON edit প্লাস একটা matching filter_dict হয়ে যায়।

সম্পূর্ণ সেটআপ: config file, filter, এবং data key।

FinRobot দুইটা file জুড়ে credential split করে, এবং শুধু একটাই LLM নিয়ে matter করে। OAI_CONFIG_LIST model endpoint এবং key ধরে রাখে। config_api_keys market-data credential ধরে রাখে (FINNHUB_API_KEY, FMP_API_KEY, SEC_API_KEY, এবং social key), যা আলাদাভাবে register_keys_from_json দিয়ে load হয়। LLM-কে একটা gateway দিয়ে route করা প্রথম file পাল্টায় এবং দ্বিতীয়টা অস্পৃষ্ট রাখে, তাই news pull, fundamentals, এবং filing আগের মতোই behave করে। নিচের tutorial pattern হলো gateway entry select করা forecaster notebook-এর structure। একই llm_config annual-report এবং RAG tutorial-এর জন্য কাজ করে, যা শুধু কোন 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-এ model বেছে নেওয়া।

Clean experiment loop: ticker এবং date range fix করুন, প্রতি candidate entry-তে একই workflow একবার চালান, এবং output পাশাপাশি তুলনা করুন। এক endpoint-এর পিছনে প্রতিটা candidate একটা filter_dict edit, এবং per-key usage log spreadsheet work ছাড়াই প্রতি candidate-এর token bill দেয়।

  • Annual-report writer সবচেয়ে ভারী reasoning job: এটা filing section পড়ে, একটা investment thesis synthesize করে, এবং একটা structured report draft করে। সেই workflow-এ claude-opus-4-7 বা gpt-5.5 হলো যেখানে output quality দৃশ্যতভাবে পাল্টায়।
  • Market forecaster একটা ছোট, বারবার হওয়া কাজ news এবং fundamentals-এর উপর। claude-sonnet-4-6 বা deepseek-v4-pro এটা ভালোভাবে handle করে, এবং matter করে যখন আপনি এটা প্রতিদিন একটা watchlist জুড়ে চালান।
  • Earnings call-এর উপর RAG QA হলো লম্বা excerpt-এর উপর retrieval প্লাস synthesis, যা long-context id-কে prefer করে; সেখানে gemini-3.1-pro-preview claude-sonnet-4-6-এর বিরুদ্ধে test করার যোগ্য।
  • যেহেতু filter_dict দিয়ে entry select হয়, আপনি একই base_url-এর বিরুদ্ধে একটা frontier entry এবং একটা fast entry সহ এক file রাখতে পারেন এবং প্রতি run credential edit না করে প্রতি notebook বেছে নিতে পারেন।
  • Model id exact string। FinRobot সেগুলো unvalidated pass through করে, তাই 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-specific failure mode।

filter_dict mismatch-ই সবচেয়ে বড়। config_list_from_json শুধু সেই entry return করে যাদের model filter-এর সাথে মেলে; কিছুতেই না মেলা একটা filter একটা empty config list সম্পর্কে error raise করে, এবং sample-এর বাকি থাকা entry-র সাথে মেলা একটা filter placeholder key দিয়ে OpenAI-তে request পাঠায়, যা ভুল host থেকে একটা 401 হিসেবে surface করে। Routing change কার্যকর হচ্ছে না মনে হলে, প্রথমে resolved config_list print করুন। Relative path দ্বিতীয়। Tutorial-গুলো "../OAI_CONFIG_LIST" load করে কারণ notebook repo root-এর এক level নিচে বসে; root-এ একটা script "OAI_CONFIG_LIST" চায়, এবং AutoGen JSON string বহন করা OAI_CONFIG_LIST environment variable-ও accept করে, যা container-এ path সমস্যা এড়ায়। Comment line তৃতীয়। Setup instruction আপনাকে sample file থেকে comment note সরাতে বলে কারণ সেগুলো JSON invalid করে দেয়; startup-এ একটা JSONDecodeError মানে একটা stray comment টিকে গেছে। Data credential স্বাধীনভাবে fail করে। Agent chat ঠিকভাবে চললেও news বা fundamentals খালি ফিরলে, সেটা একটা config_api_keys সমস্যা (Finnhub, FMP, SEC), endpoint সমস্যা না। এবং আলাদা FinRobot Pro equity module তার key config.ini দিয়ে configure করে; 2026-এর জুলাই পর্যন্ত এর documented setting একটা openai_api_key কভার করে কিন্তু কোনো base-URL override না, তাই upstream একটা documents না করা পর্যন্ত সেই module-কে direct-vendor ধরুন।

কারা একটা gateway দিয়ে FinRobot route করে।

  • একটা coverage list জুড়ে equity report generate করা Analyst। প্রতি report লম্বা filing context per-model price পার্থক্যকে material বানায়, এবং এক endpoint model-কে প্রতি run-এ একটা choice বানায়।
  • একটা watchlist-এর উপর প্রতিদিন forecaster চালানো Quant team, যেখানে একটা fast mid-tier id workflow rewrite না করে recurring bill flat রাখে।
  • অভিন্ন financial task-এ model family তুলনা করা Researcher। প্রতিটা candidate একটা config entry, vendor account এবং SDK swap না।
  • AutoGen-based stack standardize করা Team। FinRobot অন্য AutoGen project-এর সাথে OAI_CONFIG_LIST convention share করে, তাই এক gateway entry format সবগুলো serve করে।
  • Developer যাদের কোনো নির্দিষ্ট vendor-এর billing-এ access নেই। কোনো card requirement ছাড়া Top-up based access per-provider sign-up dependency সরিয়ে দেয়।

Endpoint verify করুন এবং প্রথম run debug করুন।

একটা notebook খোলার আগে আপনার key যেসব model address করতে পারে তা list করুন; OAI_CONFIG_LIST-এর প্রতিটা model string এবং প্রতিটা filter_dict value exactly একটা served id-র সাথে মিলতে হবে। তারপর SingleAssistant দিয়ে সম্ভাব্য সবচেয়ে ছোট chat চালান এবং console দেখুন। একটা 401 মানে selected entry-র api_key তার base_url-এর endpoint-এর অন্তর্গত না; filter আসলে কোন entry বেছে নিয়েছে তা check করুন। একটা model-not-found error entry-তে একটা id typo। একটা connection error সাধারণত মানে base_url তার /v1 suffix হারিয়েছে। Agent যদি tool result ছাড়া loop করে, config_api_keys-এর data key-ই সন্দেহভাজন, LLM endpoint না। Request flow শুরু হলে, APIsRouter console per-request model, token count, এবং spend দেখায়। Report-writing run লম্বা multi-turn conversation, এবং পঞ্চাশটা schedule করার আগে usage view দেখায় একটা report আসলে কত খরচ করে।

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

সাধারণ প্রশ্ন

FinRobot কি একটা কাস্টম OpenAI-compatible endpoint সাপোর্ট করে?

হ্যাঁ। FinRobot AutoGen-style OAI_CONFIG_LIST entry পড়ে, এবং entry model ও api_key-এর পাশাপাশি একটা base_url key accept করে। base_url-কে gateway-তে point করুন, আপনার filter_dict-কে entry-র model-এর সাথে matching রাখুন, এবং agent তার মধ্য দিয়ে route হবে।

FinRobot agent কি Claude, DeepSeek, বা Qwen model-এ চলতে পারে?

হ্যাঁ। AutoGen model field একটা plain string হিসেবে /v1/chat/completions-এর উপর দিয়ে forward করে, তাই endpoint যা serve করে সেই id কাজ করে। entry-র এবং filter_dict-এর model name-এর exactly catalog id-র সাথে মিলতে হবে।

FinRobot কেন আমার নতুন OAI_CONFIG_LIST entry ignore করে?

প্রায় সবসময় filter_dict। Tutorial-গুলো model name দিয়ে entry filter করে, তাই যার model filter-এর সাথে না মেলে সেই entry নীরবে বাদ যায়। filter_dict-কে আপনার নতুন model id-তে update করুন, বা test করার সময় filter ছাড়া file load করুন।

LLM endpoint পাল্টালে কি আমার Finnhub, FMP, এবং SEC key পাল্টায়?

না। Market-data credential config_api_keys-এ থাকে এবং register_keys_from_json দিয়ে load হয়, 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 entry-র base_url key সেই generation জুড়ে standard, তাই কোনো FinRobot code change দরকার নেই।

FinRobot Pro equity module কি base_url-ও মেনে চলে?

Documented হিসেবে না। এর config.ini API_KEYS-এর নিচে একটা openai_api_key expose করে কিন্তু 2026-এর জুলাই পর্যন্ত কোনো endpoint override না। এখানে বর্ণিত OAI_CONFIG_LIST routing প্রধান FinRobot agent এবং tutorial-এ প্রযোজ্য।