{"title":"Synapse आर्किटेक्चर","slug":"architecture","category":"concepts","summary":"Synapse कैसे बना है — Fastify, PostgreSQL, FTS5, embeddings, MCP server।","audience":["human","llm"],"tags":["architecture","design","components"],"difficulty":"intermediate","updated":"2026-06-27","word_count":495,"read_minutes":2,"lang":"hi","translated":true,"requested_lang":"hi","content_markdown":"\n# Synapse आर्किटेक्चर\n\nSynapse एक मल्टी-टैनेंट मेमोरी API है जो Fastify, FTS5 के साथ PostgreSQL, और सिमेंटिक खोज के लिए एक वैकल्पिक embeddings सेवा पर बना है।\n\n## उच्च-स्तरीय आर्किटेक्चर\n\n```\n┌──────────────────────────────────────────────────────────┐\n│                       Clients                            │\n├──────────────┬──────────────┬──────────────┬─────────────┤\n│  LLM Agents  │  Web Browsers│  MCP Clients │  Webhooks   │\n│  (curl/SDK)  │  (humans)    │ (Claude/etc) │  (external) │\n└──────┬───────┴──────┬───────┴──────┬───────┴──────┬──────┘\n       │              │              │              │\n       └──────────────┴──────────────┴──────────────┘\n                              │\n                              ▼\n              ┌───────────────────────────────┐\n              │    Synapse API (Fastify)      │\n              │    port 12800                 │\n              │    - REST endpoints           │\n              │    - Auth (Mind Key / JWT)    │\n              │    - Rate limiting            │\n              │    - Static file serving      │\n              └───────────────┬───────────────┘\n                              │\n              ┌───────────────┼───────────────┐\n              ▼               ▼               ▼\n       ┌─────────────┐ ┌─────────────┐ ┌─────────────┐\n       │ PostgreSQL  │ │ Embeddings  │ │ MCP Server  │\n       │ + FTS5      │ │ Service     │ │ (separate)  │\n       │             │ │ (optional)  │ │ port 13100  │\n       │ - memories  │ │             │ │             │\n       │ - tasks     │ │ - generate  │ │ - 79 tools  │\n       │ - chat      │ │   embeddings│ │ - stdio/SSE │\n       │ - scripts   │ │             │ │ - WebSocket │\n       └─────────────┘ └─────────────┘ └─────────────┘\n```\n\n## मुख्य घटक\n\n### 1. Synapse API (Fastify)\n\nमुख्य HTTP server। संभालता है:\n\n- REST एंडपॉइंट्स (`/memory`, `/chat`, `/mind/tasks`, आदि)\n- प्रमाणीकरण (एजेंट्स के लिए Mind Key, मानवों के लिए JWT)\n- रेट लिमिटिंग (केवल `?key=` प्रमाणीकरण)\n- स्टेटिक फ़ाइल सर्विंग (`/human`, `/docs`, आदि पर वेब UI)\n- Webhook डिस्पैच\n\nप्रदर्शन के लिए **Fastify 5** के साथ बना। उत्पादन में पोर्ट 12800 पर चलता है।\n\n### 2. FTS5 के साथ PostgreSQL\n\nप्राथमिक डेटा स्टोर। फुल-टेक्स्ट खोज के लिए FTS5 एक्सटेंशन के साथ PostgreSQL का उपयोग करता है।\n\n**मुख्य तालिकाएँ:**\n\n| तालिका | उद्देश्य |\n|-------|---------|\n| `users` | उपयोगकर्ता खाते |\n| `minds` | Mind दायरे (प्रत्येक के पास Mind Key है) |\n| `memories` | FTS5 वर्चुअल तालिका के साथ मेमोरी रिकॉर्ड्स |\n| `tasks` | कार्य प्रबंधन |\n| `chat_messages` | चैट इतिहास |\n| `scripts` | स्थायी स्क्रिप्ट्स |\n| `webhooks` | Webhook पंजीकरण |\n| `cron_jobs` | शेड्यूल किए गए कार्य |\n| `variables` | Key-value स्टोर |\n| `audit_log` | ऑडिट ट्रेल |\n\n**FTS5** सभी मेमोरी सामग्री में सब-मिलीसेकंड फुल-टेक्स्ट खोज सक्षम बनाता है। विवरण के लिए [FTS5 Search](/docs/concepts/fts5-search) देखें।\n\n### 3. Embeddings सेवा (वैकल्पिक)\n\nसिमेंटिक खोज के लिए, Synapse मेमोरी सामग्री के वेक्टर embeddings जनरेट करता है। ये मेमोरीज़ के साथ संग्रहीत होते हैं और समानता खोज के लिए उपयोग किए जाते हैं।\n\n- प्रदाता: कॉन्फ़िगर करने योग्य (OpenAI, लोकल मॉडल, आदि)\n- `memories` तालिका में `vector` कॉलम के रूप में संग्रहीत\n- `/memory/semantic-search` एंडपॉइंट द्वारा उपयोग\n- [सिमेंटिक खोज](/docs/concepts/semantic-search) देखें\n\n### 4. MCP Server (अलग सेवा)\n\nSynapse MCP server एक अलग प्रक्रिया के रूप में चलता है (पोर्ट 13100)। यह:\n\n- Model Context Protocol के माध्यम से 79 टूल्स एक्सपोज़ करता है\n- stdio, HTTP/SSE, और WebSocket ट्रांसपोर्ट का समर्थन करता है\n- MCP टूल कॉल्स को Synapse API कॉल्स में अनुवादित करता है\n- मल्टी-टैनेंट: प्रति सत्र एक Mind Key\n\n### 5. Browser Proxy (अलग सेवा)\n\nब्राउज़र ऑटोमेशन के लिए, एक अलग Playwright-आधारित सेवा पोर्ट 13000 पर चलती है। MCP server `browser_*` टूल्स के लिए इसे कॉल कर सकता है।\n\n### 6. SSH Proxy (अलग सेवा)\n\nSSH-आधारित रिमोट कमांड्स के लिए, एक अलग सेवा पोर्ट 12900 पर चलती है।\n\n## मल्टी-टैनेंसी मॉडल\n\n```\nUser Account (email + password)\n  │\n  ├── Mind 1 (Mind Key 1)\n  │   ├── Memories\n  │   ├── Tasks\n  │   ├── Chat\n  │   └── Scripts\n  │\n  ├── Mind 2 (Mind Key 2)\n  │   └── ... (isolated from Mind 1)\n  │\n  └── Mind 3 (Mind Key 3)\n      └── ...\n```\n\nप्रत्येक mind पूरी तरह से अलग है। Mind Keys ठीक एक mind तक पहुँच प्रदान करते हैं।\nJWTs उपयोगकर्ता खाते तक पहुँच प्रदान करते हैं (minds प्रबंधित करने के लिए)।\n\nविवरण के लिए [मल्टी-टैनेंसी](/docs/concepts/multi-tenancy) देखें।\n\n## अनुरोध प्रवाह\n\n### मेमोरी स्टोर अनुरोध\n\n```\n1. Client sends POST /memory with Authorization: Bearer mk_xxx\n2. Fastify receives request\n3. Auth middleware validates Mind Key, attaches mind_id to request\n4. Memory route handler:\n   a. Validate JSON body (zod schema)\n   b. Insert into memories table\n   c. Update FTS5 index\n   d. (Async) Generate embedding if embeddings enabled\n   e. Trigger webhooks for memory.store event\n5. Return { id, status: \"stored\" }\n```\n\n### मेमोरी खोज अनुरोध\n\n```\n1. Client sends GET /memory/search?q=docker\n2. Auth middleware validates Mind Key\n3. Memory route handler:\n   a. Parse query (FTS5 syntax)\n   b. Execute FTS5 MATCH against memories table\n   c. Filter by mind_id (tenant isolation)\n   d. Rank by relevance\n   e. Return results\n```\n\n## परिनियोजन\n\nSynapse एक Docker कंटेनर के रूप में परिनियोजित होता है। `docker-compose.yml` देखें:\n\n```yaml\nservices:\n  synapse:\n    image: registry.gitlab.com/schaefer-services/synapse:latest\n    ports:\n      - \"12800:12800\"\n    environment:\n      - DATABASE_URL=postgres://...\n      - JWT_SECRET=...\n      - SYNAPSE_HOST=0.0.0.0\n      - SYNAPSE_PORT=12800\n    depends_on:\n      - postgres\n  \n  postgres:\n    image: postgres:16\n    volumes:\n      - pgdata:/var/lib/postgresql/data\n    environment:\n      - POSTGRES_DB=synapse\n      - POSTGRES_PASSWORD=...\n```\n\n## प्रदर्शन विशेषताएँ\n\n| ऑपरेशन | विलंबता | थ्रूपुट |\n|-----------|---------|------------|\n| मेमोरी स्टोर | ~5ms | 1000+ req/s |\n| मेमोरी रिकॉल | ~20ms | 500 req/s |\n| FTS5 खोज | ~10ms | 800 req/s |\n| सिमेंटिक खोज | ~50ms | 200 req/s |\n| चैट poll | ~5ms | 2000 req/s |\n\n## अगले कदम\n\n- [मेमोरी मॉडल](/docs/concepts/memory-model)\n- [मल्टी-टैनेंसी](/docs/concepts/multi-tenancy)\n- [FTS5 Search](/docs/concepts/fts5-search)\n","content_html":"<h1>Synapse आर्किटेक्चर</h1>\n<p>Synapse एक मल्टी-टैनेंट मेमोरी API है जो Fastify, FTS5 के साथ PostgreSQL, और सिमेंटिक खोज के लिए एक वैकल्पिक embeddings सेवा पर बना है।</p>\n<h2>उच्च-स्तरीय आर्किटेक्चर</h2>\n<pre><code class=\"hljs language-plaintext\">┌──────────────────────────────────────────────────────────┐\n│                       Clients                            │\n├──────────────┬──────────────┬──────────────┬─────────────┤\n│  LLM Agents  │  Web Browsers│  MCP Clients │  Webhooks   │\n│  (curl/SDK)  │  (humans)    │ (Claude/etc) │  (external) │\n└──────┬───────┴──────┬───────┴──────┬───────┴──────┬──────┘\n       │              │              │              │\n       └──────────────┴──────────────┴──────────────┘\n                              │\n                              ▼\n              ┌───────────────────────────────┐\n              │    Synapse API (Fastify)      │\n              │    port 12800                 │\n              │    - REST endpoints           │\n              │    - Auth (Mind Key / JWT)    │\n              │    - Rate limiting            │\n              │    - Static file serving      │\n              └───────────────┬───────────────┘\n                              │\n              ┌───────────────┼───────────────┐\n              ▼               ▼               ▼\n       ┌─────────────┐ ┌─────────────┐ ┌─────────────┐\n       │ PostgreSQL  │ │ Embeddings  │ │ MCP Server  │\n       │ + FTS5      │ │ Service     │ │ (separate)  │\n       │             │ │ (optional)  │ │ port 13100  │\n       │ - memories  │ │             │ │             │\n       │ - tasks     │ │ - generate  │ │ - 79 tools  │\n       │ - chat      │ │   embeddings│ │ - stdio/SSE │\n       │ - scripts   │ │             │ │ - WebSocket │\n       └─────────────┘ └─────────────┘ └─────────────┘</code></pre><h2>मुख्य घटक</h2>\n<h3>1. Synapse API (Fastify)</h3>\n<p>मुख्य HTTP server। संभालता है:</p>\n<ul>\n<li>REST एंडपॉइंट्स (<code>/memory</code>, <code>/chat</code>, <code>/mind/tasks</code>, आदि)</li>\n<li>प्रमाणीकरण (एजेंट्स के लिए Mind Key, मानवों के लिए JWT)</li>\n<li>रेट लिमिटिंग (केवल <code>?key=</code> प्रमाणीकरण)</li>\n<li>स्टेटिक फ़ाइल सर्विंग (<code>/human</code>, <code>/docs</code>, आदि पर वेब UI)</li>\n<li>Webhook डिस्पैच</li>\n</ul>\n<p>प्रदर्शन के लिए <strong>Fastify 5</strong> के साथ बना। उत्पादन में पोर्ट 12800 पर चलता है।</p>\n<h3>2. FTS5 के साथ PostgreSQL</h3>\n<p>प्राथमिक डेटा स्टोर। फुल-टेक्स्ट खोज के लिए FTS5 एक्सटेंशन के साथ PostgreSQL का उपयोग करता है।</p>\n<p><strong>मुख्य तालिकाएँ:</strong></p>\n<table>\n<thead>\n<tr>\n<th>तालिका</th>\n<th>उद्देश्य</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>users</code></td>\n<td>उपयोगकर्ता खाते</td>\n</tr>\n<tr>\n<td><code>minds</code></td>\n<td>Mind दायरे (प्रत्येक के पास Mind Key है)</td>\n</tr>\n<tr>\n<td><code>memories</code></td>\n<td>FTS5 वर्चुअल तालिका के साथ मेमोरी रिकॉर्ड्स</td>\n</tr>\n<tr>\n<td><code>tasks</code></td>\n<td>कार्य प्रबंधन</td>\n</tr>\n<tr>\n<td><code>chat_messages</code></td>\n<td>चैट इतिहास</td>\n</tr>\n<tr>\n<td><code>scripts</code></td>\n<td>स्थायी स्क्रिप्ट्स</td>\n</tr>\n<tr>\n<td><code>webhooks</code></td>\n<td>Webhook पंजीकरण</td>\n</tr>\n<tr>\n<td><code>cron_jobs</code></td>\n<td>शेड्यूल किए गए कार्य</td>\n</tr>\n<tr>\n<td><code>variables</code></td>\n<td>Key-value स्टोर</td>\n</tr>\n<tr>\n<td><code>audit_log</code></td>\n<td>ऑडिट ट्रेल</td>\n</tr>\n</tbody></table>\n<p><strong>FTS5</strong> सभी मेमोरी सामग्री में सब-मिलीसेकंड फुल-टेक्स्ट खोज सक्षम बनाता है। विवरण के लिए <a href=\"/docs/concepts/fts5-search\">FTS5 Search</a> देखें।</p>\n<h3>3. Embeddings सेवा (वैकल्पिक)</h3>\n<p>सिमेंटिक खोज के लिए, Synapse मेमोरी सामग्री के वेक्टर embeddings जनरेट करता है। ये मेमोरीज़ के साथ संग्रहीत होते हैं और समानता खोज के लिए उपयोग किए जाते हैं।</p>\n<ul>\n<li>प्रदाता: कॉन्फ़िगर करने योग्य (OpenAI, लोकल मॉडल, आदि)</li>\n<li><code>memories</code> तालिका में <code>vector</code> कॉलम के रूप में संग्रहीत</li>\n<li><code>/memory/semantic-search</code> एंडपॉइंट द्वारा उपयोग</li>\n<li><a href=\"/docs/concepts/semantic-search\">सिमेंटिक खोज</a> देखें</li>\n</ul>\n<h3>4. MCP Server (अलग सेवा)</h3>\n<p>Synapse MCP server एक अलग प्रक्रिया के रूप में चलता है (पोर्ट 13100)। यह:</p>\n<ul>\n<li>Model Context Protocol के माध्यम से 79 टूल्स एक्सपोज़ करता है</li>\n<li>stdio, HTTP/SSE, और WebSocket ट्रांसपोर्ट का समर्थन करता है</li>\n<li>MCP टूल कॉल्स को Synapse API कॉल्स में अनुवादित करता है</li>\n<li>मल्टी-टैनेंट: प्रति सत्र एक Mind Key</li>\n</ul>\n<h3>5. Browser Proxy (अलग सेवा)</h3>\n<p>ब्राउज़र ऑटोमेशन के लिए, एक अलग Playwright-आधारित सेवा पोर्ट 13000 पर चलती है। MCP server <code>browser_*</code> टूल्स के लिए इसे कॉल कर सकता है।</p>\n<h3>6. SSH Proxy (अलग सेवा)</h3>\n<p>SSH-आधारित रिमोट कमांड्स के लिए, एक अलग सेवा पोर्ट 12900 पर चलती है।</p>\n<h2>मल्टी-टैनेंसी मॉडल</h2>\n<pre><code class=\"hljs language-plaintext\">User Account (email + password)\n  │\n  ├── Mind 1 (Mind Key 1)\n  │   ├── Memories\n  │   ├── Tasks\n  │   ├── Chat\n  │   └── Scripts\n  │\n  ├── Mind 2 (Mind Key 2)\n  │   └── ... (isolated from Mind 1)\n  │\n  └── Mind 3 (Mind Key 3)\n      └── ...</code></pre><p>प्रत्येक mind पूरी तरह से अलग है। Mind Keys ठीक एक mind तक पहुँच प्रदान करते हैं।\nJWTs उपयोगकर्ता खाते तक पहुँच प्रदान करते हैं (minds प्रबंधित करने के लिए)।</p>\n<p>विवरण के लिए <a href=\"/docs/concepts/multi-tenancy\">मल्टी-टैनेंसी</a> देखें।</p>\n<h2>अनुरोध प्रवाह</h2>\n<h3>मेमोरी स्टोर अनुरोध</h3>\n<pre><code class=\"hljs language-plaintext\">1. Client sends POST /memory with Authorization: Bearer mk_xxx\n2. Fastify receives request\n3. Auth middleware validates Mind Key, attaches mind_id to request\n4. Memory route handler:\n   a. Validate JSON body (zod schema)\n   b. Insert into memories table\n   c. Update FTS5 index\n   d. (Async) Generate embedding if embeddings enabled\n   e. Trigger webhooks for memory.store event\n5. Return { id, status: &quot;stored&quot; }</code></pre><h3>मेमोरी खोज अनुरोध</h3>\n<pre><code class=\"hljs language-plaintext\">1. Client sends GET /memory/search?q=docker\n2. Auth middleware validates Mind Key\n3. Memory route handler:\n   a. Parse query (FTS5 syntax)\n   b. Execute FTS5 MATCH against memories table\n   c. Filter by mind_id (tenant isolation)\n   d. Rank by relevance\n   e. Return results</code></pre><h2>परिनियोजन</h2>\n<p>Synapse एक Docker कंटेनर के रूप में परिनियोजित होता है। <code>docker-compose.yml</code> देखें:</p>\n<pre><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">services:</span>\n  <span class=\"hljs-attr\">synapse:</span>\n    <span class=\"hljs-attr\">image:</span> <span class=\"hljs-string\">registry.gitlab.com/schaefer-services/synapse:latest</span>\n    <span class=\"hljs-attr\">ports:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">&quot;12800:12800&quot;</span>\n    <span class=\"hljs-attr\">environment:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">DATABASE_URL=postgres://...</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">JWT_SECRET=...</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">SYNAPSE_HOST=0.0.0.0</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">SYNAPSE_PORT=12800</span>\n    <span class=\"hljs-attr\">depends_on:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">postgres</span>\n  \n  <span class=\"hljs-attr\">postgres:</span>\n    <span class=\"hljs-attr\">image:</span> <span class=\"hljs-string\">postgres:16</span>\n    <span class=\"hljs-attr\">volumes:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">pgdata:/var/lib/postgresql/data</span>\n    <span class=\"hljs-attr\">environment:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">POSTGRES_DB=synapse</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">POSTGRES_PASSWORD=...</span></code></pre><h2>प्रदर्शन विशेषताएँ</h2>\n<table>\n<thead>\n<tr>\n<th>ऑपरेशन</th>\n<th>विलंबता</th>\n<th>थ्रूपुट</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>मेमोरी स्टोर</td>\n<td>~5ms</td>\n<td>1000+ req/s</td>\n</tr>\n<tr>\n<td>मेमोरी रिकॉल</td>\n<td>~20ms</td>\n<td>500 req/s</td>\n</tr>\n<tr>\n<td>FTS5 खोज</td>\n<td>~10ms</td>\n<td>800 req/s</td>\n</tr>\n<tr>\n<td>सिमेंटिक खोज</td>\n<td>~50ms</td>\n<td>200 req/s</td>\n</tr>\n<tr>\n<td>चैट poll</td>\n<td>~5ms</td>\n<td>2000 req/s</td>\n</tr>\n</tbody></table>\n<h2>अगले कदम</h2>\n<ul>\n<li><a href=\"/docs/concepts/memory-model\">मेमोरी मॉडल</a></li>\n<li><a href=\"/docs/concepts/multi-tenancy\">मल्टी-टैनेंसी</a></li>\n<li><a href=\"/docs/concepts/fts5-search\">FTS5 Search</a></li>\n</ul>\n","urls":{"html":"/docs/concepts/architecture","text":"/docs/concepts/architecture?format=text","json":"/docs/concepts/architecture?format=json","llm":"/docs/concepts/architecture?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}