इस प्रोजेक्ट के बारे में

# QMD - क्वेरी मार्कडाउन दस्तावेज़ QMD एक ऑन-डिवाइस सर्च इंजन है जो व्यक्तिगत ज्ञान आधार, दस्तावेज़ीकरण, मीटिंग नोट्स, और किसी भी मार्कडाउन-आधारित सामग्री के लिए डिज़ाइन किया गया है। यह पूरी तरह से स्थानीय रूप से चलता है, BM25 पूर्ण-पाठ खोज, वेक्टर सिमेंटिक खोज, और LLM-आधारित रीरैंकिंग को जोड़कर बाहरी सेवाओं को डेटा भेजे बिना उच्च-गुणवत्ता वाले परिणाम प्रदान करता है। ## मुख्य विशेषताएं - **हाइब्रिड सर्च पाइपलाइन**: BM25 (FTS5), वेक्टर समानता खोज, और LLM रीरैंकिंग को जोड़ता है। क्वेरी विस्तार टाइप किए गए उप-क्वेरी उत्पन्न करता है (`lex` कीवर्ड के लिए, `vec` घने वैक्टर के लिए, `hyde` काल्पनिक दस्तावेज़ एम्बेडिंग के लिए) जो उपयुक्त बैकएंड पर रूट होते हैं, रेसिप्रोकल रैंक फ्यूजन (RRF) के माध्यम से जुड़े होते हैं, और LLM द्वारा पुनः रैंक किए जाते हैं। - **संदर्भ वृक्ष**: संग्रहों में पदानुक्रमित संदर्भ जोड़ें (जैसे, `qmd://notes` → "व्यक्तिगत नोट्स और विचार") जो मिलान दस्तावेज़ों के साथ लौटाया जाता है, जिससे LLM को बेहतर संदर्भ निर्णय लेने में मदद मिलती है। - **स्थानीय मॉडल**: HuggingFace से डाउनलोड किए गए GGUF मॉडल का उपयोग करता है और स्थानीय रूप से कैश किया जाता है। डिफ़ॉल्ट एम्बेडिंग मॉडल `embeddinggemma-300M-Q8_0` (~300MB) है। कस्टम मॉडल `QMD_EMBED_MODEL` पर्यावरण चर के माध्यम से सेट किए जा सकते हैं (उदाहरण के लिए, बहुभाषी कॉर्पोरा के लिए)। - **AST-जागरूक चंकिंग**: कोड फ़ाइलों (TypeScript, JavaScript, Python, Go, Rust) के लिए वैकल्पिक tree-sitter-आधारित चंकिंग उच्च-गुणवत्ता वाले चंक उत्पन्न करती है; अन्य फ़ाइल प्रकार regex-आधारित चंकिंग का उपयोग करते हैं। - **MCP सर्वर**: क्वेरी करने, दस्तावेज़ पुनर्प्राप्त करने, बैच पुनर्प्राप्ति, और स्थिति जांच के लिए टूल के साथ एक मॉडल संदर्भ प्रोटोकॉल सर्वर उजागर करता है। सुरक्षा सुविधाओं (DNS रिबाउंडिंग हमलों को रोकने के लिए मूल/होस्ट सत्यापन) के साथ stdio और HTTP ट्रांसपोर्ट का समर्थन करता है। - **SDK**: खोज, दस्तावेज़ पुनर्प्राप्ति, संदर्भ प्रबंधन, और क्वेरी विस्तार के लिए विधियों के साथ TypeScript/JavaScript SDK के माध्यम से प्रोग्रामेटिक पहुंच। ## त्वरित प्रारंभ ```sh # वैश्विक रूप से स्थापित करें (Node या Bun) npm install -g @tobilu/qmd # या bun install -g @tobilu/qmd # संग्रह बनाएं qmd collection add ~/notes --name notes qmd collection add ~/Documents/meetings --name meetings # संदर्भ जोड़ें qmd context add qmd://notes "व्यक्तिगत नोट्स और विचार" # एम्बेडिंग उत्पन्न करें qmd embed # खोजें qmd search "प्रोजेक्ट टाइमलाइन" # तेज़ कीवर्ड खोज qmd vsearch "कैसे तैनात करें" # सिमेंटिक खोज qmd query "त्रैमासिक योजना प्रक्रिया" # हाइब्रिड + रीरैंकिंग (सर्वोत्तम गुणवत्ता) ``` ## 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` — पथ, docid, या लाइन रेंज द्वारा दस्तावेज़ पुनर्प्राप्त करें - `multi_get` — ग्लोब, अल्पविराम-पृथक सूची, या docids द्वारा बैच पुनर्प्राप्त करें - `status` — इंडेक्स स्वास्थ्य और संग्रह जानकारी HTTP ट्रांसपोर्ट (डिफ़ॉल्ट पोर्ट 8181) प्रदान करता है: - `POST /mcp` — MCP स्ट्रीमेबल HTTP - `POST /query` (उर्फ `/search`) — MCP प्रोटोकॉल के बिना संरचित खोज - `GET /health` — लाइवनेस जांच सुरक्षा: गैर-लूपबैक `Origin` हेडर वाले अनुरोध अस्वीकार कर दिए जाते हैं (403)। `Host` सत्यापन DNS रिबाउंडिंग को रोकता है। पर्यावरण चर `QMD_ALLOWED_ORIGINS` और `QMD_ALLOWED_HOSTS` अनुमत मूल/होस्ट का विस्तार कर सकते हैं। ## SDK उपयोग ```js const { QmdStore } = require('@tobilu/qmd') const store = new QmdStore({ dbPath: './qmd.db', collections: { notes: { path: '/path/to/notes' } } }) // सरल खोज (स्वचालित रूप से विस्तारित) const results = await store.search({ query: 'authentication flow' }) // टाइप किए गए उप-क्वेरी के साथ संरचित क्वेरी 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'] }) // गति के लिए रीरैंकिंग अक्षम करें const fast = await store.search({ query: 'auth', rerank: false }) // मेटाडेटा फ़िल्टरिंग const published = await store.search({ query: 'typescript', filter: { key: 'topics', operator: 'all', value: ['typescript'] } }) // प्रत्यक्ष बैकएंड पहुंच const bm25Results = await store.bm25Search('auth') const vectorResults = await store.vectorSearch('auth') // क्वेरी विस्तार const expanded = await store.expandQuery('auth flow', { intent: 'user login' }) // दस्तावेज़ पुनर्प्राप्ति const doc = await store.get('docs/readme.md') const body = await store.getDocumentBody('docs/readme.md', { maxLines: 100 }) // संदर्भ प्रबंधन await store.addContext('docs', '/api', 'REST API संदर्भ दस्तावेज़ीकरण') await store.removeContext('docs', '/api') ``` ## खोज पाइपलाइन विवरण 1. **क्वेरी विस्तार**: मूल क्वेरी (भारित ×2) + 1 LLM भिन्नता 2. **समानांतर पुनर्प्राप्ति**: प्रत्येक क्वेरी FTS और वेक्टर इंडेक्स दोनों खोजती है 3. **शीर्ष-रैंक बोनस**: किसी भी सूची में #1 रैंक वाले दस्तावेज़ों को +0.05, #2-3 को +0.02 मिलता है 4. **शीर्ष-के चयन**: रीरैंकिंग के लिए शीर्ष 30 उम्मीदवार लें 5. **पुनः-रैंकिंग**: LLM प्रत्येक दस्तावेज़ को स्कोर करता है (हां/नहीं logprobs आत्मविश्वास के साथ) स्कोर सीमा: 0.0–0.2 कम प्रासंगिकता, उच्च मान बेहतर मिलान दर्शाते हैं। ## मॉडल कॉन्फ़िगरेशन डिफ़ॉल्ट मॉडल: - एम्बेडिंग: `embeddinggemma-300M-Q8_0` (~300MB) - रीरैंकिंग: LLM-आधारित (मांग पर डाउनलोड किया गया) कस्टम एम्बेडिंग मॉडल उदाहरण: ```sh 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 में लोड रहते हैं) ## लाइसेंस ओपन-सोर्स सॉफ़्टवेयर। विवरण के लिए रिपॉजिटरी देखें।