

WERM কী করে
WERM, যার পূর্ণরূপ Wiring-Encoded Recurrent Modulator, হলো প্রাপ্তবয়স্ক হার্মাফ্রোডাইট Caenorhabditis elegans-এর প্রকৃত স্নায়ু-সংযোগের নকশার ওপর ভিত্তি করে তৈরি একটি ছোট নিউরাল সিমুলেশন। এর 302-নিউরনের রেট নেটওয়ার্ক ব্রাউজারে, Node.js-এ, অথবা আপনার কম্পিউটারে স্থানীয়ভাবে চলমান কোনো ভাষা মডেলের পাশাপাশি চালানো যায়।
মডেলটি সিমুলেটেড সংবেদনশীল উদ্দীপনা প্রক্রিয়া করতে কানেক্টোম ব্যবহার করে। একটি স্টিয়ারিং স্তর ফলাফল হিসেবে পাওয়া কৃমির অবস্থা পড়ে সেটিকে তাপমাত্রা, 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টি বেস, 35.4 শতাংশ GC কনটেন্ট এবং 19,971টি প্রোটিন-কোডিং জিনকে অন্তর্ভুক্ত করে।
WERM তরল সময়-ধ্রুবক নেটওয়ার্ক দ্বারা অনুপ্রাণিত একটি গেটসহ রেট নেটওয়ার্ক ব্যবহার করে। GABA তৈরি ও নিঃসরণ করে বলে জানা 28টি নিউরনকে ইনহিবিটরি হিসেবে বিবেচনা করা হয়; বাকি নিউরনগুলোকে এক্সাইটেটরি হিসেবে বিবেচনা করা হয়।
মডেলিংয়ের সিদ্ধান্তগুলো বুঝুন
কানেক্টোম প্রতিটি সিন্যাপ্সের সংকেত নির্দিষ্ট করে না। তাই WERM সরলীকৃত অনুমান হিসেবে GABA-ভিত্তিক নিয়ম ব্যবহার করে। ফলাফল পরীক্ষা করার আগে নির্ধারিত একটি নিয়ম ব্যবহার করে scripts/sweep.mjs 1,470টি সেটিংস থেকে মডেল প্যারামিটার নির্বাচন করেছে। ফলে WERM একটি টিউন করা মডেল, নিউরাল রেকর্ডিংয়ের সঙ্গে ফিট করা মডেল নয়।
স্টিয়ারিং ম্যাপিংও একটি স্পষ্ট নকশাগত সিদ্ধান্ত। আপনি যে কোড পরীক্ষা করে পরিবর্তন করতে পারেন, তার মাধ্যমে কৃমির অবস্থা স্যাম্পলিং প্যারামিটার ও টোন নিয়ন্ত্রণ করে। নিউরোসায়েন্সের ডেটা এই ভাষা-মডেল সেটিংস নির্ধারণ করে না।
ইনস্টল করুন এবং প্রথম সিমুলেশন চালান
রিপোজিটরি ক্লোন করে এর ডিরেক্টরিতে প্রবেশ করুন:
git clone https://github.com/Henryfud/werm
cd wermWERM-এর জন্য Node.js 20 বা তার পরের সংস্করণ প্রয়োজন। মডেলটির রানটাইম নির্ভরতা নেই, তাই প্যাকেজ ইনস্টল না করেও ইউনিট টেস্ট চালাতে পারবেন:
npm testটেইল-টাচ উদ্দীপনা ব্যবহার করে তিন সেকেন্ডের সিমুলেশন চালান:
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.2llama3.2-এর পরিবর্তে Ollama-তে ইনস্টল করা যেকোনো মডেলের নাম দিন। Ollama চালু না থাকলে বা মডেলটি উপলভ্য না হলে WERM সমস্যাটি জানায় এবং কী চালাতে হবে তার পরামর্শ দেয়। Ollama সেবা http://localhost:11434 ছাড়া অন্য কোথাও হোস্ট করা হলে --host ব্যবহার করুন।
কথোপকথনের সময় WERM প্রথমে বার্তাটিকে সংবেদনশীল উদ্দীপনায় রূপান্তর করে, অল্প সময়ের জন্য কৃমিটি চালায়, তারপর প্রাপ্ত অবস্থা ব্যবহার করে মডেল অনুরোধের কনফিগারেশন নির্ধারণ করে। WERM এবং মডেল সার্ভার দুটিই স্থানীয় হলে বার্তাগুলো আপনার কম্পিউটারেই থাকে।
অন্য কোনো OpenAI-সামঞ্জস্যপূর্ণ স্থানীয় সার্ভার ব্যবহার করুন
OpenAI chat completions API পরিবেশন করে এমন যেকোনো স্থানীয় ইঞ্জিনের সঙ্গে WERM সংযুক্ত হতে পারে। সার্ভার চালু করে তার বেস 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-স্টাইল এন্ডপয়েন্ট:
http://localhost:11434/v1ব্যবহার করুন।
এই সার্ভারগুলোর জন্য WERM temperature, top_p এবং max_tokens পাঠায়। OpenAI-স্টাইল API-তে Ollama ক্লায়েন্টে ব্যবহৃত রিপিট পেনাল্টি নেই, তাই সেই অপশনটি বাদ দেওয়া হয়। আপনার সার্ভারে প্রমাণীকরণ প্রয়োজন হলে WERM_API_KEY এনভায়রনমেন্ট ভেরিয়েবল সেট করুন।
কোনো মডেলের সঙ্গে যোগাযোগ না করে স্টিয়ারিং পরীক্ষা করুন
WERM কীভাবে একটি বার্তা ব্যাখ্যা করে তা দেখতে steer কমান্ড ব্যবহার করুন:
node src/cli.mjs steer "why is my code broken?"কমান্ডটি অনুমান করা উদ্দীপনা, বর্তমান মোড, মডেল-নির্দিষ্ট অপশন এবং একটি সিস্টেম প্রম্পট প্রিন্ট করে। ফলাফলে nose-touch ও noxious-এর মতো উদ্দীপনা, একটি reversing মোড এবং Ollama ও OpenAI-সামঞ্জস্যপূর্ণ ক্লায়েন্টের জন্য স্যাম্পলিং মান থাকতে পারে।
ইন্টিগ্রেশন তৈরি করার সময় এই অফলাইন কমান্ডটি কাজে লাগে, কারণ মডেল সার্ভার চালু না করেই স্টিয়ারিংয়ের আচরণ পরীক্ষা করা যায়।
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());
// options এবং systemPrompt(mode) আপনার স্থানীয় ইঞ্জিনে পাঠান।প্রাথমিক 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-তৈরি সেটিংস এবং এলোমেলো সেটিংসের তুলনা করে। মডেল-নির্ভর পরীক্ষা শুরু করার আগে পরিকল্পিত প্যারামিটার যাচাই করতে dry-run অপশনটি কার্যকর।
জিনোম ও কানেক্টোম ডেটা পুনর্নির্মাণ
জিনোম ম্যাপ
রেফারেন্স জিনোম ডাউনলোড করে 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.mjssim,connectএবংsteerকমান্ড সরবরাহ করে।scripts/-এ ডেটা, পরীক্ষা, যাচাই এবং সাইট-বিল্ড স্ক্রিপ্ট রয়েছে।docs/RESULTS.md-এ পরিমাপ করা ফলাফল নথিভুক্ত আছে, আরdocs/ARCHITECTURE.md-এ মডেল ও রিডআউট ব্যাখ্যা করা হয়েছে।
গুরুত্বপূর্ণ সীমাবদ্ধতা
WERM ইচ্ছাকৃতভাবে ছোট এবং এটি সম্পূর্ণ জৈবিক সিমুলেশন নয়। এতে পেশি, দেহের পদার্থবিদ্যা, নিউরোপেপটাইড বা শেখার ব্যবস্থা নেই এবং প্রকৃত ওয়ার্মের রেকর্ডিংয়ের সঙ্গে এর তুলনা করা হয়নি। এর আচরণকে প্রকৃত ওয়ার্ম কী করবে তার পূর্বাভাস হিসেবে ব্যাখ্যা করা উচিত নয়।
স্টিয়ারিং স্তরটি একটি ভাষা মডেলকে নতুন সক্ষমতাও দেয় না, এবং মডেলের প্রতিক্রিয়ার ওপর এর প্রভাব এখনও পরিমাপ করা হয়নি। আরও বিশ্বস্ত জৈবপদার্থবিদ্যাগত সিমুলেশনের জন্য README-তে OpenWorm-এর c302 ব্যবহারের পরামর্শ দেওয়া হয়েছে। WERM এমনভাবে তৈরি করা হয়েছে যাতে এক বিকেলেই এটি পরিদর্শন ও পরিবর্তন করা যায়।
উপসংহার
বড় কোনো সিমুলেশন স্ট্যাকের প্রয়োজন ছাড়াই একটি বাস্তব C. elegans সংযোগ-চিত্র নিয়ে পরীক্ষা করার ব্যবহারিক উপায় WERM প্রদান করে। Node.js CLI দিয়ে শুরু করুন, স্পর্শ-উদ্দীপনা পরীক্ষা করুন, তৈরি হওয়া স্টিয়ারিং প্যারামিটারগুলো পরিদর্শন করুন, তারপর নেটওয়ার্কটিকে Ollama বা অন্য কোনো স্থানীয় OpenAI-সামঞ্জস্যপূর্ণ সার্ভারের সঙ্গে সংযুক্ত করুন। এরপর অন্তর্ভুক্ত স্ক্রিপ্টগুলো ব্যবহার করে আপনি পরীক্ষাগুলো পুনরুৎপাদন করতে, জৈবিক ডেটা পণ্যগুলো পুনর্নির্মাণ করতে এবং স্টিয়ারিং স্তরটিকে নিজের স্থানীয় AI কর্মপ্রবাহের উপযোগী করে নিতে পারবেন।
