প্রকল্প সম্পর্কে
# 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-এ লোড থাকে)
## লাইসেন্স
ওপেন-সোর্স সফটওয়্যার। বিস্তারিত জানতে রিপোজিটরি দেখুন।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.