مرکزی مواد پر جائیں
اے آئی ٹیوٹوریلز

WERM بنائیں اور مربوط کریں: مقامی AI کی رہنمائی کے لیے C. elegans نیورل نیٹ ورک

WERM انسٹال کرنے، اس کے 302 نیورونز پر مشتمل C. elegans نیٹ ورک کی نقل کاری کرنے، لمس کی محرکات لاگو کرنے، اسے Ollama یا OpenAI سے مطابقت رکھنے والے مقامی سرور سے مربوط کرنے، اور اس کی نیورل حالت کو زبان کے ماڈل کی sampling ترتیبات پر اثرانداز ہونے کے لیے استعمال کرنے کا طریقہ سیکھیں۔

WERM بنائیں اور مربوط کریں: مقامی AI کی رہنمائی کے لیے C. elegans نیورل نیٹ ورک
WERM پروجیکٹ کا بصری خاکہ

WERM کیا کرتا ہے

WERM، جس کا مخفف Wiring-Encoded Recurrent Modulator ہے، ایک چھوٹا عصبی سیمولیشن ہے جو بالغ ہرمافروڈائٹ Caenorhabditis elegans کے حقیقی وائرنگ ڈایاگرام پر مبنی ہے۔ اس کا 302 نیورونز پر مشتمل ریٹ نیٹ ورک براؤزر، Node.js، یا آپ کے کمپیوٹر پر مقامی طور پر چلنے والے لینگویج ماڈل کے ساتھ چلتا ہے۔

یہ ماڈل نقلی حسی محرکات کو پراسیس کرنے کے لیے کنیکٹوم استعمال کرتا ہے۔ ایک اسٹیئرنگ لیئر نتیجے میں حاصل ہونے والی کیڑے کی حالت پڑھتی ہے اور اسے لینگویج ماڈل کی ترتیبات، جیسے temperature، top-p، ٹوکن کی حدود، اور ایک سطری لہجے کے موڈ میں تبدیل کرتی ہے۔ مقامی ماڈل کے ساتھ استعمال ہونے پر WERM کسی ریموٹ سروس کو ڈیٹا نہیں بھیجتا۔

حیاتیاتی ڈیٹا پر کیا مبنی ہے؟

ریپوزٹری میں Cook et al. 2019 کے ذریعے فراہم کردہ بالغ ہرمافروڈائٹ نیٹ ورک شامل ہے، جو OpenWorm Connectome Toolbox کے ذریعے دستیاب ہے۔ اس میں 302 نیورونز، 3,709 ہدایت یافتہ کیمیائی کنکشنز، اور 1,105 گیپ جنکشن جوڑے شامل ہیں۔ کنکشن کے وزن ان الیکٹران مائیکروسکوپ سیکشنز کی تعداد ظاہر کرتے ہیں جن میں دو خلیوں کو باہم جڑا ہوا دیکھا گیا، نہ کہ براہِ راست سائنَپس کی تعداد۔

پروجیکٹ میں جینوم سے اخذ کردہ نقشے بھی شامل ہیں۔ ریفرنس جینوم NCBI RefSeq GCF_000002985.6 ہے، جسے WBcel235 بھی کہا جاتا ہے، اور جین کی تشریح WormBase WS298 سے حاصل کی گئی ہے۔ شامل پیمائشیں چھ کروموسومز میں 100,272,607 بیسز پر محیط ہیں، جن میں GC مواد 35.4 فیصد اور پروٹین بنانے والے جینز کی تعداد 19,971 ہے۔

WERM ایک ایسے گیٹ کے ساتھ ریٹ نیٹ ورک استعمال کرتا ہے جو liquid time constant نیٹ ورکس سے متاثر ہے۔ GABA بنانے اور خارج کرنے والے معلوم 28 نیورونز کو inhibitory سمجھا جاتا ہے؛ باقی نیورونز کو excitatory سمجھا جاتا ہے۔

ماڈلنگ کے فیصلوں کو سمجھیں

کنیکٹوم ہر سائنَپس کی سمت متعین نہیں کرتا۔ اس لیے WERM GABA پر مبنی اصول کو ایک سادہ مفروضے کے طور پر استعمال کرتا ہے۔ ماڈل کے پیرامیٹرز کو scripts/sweep.mjs نے 1,470 ترتیبات میں سے ایسے اصول کے ذریعے منتخب کیا جو نتائج دیکھنے سے پہلے طے کر دیا گیا تھا۔ اس بنا پر WERM ایک tuned model ہے، عصبی ریکارڈنگز پر فٹ کیا گیا ماڈل نہیں۔

اسٹیئرنگ میپنگ بھی ایک واضح ڈیزائن فیصلہ ہے۔ کیڑے کی حالت sampling parameters اور لہجے کو ایسے کوڈ کے ذریعے کنٹرول کرتی ہے جسے آپ دیکھ اور تبدیل کر سکتے ہیں۔ نیورو سائنس کا ڈیٹا ان لینگویج ماڈل ترتیبات کا تعین نہیں کرتا۔

انسٹال کریں اور پہلا سیمولیشن چلائیں

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

git clone https://github.com/Henryfud/werm
cd werm

WERM کے لیے Node.js 20 یا اس کے بعد کا ورژن درکار ہے۔ ماڈل کے لیے رن ٹائم انحصارات نہیں ہیں، اس لیے آپ پیکیجز انسٹال کیے بغیر یونٹ ٹیسٹس چلا سکتے ہیں:

npm test

tail-touch محرک استعمال کرتے ہوئے تین سیکنڈ کا سیمولیشن چلائیں:

node src/cli.mjs sim --stim touch-tail --seconds 3

یہ کمانڈ منتخب حسی ان پٹ کے ساتھ نیٹ ورک چلاتی ہے۔ کمانڈ لائن انٹرفیس مقامی لینگویج ماڈل انضمام کے لیے connect کمانڈ اور WERM کی تیار کردہ ترتیبات دیکھنے کے لیے steer کمانڈ بھی سپورٹ کرتا ہے۔

WERM کو Ollama سے مربوط کریں

پہلے ollama.com/download سے Ollama انسٹال کرکے اسے شروع کریں۔ ضرورت پڑنے پر آپ ollama serve کے ذریعے سروس براہِ راست شروع کر سکتے ہیں۔ ایک مقامی ماڈل ڈاؤن لوڈ کریں، پھر WERM کو اس سے مربوط کریں:

ollama pull llama3.2
node src/cli.mjs connect --model llama3.2

llama3.2 کی جگہ Ollama میں انسٹال کسی بھی ماڈل کا نام لکھیں۔ اگر Ollama چل نہیں رہا یا ماڈل دستیاب نہیں ہے تو WERM مسئلہ بتاتا ہے اور مطلوبہ کمانڈ تجویز کرتا ہے۔ جب Ollama سروس http://localhost:11434 کے علاوہ کسی جگہ ہوسٹ ہو تو --host استعمال کریں۔

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

کسی دوسرے OpenAI-compatible مقامی سرور کا استعمال

WERM ایسے کسی بھی مقامی انجن سے مربوط ہو سکتا ہے جو OpenAI chat completions API فراہم کرتا ہو۔ سرور شروع کریں، پھر اس کا base URL اور ماڈل کا نام دیں:

node src/cli.mjs connect --base-url http://localhost:1234/v1 --model YOUR_MODEL

عام سرور کنفیگریشنز میں شامل ہیں:

  • LM Studio: اس کے Developer ٹیب سے مقامی سرور شروع کریں اور http://localhost:1234/v1 استعمال کریں۔
  • llama.cpp: llama-server -m your-model.gguf چلائیں اور http://localhost:8080/v1 استعمال کریں۔
  • vLLM: vllm serve your-model چلائیں اور http://localhost:8000/v1 استعمال کریں۔
  • Ollama کا OpenAI-style endpoint: http://localhost:11434/v1 استعمال کریں۔

ان سرورز کے لیے WERM temperature، top_p، اور max_tokens بھیجتا ہے۔ OpenAI-style API میں Ollama کلائنٹ کی جانب سے استعمال ہونے والا repeat penalty شامل نہیں، اس لیے یہ آپشن چھوڑ دیا جاتا ہے۔ اگر آپ کے سرور کو authentication درکار ہو تو WERM_API_KEY environment variable سیٹ کریں۔

ماڈل سے رابطہ کیے بغیر اسٹیئرنگ کا جائزہ لیں

یہ دیکھنے کے لیے کہ WERM کسی پیغام کی تشریح کیسے کرتا ہے، steer کمانڈ استعمال کریں:

node src/cli.mjs steer "why is my code broken?"

یہ کمانڈ اخذ کردہ محرکات، موجودہ موڈ، ماڈل سے متعلق اختیارات، اور ایک system prompt دکھاتی ہے۔ نتیجے میں nose-touch اور noxious جیسے محرکات، reversing موڈ، اور Ollama و OpenAI-compatible کلائنٹس کے لیے sampling values شامل ہو سکتی ہیں۔

یہ offline کمانڈ انضمام تیار کرتے وقت مفید ہے، کیونکہ اس کے ذریعے آپ ماڈل سرور شروع کیے بغیر اسٹیئرنگ کے رویے کا جائزہ لے سکتے ہیں۔

JavaScript سے WERM استعمال کریں

بنیادی نیٹ ورک اور اسٹیئرنگ مددگار ES ماڈیولز کے طور پر دستیاب ہیں۔ درج ذیل مثال کنیکٹوم لوڈ کرتی ہے، نیٹ ورک کو مستحکم ہونے دیتی ہے، کسی پیغام سے اخذ کردہ محرکات لاگو کرتی ہے، اور نتیجے میں حاصل ہونے والے اسٹیئرنگ پیرامیٹرز پڑھتی ہے:

import fs from "node:fs";
import { WormBrain } from "./src/network.mjs";
import { steer, stimuliFromText, applyStimuli, systemPrompt } from "./src/steer.mjs";

const worm = new WormBrain(
  JSON.parse(fs.readFileSync("data/connectome.json", "utf8"))
);

worm.run(1);
applyStimuli(worm, stimuliFromText("thanks, that helped"), true);
worm.run(1.5);

const { options, mode } = steer(worm.readout());
// Send options and systemPrompt(mode) to your local engine.

ابتدائی worm.run(1) کال نیٹ ورک کو مستحکم ہونے کا وقت دیتی ہے۔ متن کو محرکات میں تبدیل کرنے کے بعد، applyStimuli حسی حالت تبدیل کرتا ہے اور ایک اور رن نیٹ ورک کو ردعمل دینے کا وقت دیتا ہے۔ اس کے بعد readout کو steer میں بھیجا جاتا ہے، جو سیمپلنگ کے اختیارات اور ایک موڈ واپس کرتا ہے۔ متعلقہ لہجے کا پرامپٹ حاصل کرنے کے لیے systemPrompt(mode) استعمال کریں۔

تجربات دوبارہ چلائیں

ریپوزٹری میں پیرامیٹر سویپ، نَل-ماڈل موازنوں، اور ریزروائر طرز کے میموری بینچ مارک کے لیے اسکرپٹس شامل ہیں:

npm run sweep
npm run experiments

یہ کمانڈز نتائج docs/results/ میں لکھتی ہیں، دستیاب ہر CPU کور استعمال کرتی ہیں، اور چند منٹ لیتی ہیں۔

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

زبان کے ماڈل کے آؤٹ پٹ پر اسٹیئرنگ کے اثرات کی ابھی پیمائش نہیں کی گئی۔ جائزے کی اسکرپٹ دستیاب ہے، لیکن اس کا حقیقی ماڈل رن ابھی مکمل ہونا باقی ہے۔

اسٹیئرنگ کا جائزہ لیں

Ollama سے رابطہ کیے بغیر منصوبہ بند جائزہ دیکھنے کے لیے چلائیں:

node scripts/steer-eval.mjs --dry-run --limit 5

مقامی Ollama ماڈل استعمال کرتے ہوئے حقیقی جائزے کے لیے چلائیں:

node scripts/steer-eval.mjs --model llama3.2

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

جینوم اور کنیکٹوم ڈیٹا دوبارہ بنائیں

جینوم نقشے

حوالہ جینوم ڈاؤن لوڈ کرنے اور GC اور جین کثافت کے نقشے دوبارہ بنانے کے لیے چلائیں:

bash scripts/fetch_genome.sh
node scripts/genome_stats.mjs data/genome/c_elegans.fasta
node scripts/gc_windows.mjs data/genome/c_elegans.fasta
bash scripts/fetch_annotation.sh
node scripts/gene_windows.mjs data/genome/annotation.gff.gz

جینوم ڈاؤن لوڈ تقریباً 100 MB اور تشریحی ڈیٹا کا ڈاؤن لوڈ تقریباً 10 MB ہے۔ ڈاؤن لوڈ کی گئی فائلیں Git کے لیے نظرانداز شدہ ہیں۔ سائٹ GC نقشہ بنانے کے لیے FASTA فائل مقامی طور پر بھی پڑھ سکتی ہے؛ ڈیٹا اپ لوڈ نہیں کیا جاتا۔

کنیکٹوم فائل

data/connectome.json دوبارہ بنانے کے لیے Python ورچوئل ماحول بنائیں، مطلوبہ پیکیج آرکائیو انسٹال کریں، اسے کھولیں، اور بلڈ اسکرپٹ چلائیں:

python3 -m venv .venv
.venv/bin/pip install openpyxl
.venv/bin/pip download cect==0.3.5 --no-deps -d dl
unzip -q dl/cect-*.whl -d dl/x
.venv/bin/python scripts/build_connectome.py dl/x/cect/data

سائٹ بنائیں اور جانچیں

site/ میں موجود طویل اسکرول سائٹ میں جنریٹو پکسل ورم فیلڈ، لائیو کنیکٹوم گلوب، پیمانے کے مطابق بنایا گیا جینوم، اور وضاحتی نوٹس شامل ہیں۔ سائٹ کمانڈ لائن ماڈل ہی کا کوڈ استعمال کرتی ہے۔

صفحہ اس کمانڈ سے بنائیں:

npm run build:site

یہ site/index.html لکھتا ہے۔ صفحے پر موجود لنکس کو حسب ضرورت بنانے کے لیے GITHUB_URL یا SITE_URL مقرر کریں۔ Netlify بھی یہی بلڈ عمل استعمال کرتا ہے۔

ریپوزٹری کی جانچیں چلائیں:

npm test
npm run check
npm ci && npx playwright install chromium && npm run test:site

ٹیسٹ سوٹ میں 36 یونٹ ٹیسٹ شامل ہیں۔ اضافی جانچیں پروجیکٹ کے ضوابط کی توثیق کرتی ہیں اور ہیڈ لیس براؤزر اسموک ٹیسٹ چلاتی ہیں۔ مسلسل انضمام Node.js 20 اور 22 پر جانچیں چلاتا ہے۔

پروجیکٹ کی ساخت دیکھیں

  • data/connectome.json میں نیورونز اور کنکشنز شامل ہیں۔
  • src/network.mjs نیورون ماڈل نافذ کرتی ہے۔
  • src/reflex.mjs میں ریفلیکس جانچیں اور اختصاصی موازنے شامل ہیں۔
  • src/graphs.mjs شفل شدہ اور بے ترتیب وائرنگ کی مختلف شکلیں بناتی ہے۔
  • src/steer.mjs ورم کی حالت کو ماڈل کی ترتیبات اور لہجے میں تبدیل کرتی ہے۔
  • src/ollama.mjs اور src/openai.mjs مقامی ماڈل کلائنٹس نافذ کرتی ہیں۔
  • src/cli.mjs sim، connect، اور steer کمانڈز فراہم کرتی ہے۔
  • scripts/ میں ڈیٹا، تجربات، توثیق، اور سائٹ بلڈ کی اسکرپٹس شامل ہیں۔
  • docs/RESULTS.md ناپے گئے نتائج درج کرتی ہے، جبکہ docs/ARCHITECTURE.md ماڈل اور ریڈ آؤٹ کی وضاحت کرتی ہے۔

اہم حدود

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

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

نتیجہ

WERM ایک بڑے سمیولیشن اسٹیک کی ضرورت کے بغیر حقیقی C. elegans وائرنگ ڈایاگرام کے ساتھ تجربہ کرنے کا عملی طریقہ فراہم کرتا ہے۔ Node.js CLI سے آغاز کریں، لمس کی محرکات آزمائیں، تیار کردہ اسٹیئرنگ پیرامیٹرز کا جائزہ لیں، اور پھر نیٹ ورک کو Ollama یا کسی دوسرے مقامی OpenAI سے مطابقت رکھنے والے سرور سے مربوط کریں۔ اس کے بعد شامل اسکرپٹس آپ کو تجربات دوبارہ چلانے، حیاتیاتی ڈیٹا پروڈکٹس دوبارہ بنانے، اور اسٹیئرنگ لیئر کو اپنے مقامی AI ورک فلو کے مطابق ڈھالنے دیتی ہیں۔