এটি যেভাবে কাজ করে

মডেল প্রস্তাব করে।
SQAI নিষ্পত্তি করে।

একটি এজেন্ট কখনো SQL লেখে না, কখনো চালানোর জন্য কোড নির্গত করে না। এটি একটি টাইপড অনুরোধ লেখে — এবং প্রতিটি অনুরোধ একই পথে চলে: একটি পিন করা চুক্তির বিপরীতে যাচাই, আপনার নীতির বিপরীতে পরীক্ষা, একটি নির্ধারণবাদী ইঞ্জিনে কার্যকর, এবং পুনরায় চালানোর হ্যাশসহ প্রত্যাবর্তিত।

প্রতিটি অনুরোধ — ask(), compute(), বা একটি AI SDK টুল কল — একই পথে চলে। প্রতিটি পরীক্ষা পাস না হওয়া পর্যন্ত কিছুই ইঞ্জিন স্পর্শ করে না।

01টাইপড অভিপ্রায়

ইঞ্জিন পার্স করতে পারে এমন অনুরোধ। বিশ্বাস করতে হয় এমন স্ট্রিং নয়।

মডেলটি একটি টাইপড অবজেক্ট নির্গত করে — SQL নয়, কোড নয়। একটি কোয়েরি অভিপ্রায় হলো QuerySpec: একটি নামযুক্ত সোর্সের উপর একটি মেট্রিক একত্রিত করা। একটি গণনা অভিপ্রায় হলো ComputationSpec: চুক্তি থেকে একটি নামযুক্ত ফাংশন, আর্গুমেন্ট ও বাইন্ডিংসহ। একটি ডিসক্রিমিনেটেড ইউনিয়ন, দুটি আকার — এবং কোথাও কোনো কার্যকরযোগ্য স্ট্রিং লুকানোর জায়গা নেই।

এটিই সম্পূর্ণ অথরিং পৃষ্ঠ। আকারটি যা প্রকাশ করতে পারে না, মডেল তা চাইতে পারে না।

QuerySpecগঠন
{
"kind": "query",ইউনিয়ন ট্যাগ — query বা computation
"version": "1",স্পেক সংস্করণ, পিন করা
"source_name": "sales",সংযুক্ত একটি সোর্স, সঠিক নামে
"metric": "revenue",একত্রিত করার কলাম
"aggregation": "sum",sum · avg · count · min · max-এর একটি
"group_by": "region"ঐচ্ছিক — একটি ফিল্ড দিয়ে ফলাফল বিভক্ত করুন
}

এটিও ঐচ্ছিকfilter · limit · order

গণনার আকারmodule · function · args · kwargs · bindings · seed?

02চুক্তি যাচাই

একটি চুক্তি, হ্যাশ-পিন করা। অজানা প্রত্যাখ্যাত হয় নির্দেশনাসহ।

স্পেকটি ক্যাপাবিলিটি চুক্তির বিপরীতে যাচাই করা হয় — একটি তৈরি, হ্যাশ-পিন করা ফাইল যা প্রতিটি অপারেশন, তার সঠিক সিগনেচার এবং নির্ধারণবাদ ফ্ল্যাগ তালিকাভুক্ত করে। একটি ক্যাপাবিলিটি কেবল তখনই পৌঁছানো যায় যদি এটি রিড-অনলি ও নির্ধারণবাদী হয়, অথবা সিডেড হলে নির্ধারণবাদী হয়। রাইট-সক্ষম ও অ-নির্ধারণবাদী অপারেশন রানটাইমে ব্লক করা হয় না; সেগুলো কখনো পৃষ্ঠে তৈরিই হয়নি।

একটি অজানা ফাংশন unsupported_operation হিসেবে ব্যর্থ হয় এবং একই ইন্ডেক্স থেকে nearest_matches দিয়ে উত্তর দেয় — মডেল লুপ করার বদলে নিজেকে সংশোধন করে।

ক্যাপাবিলিটি চুক্তি

contract_hashsha256:79f1c5a6c7164e7e9e1750e70a5c03292fa87eb52d8148a740c06695924be9a1

4,778
চুক্তিতে তালিকাভুক্ত অপারেশন
4,574
SDK-তে উন্মুক্ত, রিড-অনলি
4,564
সম্পূর্ণ নির্ধারণবাদী
10
সিড-প্রয়োজনীয় সিমুলেশন
204
পৃষ্ঠ থেকে বাদ দেওয়া

যোগ্যতার শর্তread_only && (deterministic || deterministic_when_seeded)

অজানা নামেunsupported_operation + nearest_matches

03নীতি যাচাই

আপনার অনুমতি-তালিকা স্থির করে — এটি চলবে কি না, এবং কীভাবে।

createSQAI() ইনস্ট্যান্স তৈরি করার সময় নীতি নির্ধারিত হয় এবং কিছু কার্যকর হওয়ার আগে ইন-প্রসেসে প্রয়োগ করা হয় — সোর্সে, প্রতিটি মেট্রিক, গ্রুপ, ফিল্টার ও বাউন্ড কলামে, এবং ফাংশন নামে। এটি কেবল চুক্তি সংকুচিত করতে পারে: যোগ্য পৃষ্ঠের বাইরে একটি ক্যাপাবিলিটি নাম দিলে তখনও unsupported_operation ছুড়ে দেয়।

মডেলের টুল ইনপুটে কোনো allowed* ফিল্ড নেই। অনুরোধে এমন কিছু নেই যা অ্যাক্সেস প্রসারিত করতে পারে — তাই প্রম্পট ইনজেকশনের প্রসারিত করার কিছু নেই।

allowedSourcesমডেল যে সোর্স নাম দিতে পারে

  • "sales"

allowedFieldsপ্রতি সোর্সে এটি যে কলাম পড়তে পারে

  • sales.region
  • sales.revenue
  • sales.order_date

allowedFunctionsডিফল্ট — প্রতিটি রিড-অনলি ক্যাপাবিলিটি, এর বেশি নয়

  • "all-readonly"

একটি অস্বীকৃতি সুনির্দিষ্ট, দায়যুক্ত, চূড়ান্ত

  • policy_denied_source
  • policy_denied_field
  • policy_denied_function

source: "sqai" · পুনরায় চেষ্টাযোগ্য নয়

04নির্ধারণবাদী ইঞ্জিন

চালানোর আগে পিন করা: float64, একটি থ্রেড, একটি রানটাইম।

প্রথমে বাইন্ডিং রিজলভ হয়। মডেল একটি সোর্স ও ফিল্ড নাম দিয়েছে; SQAI ইঞ্জিনের রো-অ্যালাইনড extractColumns প্রিমিটিভের মাধ্যমে প্রকৃত মান টেনে আনে, নালগুলো জোড়ায় জোড়ায় পরিচালিত হয়। SQAI নিজে কখনো অ্যারে জিপ করে না — তাই যে ইনপুট হ্যাশ করা হয় সেটি ঠিক সেই ইনপুট যা কার্যকর হয়েছে।

কেবল এখনই অনুরোধটি ইঞ্জিন স্পর্শ করে। রানটাইম স্বাক্ষরিত, সংস্করণযুক্ত ও পিন করা: float64 নির্ভুলতা, একটি একক থ্রেড। প্রথম compute() একবার এটি প্রভিশন করে, প্রায় 110 সেকেন্ডে; এরপর এটি রেসিডেন্ট থাকে — finance.npv উষ্ণ অবস্থায় 0.83–0.93 ms পরিমাপ করে।

নির্ধারণবাদ এনভেলপ
runtime_bundle_version0.1.0
runtime_bundle_sha2564d64142e4c1ff63d299cfc8b172fdf97cb59169b545e1e02978e678a632ce6e1
platformdarwin
architecturearm64
precision_modefloat64
thread_count1
seed
input_hash2ea5ede72acd2912fe9e1230cef34afad4c9436bfa8a709bac2da02b478e3212

প্রতিটি ফলাফলের সাথে রেকর্ড করা হয় — এনভেলপটি অতিরিক্ত দাবি না করে গ্যারান্টির পরিধি জানায়।

05উত্তর + উৎস-প্রমাণ

দুটি হ্যাশ। একটি আগে, একটি পরে।

invocation_hash কার্যকরের আগে স্ট্যাম্প করা হয় — মডিউল, ফাংশন, আর্গুমেন্ট, রিজলভড বাইন্ডিং, সিড, চুক্তি ও স্কোপের উপর। computation_hash পরে স্ট্যাম্প করা হয়: ক্যানোনিকাল ফলাফলের সাথে ভাঁজ করা invocation hash। রিপ্লে মানে আবার চালানো এবং বাইট তুলনা করা।

উভয় SDK একটি ক্যানোনিকাল সিরিয়ালাইজার ভাগ করে, তাই একই গণনা TypeScript ও Python-এ বাইট-অভিন্ন হ্যাশ দেয়। কোয়েরি উত্তরগুলো একই শৃঙ্খলা বহন করে: ক্যানোনিকাল রিজলভড প্ল্যানের উপর একটি plan_hash, সিদ্ধান্তের পথ এবং এটি যে সঠিক স্কোপে চলেছে তাসহ।

3188.1687606249325finance.npv · একটি লাইভ কলামে বাউন্ড · উষ্ণ অবস্থায় 0.83 ms

কার্যকরের আগে স্ট্যাম্প করা

invocation_hash

8223a694250fc751fcf8a7777b8e1f524c44ff1f0e7e83451467f554a6123950

মডিউল · ফাংশন · আর্গুমেন্ট · রিজলভড বাইন্ডিং · সিড · কন্ট্র্যাক্ট · স্কোপ

এক্সিকিউশনের পরে স্ট্যাম্প করা

computation_hash

ff5280ea128113f528dd1e9a28b9bc4a81469075ed7c981c7176fb172d98085d

ইনভোকেশন হ্যাশ, ক্যানোনিকাল ফলাফলের সাথে ফোল্ড করা

TypeScript ও Python-এ বাইট-অভিন্ন — একটি ভাষায় গণনা করা ফলাফল অন্যটিতে রিপ্লে ও যাচাই করা যায়।

উভয়ই গণনা করা হয়contract_hash sha256:79f1c5a6…

কোয়েরি প্লেনেplan_hash f87610d8afeb…decision_path "exact_spec"deterministic_scope "local_registered_source"

06আবিষ্কার লুপ

অনুমান নয়। আবিষ্কার করুন, ড্রাই-রান করুন, তারপর এক্সিকিউট করুন।

ফিল্ডের নাম ও ফাংশন সিগনেচার আবিষ্কার করা হয়, হ্যালুসিনেট নয়। AI SDK ঠিক তিনটি টুল উন্মুক্ত করে — এবং কেবল একটিই এক্সিকিউট করে।

  1. 01listSources()

    আমি কী স্পর্শ করতে পারি?

    সংযুক্ত সোর্সসমূহ, সঠিক ফিল্ডের নাম, টাইপ এবং প্রতিটি ফিল্ডে অনুমোদিত অপারেশনসহ। কখনো এক্সিকিউট করে না।

  2. 02listSources({ capabilitySearch: "npv" })

    আমি কী গণনা করতে পারি?

    একই টুল, ডিটার্মিনিস্টিক ক্যাটালগ অনুসন্ধান করে — মিলে যাওয়া মডিউল, সঠিক সিগনেচার এবং সিড প্রয়োজন কিনা তা সহ।

  3. 03explainQuery({ … })

    এটি চলবে কি?

    একটি ড্রাই রান। রিজলভড প্ল্যান, কনফিডেন্স এবং একটি প্রিভিউ invocation_hash ফেরত দেয় — প্রিভিউ, কখনো এক্সিকিউটেড হ্যাশ নয়।

  4. 04queryData({ … })

    চালান।

    একমাত্র টুল যা এক্সিকিউট করে। ফলাফল এবং তার সম্পূর্ণ প্রভেন্যান্স ফেরত দেয়; অতিরিক্ত বড় ফলাফল result_id দিয়ে পুনরুদ্ধারযোগ্য থাকে।

টুলগুলো কখনো থ্রো করে না — প্রতিটি আউটকাম টাইপডok · needs_clarification · rejected · error

মেকানিক্স, ফিল্ড বাই ফিল্ড।

ডকস পড়ুন