Vercel AI SDK کے لیے

زیرِ نگرانی ڈیٹا ٹولز Vercel AI SDK کے لیے۔

sqai.tools() بالکل تین read-only ٹولز generateText میں شامل کرتا ہے۔ ماڈل ذرائع دریافت کرتا ہے، ایک typed plan پیش کرتا ہے، اور deterministic engine کے حسابات واپس کرتا ہے — ساتھ ایسے hashes جو ہر جواب دوبارہ چلا سکتے ہیں۔

شروع کرنے کے لیے کوئی API key درکار نہیںAI SDK Tools Registry میں درجai ^7.0.0 · zod ^4.0.0 · Node ≥ 20

IIانسٹال

ایک dependency لائن۔

Server-side، Node 20 یا جدید تر — Next.js میں، اسے runtime = "nodejs" کے ساتھ route handler میں چلائیں۔ Peers ہیں ai ^7.0.0 اور zod ^4.0.0، وہی versions جن کے خلاف plans typed ہیں۔ کوئی account، کوئی key، کوئی config file نہیں۔

IIIفوری آغاز

پہلا زیرِ نگرانی جواب۔

import { generateText, isStepCount } from 'ai';
import { createSQAI } from '@thyn-ai/sqai-ai-sdk';

const sqai = createSQAI({
  sources: [{ name: 'orders', path: './orders.csv' }],
});

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4.5',
  tools: sqai.tools(),
  stopWhen: isStepCount(12),
  prompt: 'Total revenue in the east region?',
});

createSQAI() سست روی سے جڑتا ہے — پہلے tool call تک کچھ نہیں پڑھا جاتا۔ sqai.tools() ایک typed SqaiToolSet واپس کرتا ہے، کوئی cast درکار نہیں۔ isStepCount(12) ماڈل کو دریافت، منصوبہ بندی، اور execution کی گنجائش دیتا ہے۔

ذرائع شامل کریں، glue code نہیں۔

CSV، JSON، in-memory records، اور SQLite in-process چلتے ہیں — کچھ بھی آپ کے server سے باہر نہیں جاتا۔ Postgres، Snowflake، BigQuery اور باقی engine کے ذریعے جڑتے ہیں۔ ہر ذریعہ ایک ہی typed شکل میں آتا ہے، اس لیے downstream ٹولز CSV اور Snowflake میں فرق نہیں کر سکتے۔ ہر ذریعہ، تفصیل سے

const sqai = createSQAI({
  sources: [
    { name: 'orders', path: './orders.csv' },
    { name: 'sessions', provider: 'sqlite',
      path: './app.db', table: 'sessions' },
    { name: 'quotes', records: quotes },
  ],
});

ہر آپشن دائرہ تنگ کرتا ہے۔

تراش ہمیشہ ظاہر کی جاتی ہے؛ ادھوری قطاریں کبھی نہیں دکھائی جاتیں۔ ماڈل جو ٹول ان پٹ بھرتا ہے اس میں کوئی allowed* فیلڈ نہیں ہوتی — پالیسی createSQAI() کے وقت مقرر ہوتی ہے اور عمل سے پہلے، ان-پروسیس جانچی جاتی ہے۔ ماڈل وہ حدود نہیں بڑھا سکتا جو اسے دی گئی ہیں۔ مکمل گورننس ماڈل

const sqai = createSQAI({
  sources,
  allowedSources: ['orders'],
  allowedFields: { orders: ['region', 'revenue'] },
  allowedFunctions: 'all-readonly',
  defaultLimit: 100,
  maxRowsToModel: 25,
});
آپشنڈیفالٹاثر
sourcesلازمی

وہ واحد ڈیٹا جو ٹولز دیکھ سکتے ہیں۔ ایک بار registered — sources ناقابلِ تبدیل ہیں۔

allowedSourcesتمام registered

کوئی بھی plan کن sources کو چھو سکتا ہے، یہ محدود کرتا ہے۔

allowedFieldsتمام فیلڈز

فی-source کالم allow-list۔ باقی سب پوشیدہ ہیں۔

allowedFunctions"all-readonly"

صلاحیت allow-list — صرف تنگ کرنے کے لیے۔ اس سے وسیع کچھ بھی نام لینے پر unsupported_operation throw ہوتا ہے۔

defaultLimit100

جب plan اپنی حد خود مقرر نہ کرے تو واپس کی جانے والی rows۔

maxExecutionRows1,000

ایک execution میں پڑھی جانے والی rows کی سخت حد۔

maxRowsToModel25

وہ rows جو ماڈل کو کبھی دکھائی جاتی ہیں۔

maxCellsToModel250

وہ سیلز جو ماڈل کو کبھی دکھائے جاتے ہیں۔

maxBytesToModel32,000

نتیجے کے وہ بائٹس جو ماڈل کو کبھی دکھائے جاتے ہیں۔

IVٹول باکس

بالکل تین ٹولز۔

دریافت، عمل، مشق — ہر ایک کے لیے ایک ٹول۔ یہ سطح آپ کی پیٹھ پیچھے کبھی نہیں بڑھتی۔

01

listSources

کبھی عمل نہیں کرتا

ہر سورس کے فیلڈز، اقسام، اور قطار کی تعداد واپس کرتا ہے، ساتھ ہر عددی فیلڈ پر ممکن آپریشنز بھی۔ تین تفصیلی موڈ ٹوکن لاگت کو مستحکم رکھتے ہیں چاہے سورسز بڑھتے جائیں۔

sum · avg · count · min · max · eq · in · gt · gte · lt · lte · is_null · is_not_null

02

queryData

واحد جو عمل کرتا ہے

ایک ٹائپڈ پلان لیتا ہے — ایک discriminated union، جو کچھ بھی چلنے سے پہلے validate ہوتا ہے۔ چار نتائج، کبھی exception نہیں: لوپ کو ہمیشہ ڈھانچہ ملتا ہے، چاہے جواب نہ میں ہو۔

kind: "query" | "computation" · version: "1"
ok · needs_clarification · rejected · error

03

explainQuery

dry run

ڈیٹا کو چھوئے بغیر پلان کو validate اور resolve کرتا ہے۔ جو invocation_hash واپس آتا ہے وہ اس چیز کا پیش نظارہ ہے جو چلتی — نہ کہ کسی چلی ہوئی چیز کا hash۔

invocation_hash = preview ≠ executed

Vایک رن، مطبوع

ایک حقیقی رن کے حقیقی اعداد۔

generateText · ایک prompt · تین ٹول مراحل

صارف

مشرقی خطے کی کل آمدنی — اور 10% شرح پر ہمارے ریونیو شیڈول کی NPV؟

ٹول
listSources()orders · 12 قطاریں · region, revenue
ٹول
queryData({ kind: "query", version: "1", … })sum(revenue) · region = "east"ok · 2130.50 · 5 آرڈرزplan_hash f87610d8afeb…
ٹول
queryData({ kind: "computation", version: "1", … })finance.npv · rate 0.1 · values ← orders.revenueٹھیک · 3188.17 · 0.83 ms
اسسٹنٹ

مشرقی خطے کی آمدنی 5 آرڈرز پر 2,130.50 ہے۔ 10% شرح پر ریونیو شیڈول کی NPV 3,188.17 ہے۔

ماڈل نے کوئی حساب نہیں لگایا۔ دونوں اعداد deterministic انجن سے آئے — اور hash انہیں دوبارہ چلا سکتا ہے۔

VIعام ٹولز سے موازنہ

ٹائپڈ پلانز ناکام نہیں ہوتے۔

ایک عام SQL ٹولsqai.tools()
ماڈل لکھتا ہےایک عام SQL ٹولایک خام SQL سٹرنگsqai.tools()ایک ٹائپڈ پلان — kind "query" یا "computation"، version "1"، zod-validated
ایک غلط کالایک عام SQL ٹولexception پھینکتا، دوبارہ کوشش کرتا، یا خاموشی سے کچھ نہیں کرتاsqai.tools()needs_clarification اختیارات کے ساتھ واپس کرتا ہے — ٹولز کبھی exception نہیں پھینکتے
ایک ہی سوال دو بارایک عام SQL ٹولمختلف SQL، مختلف جواباتsqai.tools()ایک ہی پلان، ایک ہی hash — قابلِ دہرائی
لکھنے کا راستہایک عام SQL ٹولجو کچھ کنکشن اجازت دےsqai.tools()تعمیر سے ہی کوئی نہیں — 4,574 read-only صلاحیتیں، ماڈل کے لیے کوئی escape hatch نہیں
ثبوتایک عام SQL ٹولکوئی نہیں — ایک قابلِ یقین عددsqai.tools()ہر جواب پر plan_hash اور computation_hash

بائیں جانب کی ناکامیاں درج شدہ ہیں، تصوراتی نہیں: vercel/ai #1905 · #2147 · #12020 · #6913

مکمل ایجنٹ لوپ ڈیزائن کریں

ٹول باکس شپ کریں۔

کوئی API key نہیں۔ کوئی اکاؤنٹ نہیں۔ پہلی ٹول کال بس کام کرتی ہے۔

AI SDK Tools Registry میں درج · ai ^7.0.0 · zod ^4.0.0 · Node ≥ 20 · server-side