প্রকল্প সম্পর্কে

# QMD - Query Markup Documents QMD একটি অন-ডিভাইস সার্চ ইঞ্জিন যা ব্যক্তিগত নলেজ বেস, ডকুমেন্টেশন, মিটিং নোট এবং যেকোনো মার্কডাউন-ভিত্তিক কন্টেন্টের জন্য ডিজাইন করা। এটি সম্পূর্ণরূপে লোকালি চলে, BM25 ফুল-টেক্সট সার্চ, ভেক্টর সেমান্টিক সার্চ এবং LLM-ভিত্তিক রির্যাংকিং একত্রিত করে উচ্চমানের ফলাফল প্রদানের জন্য — বাহ্যিক সার্ভিসে ডেটা পাঠানো ছাড়াই। ## মূল বৈশিষ্ট্য - **হাইব্রিড সার্চ পাইপলাইন**: BM25 (FTS5), ভেক্টর সিমিলারিটি সার্চ এবং LLM রির্যাংকিং একত্রিত করে। কোয়েরি এক্সপানশন টাইপযুক্ত সাব-কোয়েরি তৈরি করে (`lex` কীওয়ার্ডের জন্য, `vec` ডেন্স ভেক্টরের জন্য, `hyde` হাইপোথেটিক্যাল ডকুমেন্ট এমবেডিংয়ের জন্য) যা উপযুক্ত ব্যাকএন্ডে রাউট করা হয়, Reciprocal Rank Fusion (RRF) দিয়ে ফিউজ করা হয় এবং LLM দ্বারা রির্যাংক করা হয়। - **কন্টেক্সট ট্রি**: কালেকশনে হায়ারার্কিক্যাল কন্টেক্সট যোগ করার সুবিধা (যেমন, `qmd://notes` → "ব্যক্তিগত নোট এবং আইডিয়া") যা ম্যাচিং ডকুমেন্টের সাথে ফেরত দেওয়া হয়, LLM-কে আরও ভালো কন্টেক্সচুয়াল সিদ্ধান্ত নিতে সাহায্য করে। - **লোকাল মডেল**: HuggingFace থেকে ডাউনলোড করা GGUF মডেল ব্যবহার করে এবং লোকালি ক্যাশ করে। ডিফল্ট এমবেডিং মডেল হলো `embeddinggemma-300M-Q8_0` (~300MB)। কাস্টম মডেল `QMD_EMBED_MODEL` এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে সেট করা যায় (যেমন, মাল্টিলিঙ্গুয়াল কর্পোরার জন্য)। - **AST-অ্যাওয়্যার চাঙ্কিং**: কোড ফাইলের জন্য ঐচ্ছিক tree-sitter-ভিত্তিক চাঙ্কিং (TypeScript, JavaScript, Python, Go, Rust) উচ্চমানের চাঙ্ক তৈরি করে; অন্যান্য ফাইল টাইপে রেজেক্স-ভিত্তিক চাঙ্কিং ব্যবহার হয়। - **MCP সার্ভার**: কোয়েরি, ডকুমেন্ট রিট্রিভাল, ব্যাচ রিট্রিভাল এবং স্ট্যাটাস চেকের টুলসহ একটি Model Context Protocol সার্ভার এক্সপোজ করে। stdio এবং HTTP ট্রান্সপোর্ট সমর্থন করে সিকিউরিটি ফিচারসহ (DNS রিবাইন্ডিং আক্রমণ প্রতিরোধে origin/host ভ্যালিডেশন)। - **SDK**: TypeScript/JavaScript SDK এর মাধ্যমে প্রোগ্রাম্যাটিক অ্যাক্সেস — সার্চ, ডকুমেন্ট রিট্রিভাল, কন্টেক্সট ম্যানেজমেন্ট এবং কোয়েরি এক্সপানশনের মেথড সহ। ## দ্রুত শুরু # Install globally (Node or Bun) npm install -g @tobilu/qmd # or bun install -g @tobilu/qmd # Create collections qmd collection add ~/notes --name notes qmd collection add ~/Documents/meetings --name meetings # Add context qmd context add qmd://notes "Personal notes and ideas" # Generate embeddings qmd embed # Search qmd search "project timeline" # Fast keyword search qmd vsearch "how to deploy" # Semantic search qmd query "quarterly planning process" # Hybrid + reranking (best quality) ## CLI কমান্ড - `qmd collection add <path> --name <name> [--mask <glob>]` — একটি কালেকশন যোগ করুন - `qmd collection show <name>` — কালেকশনের বিবরণ দেখুন - `qmd collection include/exclude <name>` — কালেকশন অন্তর্ভুক্তি টগল করুন - `qmd collection update-cmd <name> '<command>'` — আপডেট কমান্ড সেট করুন - `qmd embed [--chunk-strategy auto]` — ভেক্টর এমবেডিং তৈরি করুন - `qmd search <query> [-c <collection>] [--json] [--files] [--min-score <n>]` — কীওয়ার্ড সার্চ - `qmd vsearch <query>` — সেমান্টিক সার্চ - `qmd query <query>` — রির্যাংকিংসহ হাইব্রিড সার্চ - `qmd get <path|docid>` — একটি ডকুমেন্ট রিট্রিভ করুন - `qmd multi-get <glob>` — একাধিক ডকুমেন্ট রিট্রিভ করুন - `qmd mcp [--http] [--port <n>] [--host <addr>] [--daemon]` — MCP সার্ভার শুরু করুন - `qmd status` — ইনডেক্স হেলথ এবং MCP স্ট্যাটাস দেখুন ## MCP সার্ভার এক্সপোজড টুল: - `query` — টাইপযুক্ত সাব-কোয়েরি, RRF ফিউশন এবং ঐচ্ছিক রির্যাংকিংসহ সার্চ - `get` — পাথ, ডকআইডি বা লাইন রেঞ্জ দিয়ে ডকুমেন্ট রিট্রিভ করুন - `multi_get` — গ্লব, কমা-বিভক্ত তালিকা বা ডকআইডি দিয়ে ব্যাচ রিট্রিভ - `status` — ইনডেক্স হেলথ এবং কালেকশন তথ্য HTTP ট্রান্সপোর্ট (ডিফল্ট পোর্ট 8181): - `POST /mcp` — MCP Streamable HTTP - `POST /query` (alias `/search`) — MCP প্রোটোকল ছাড়া স্ট্রাকচার্ড সার্চ - `GET /health` — লিভনেস চেক সিকিউরিটি: নন-লুপব্যাক `Origin` হেডারযুক্ত রিকোয়েস্ট প্রত্যাখ্যান করা হয় (403)। `Host` ভ্যালিডেশন DNS রিবাইন্ডিং প্রতিরোধ করে। এনভায়রনমেন্ট ভেরিয়েবল `QMD_ALLOWED_ORIGINS` এবং `QMD_ALLOWED_HOSTS` অনুমোদিত অরিজিন/হোস্ট বাড়ানোর জন্য ব্যবহার করা যায়। ## SDK ব্যবহার const { QmdStore } = require('@tobilu/qmd') const store = new QmdStore({ dbPath: './qmd.db', collections: { notes: { path: '/path/to/notes' } } }) // Simple search (auto-expanded) const results = await store.search({ query: 'authentication flow' }) // Structured query with typed sub-queries const results2 = await store.search({ queries: [ { type: 'vec', query: 'why do database connections time out under load' }, { type: 'lex', query: 'connection timeout' } ], collections: ['docs', 'notes'] }) // Disable reranking for speed const fast = await store.search({ query: 'auth', rerank: false }) // Metadata filtering const published = await store.search({ query: 'typescript', filter: { key: 'topics', operator: 'all', value: ['typescript'] } }) // Direct backend access const bm25Results = await store.bm25Search('auth') const vectorResults = await store.vectorSearch('auth') // Query expansion const expanded = await store.expandQuery('auth flow', { intent: 'user login' }) // Document retrieval const doc = await store.get('docs/readme.md') const body = await store.getDocumentBody('docs/readme.md', { maxLines: 100 }) // Context management await store.addContext('docs', '/api', 'REST API reference documentation') await store.removeContext('docs', '/api') ## সার্চ পাইপলাইনের বিবরণ 1. **কোয়েরি এক্সপানশন**: মূল কোয়েরি (ওয়েটেড ×2) + 1টি LLM ভ্যারিয়েশন 2. **সমান্তরাল রিট্রিভাল**: প্রতিটি কোয়েরি FTS এবং ভেক্টর ইনডেক্স উভয়েই সার্চ করে 3. **টপ-র্যাংক বোনাস**: যেকোনো তালিকায় #1 র্যাংক পাওয়া ডকুমেন্ট +0.05 পায়, #2-3 পায় +0.02 4. **টপ-কে সিলেকশন**: রির্যাংকিংয়ের জন্য শীর্ষ 30টি ক্যান্ডিডেট নিন 5. **রির্যাংকিং**: LLM প্রতিটি ডকুমেন্ট স্কোর করে (হ্যাঁ/না লগপ্রোবস কনফিডেন্স সহ) স্কোর রেঞ্জ: 0.0–0.2 নিম্ন প্রাসঙ্গিকতা, উচ্চ মান ভালো ম্যাচ নির্দেশ করে। ## মডেল কনফিগারেশন ডিফল্ট মডেল: - এমবেডিং: `embeddinggemma-300M-Q8_0` (~300MB) - রির্যাংকিং: LLM-ভিত্তিক (প্রয়োজনে ডাউনলোড হয়) কাস্টম এমবেডিং মডেলের উদাহরণ: export QMD_EMBED_MODEL="hf:Qwen/Qwen3-Embedding-0.6B-GGUF/Qwen3-Embedding-0.6B-Q8_0.gguf" নোট: এমবেডিং মডেল পরিবর্তন করলে সব কালেকশন পুনরায় এমবেড করতে হবে কারণ ভেক্টরগুলো ক্রস-কম্প্যাটিবল নয়। ## প্রয়োজনীয়তা - Node.js বা Bun রানটাইম - মডেল এবং এমবেডিংয়ের জন্য পর্যাপ্ত লোকাল স্টোরেজ - ঐচ্ছিক: দ্রুত LLM ইনফারেন্সের জন্য GPU/VRAM (মডেলগুলো রিকোয়েস্ট জুড়ে VRAM-এ লোড থাকে) ## লাইসেন্স ওপেন-সোর্স সফটওয়্যার। বিস্তারিত জানতে রিপোজিটরি দেখুন।